Codebase list poshc2 / upstream/latest resources / modules / Get-CreditCardData.ps1
upstream/latest

Tree @upstream/latest (Download .tar.gz)

Get-CreditCardData.ps1 @upstream/latestraw · history · blame

<#
.Synopsis
    Searches recursively through the provided path searching for valid credit card numbers
.DESCRIPTION
	 Large files are read in chunks so as to not exhaust system resources
.EXAMPLE
    PS C:\> Get-CreditCardData -Path C:\Backup\
#>

Function Get-CreditCardData {

    param (
      [string]$path = $(throw "-path is required";)
    )

    #$Excel = New-Object -ComObject Excel.Application

    $REGEX = [regex]"(?im)(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})"
    $REGEX2 = [regex]"^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$"
    $REGEX3 = [regex]"[456][0-9]{15}","[456][0-9]{3}[-| ][0-9]{4} [-| ][0-9]{4}[-| ][0-9]{4}"

    Get-ChildItem -Rec -Exclude *.exe,*.dll $path -File | % {

        #if (($_.FullName -like "*xls") -or ($_.FullName -like "*.xlsx")){
            #$Workbook = $Excel.Workbooks.Open($_.FullName)
            #If(($Workbook.Sheets.Item(1).Range("A:Z")) | Select-String -pattern $REGEX){
            #    $Workbook.Close($false)
            #    Write-Output "[+] Potential Card data found:" $_.FullName -ForegroundColor green
            #}
        #}

        if ((Select-String -pattern $REGEX -Path $_.FullName -AllMatches).Matches.Count -gt 5 ) {
            Write-Output "[+] Potential Card data found:" $_.FullName -ForegroundColor green
            return
        }

    }
    
}

# Sample credit card data for testing
#3782 8224 6310 0054
#371449635398431
#371449635398432
#371449635398434
#371449635398432
#371449635398430
#371449635398432