
NTLMv1 Multitool
Questo strumento converte gli hash NTLMv1 in NTLM, o più precisamente formatta le risposte alla challenge NTLMv1 in un formato che può essere crackato con hashcat modalità 14000.
Se specifichi --ct3, lo strumento calcola le ultime 4 cifre dell'NTLM per te; se specifichi --json, allora --ct3 è implicito e lo restituisce come elemento pt3, ad esempio:
python3 ntlmv1.py --ntlm "DC1$::MOG:AC51EC464A91A35A04A862DA3106EC2B352661ECEF909C5E:AC51EC464A91A35A04A862DA3106EC2B352661ECEF909C5E:1122334455667788" --json
{"ntlmv1": "DC1$::MOG:AC51EC464A91A35A04A862DA3106EC2B352661ECEF909C5E:AC51EC464A91A35A04A862DA3106EC2B352661ECEF909C5E:1122334455667788", "user": "DC1$", "domain": "MOG", "challenge": "1122334455667788", "lmresp": "AC51EC464A91A35A04A862DA3106EC2B352661ECEF909C5E", "ntresp": "AC51EC464A91A35A04A862DA3106EC2B352661ECEF909C5E", "ct3": "352661ECEF909C5E", "ct3_crack": "ct3_to_ntlm.bin 352661ECEF909C5E 1122334455667788", "pt3": "8c71", "hash1": "AC51EC464A91A35A:1122334455667788", "hash2": "04A862DA3106EC2B:1122334455667788"}
Infine in questo aggiornamento ho spostato le funzioni in main() così puoi semplicemente importare il modulo per un uso diretto.
Ho aggiunto 2 nuove opzioni, --hashcat e --hcutils, che impostano rispettivamente il percorso di hashcat e hashcat-utils, così puoi fare un copia e incolla diretto dallo strumento.
Eseguirai lo strumento in questo modo se la tua directory hashcat si trova in ~/git/hashcat e la tua directory hashcat-utils in ~/git/hashcat-utils:
python3 ./ntlmv1.py --ntlm "SERVER1$::MOG:9DE7F41D81C1207400000000000000000000000000000000:DE766A98B60D1C911DCFFFDBB3E521314B2CE34EAB63CC7B:1122334455667788" --hashcat "~/git/hashcat" --hcutils "~/git/hashcat-utils"
Sì, è presumibilmente compatibile con Python 3; ho anche unito ntlmv1 e ntlmv1-ess.
Multitool NTLMv1
Questo strumento modifica gli hash NTLMv1/NTLMv1-ESS/MSCHAPv2 in modo che possano essere crackati con la modalità DES 14000 in hashcat.
Questo strumento si basa sul lavoro di atom del team Hashcat https://hashcat.net/forum/thread-5832.html
Si basa anche su https://hashcat.net/forum/thread-5912.html e https://www.youtube.com/watch?v=LIHACAct2vo
Installa lo strumento di nuova generazione ntlmv1_nextgen.py come comando globale ntlmv1-multi con uv:
uv tool install .
ntlmv1-multi --ntlmv1 "hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788"
Oppure eseguilo direttamente dal repository senza installarlo:
uv run ntlmv1_nextgen.py --ntlmv1 "hashcat::DUSTIN-5AA37877:..."
Il progetto include un pyproject.toml (Python 3.14+, dipendenza pycryptodome), così uv risolve tutto per te; il ntlmv1.py originale continua a funzionare in modo autonomo con qualsiasi interprete Python 3.
ntlmv1_nextgen.py)ntlmv1_nextgen.py (installato come comando ntlmv1-multi) è il parser moderno. Accetta NTLMv1, blob $99$ e MSCHAPv2, gestisce automaticamente ESS e può completare l'intera conversione NTLMv1 -> NTLM da un potfile crackato in un solo passaggio. Opzioni disponibili:
| Opzione | Descrizione |
|---|---|
--ntlmv1 <hash> | Hash NTLMv1 in formato Responder (user::host:LM:NT:challenge). |
--99 <blob> | Blob base64 in stile $99$. |
--mschapv2 <hash> | Hash MSCHAPv2 in formato John the Ripper. |
--nthash <hex> | Hash NTLM a 32 caratteri; deriva le chiavi DES e i candidati hashcat. |
--password <pw> | Deriva le chiavi DES --key1/--key2 da una password nota. |
--key1 <hex> / --key2 <hex> | Fornisce direttamente le chiavi DES a 16 esadecimali per CT1/CT2 (ha precedenza su --potfile). |
--potfile <path> | Potfile di hashcat/rainbowcrackalack con le chiavi crackate della modalità 14000; recupera automaticamente key1/key2 per completare la conversione NTLMv1 -> NTLM. |
--hashcat | Emette stringhe in formato hashcat per CT1/CT2. |
--json | Solo output JSON (implica il calcolo di CT3). |
Per la cattura usa responder con il flag --lm; senza --lm attiverai ESS, che richiederà più tempo per il cracking. Inoltre è disponibile un nuovo flag, --disable-ess, che tenta di disabilitare ESS e forzare il downgrade. Prova prima --disable-ess e, se fallisce, prova --lm. Se usi --disable-ess o --lm, assicurati che la client challenge sia 1122334455667788 per usare la FPGA; tuttavia ciò potrebbe attivare alcune protezioni IDS/IPS di rete se vedono quel traffico.
La cattura apparirà così.
[SMB] NTLMv1 Client : 184.64.60.62
[SMB] NTLMv1 Username : DUSTIN-5AA37877\hashcat
[SMB] NTLMv1 Hash : hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788
[*] Skipping previously captured hash for DUSTIN-5AA37877\hashcat
La parte dell'hash appare così
hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788
Quindi usa il multi tool in questo modo (è anche compatibile con Python 2)
python3 ntlmv1.py --ntlmv1 hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788
Lo strumento produrrà i seguenti dati senza modificare le server challenge, ecc.
['hashcat', '', 'DUSTIN-5AA37877', '76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D', '727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595', '1122334455667788']
Hostname: DUSTIN-5AA37877
Username: hashcat
Challenge: 1122334455667788
LM Response: 76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D
NT Response: 727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595
CT1: 727B4E35F947129E
CT2: A52B9CDEDAE86934
CT3: BB23EF89F50FC595
To Calculate final 4 characters of NTLM hash use:
./ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788
To crack with hashcat create a file with the following contents:
727B4E35F947129E:1122334455667788
A52B9CDEDAE86934:1122334455667788
To crack with hashcat:
./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1
La password usata in questo caso è "password" e possiamo verificare l'hash NTLM con
echo -n password | iconv -f utf8 -t utf16le | openssl dgst -md4
(stdin)= 8846f7eaee8fb117ad06bdd830b7586c
Con ct3_to_ntlm.bin degli hashcat utils, scritto da atom, puoi calcolare gli ultimi 4 caratteri dell'hash NTLM dalla challenge NTLMv1, che lo strumento restituisce
./ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788
586c
Questo corrisponde alla parte finale dell'hash NTLM, quindi siamo a posto. Il passo successivo è crackare gli hash con hashcat, quindi dobbiamo creare un file hashes.txt con
727B4E35F947129E:1122334455667788
A52B9CDEDAE86934:1122334455667788
Per crackarlo con hashcat usi
./hashcat -m 14000 -a 3 -1 charsets/DES_full.charset --hex-charset hashes.txt ?1?1?1?1?1?1?1?1
Una nota importante: hashcat restituirà chiavi DES e non chiavi NTLM; dovrai convertirle in NTLM usando deskey_to_ntlm.pl di Hashcat Utils. Puoi farlo con
./deskey_to_ntlm.pl [cracked des key 1]
./deskey_to_ntlm.pl [cracked des key 2]
Poi combini le due chiavi NTLM con la terza parte della password, calcolata da (qualunque cosa lo strumento restituisca)
./ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788
Somma queste 3 parti e sei a posto.
Se stai semplicemente testando il mio codice e conosci già la password, puoi usare il convertitore DES
python ntlm-to-des.py --ntlm b4b9b02e6f09a9bd760f388b67351e2b
DESKEY1: b55d6d04e67926
DESKEY2: bcba83e6895b9d