Cracking de hashes con hashcat y John the Ripper: modos, reglas, máscaras y ficheros protegidos

Identificar un hash, elegir el modo de hashcat (NTLM, NetNTLMv2, bcrypt, Kerberos), usar reglas y máscaras y crackear zip, KeePass o claves SSH con *2john.

· 3 min de lectura

Más de 100 máquinas del catálogo tienen un paso de cracking de hashes: un hash de una base de datos, de /etc/shadow, de Kerberos o un zip con contraseña. Casi nunca hace falta una GPU potente; hace falta elegir bien el modo y el diccionario. Tienes un identificador de hashes en el navegador en identificar hash.

1. Identificar el hash

nth --text '$2y$10$abc...'          # name-that-hash
hashid -m '5f4dcc3b5aa765d61d8327deb882cf99'
hashcat --identify hash.txt         # hashcat 6.2.6 o posterior

Por el formato se reconocen casi todos:

Aspecto Qué es hashcat -m
32 hex MD5 (o NTLM, según de dónde venga) 0 / 1000
40 hex SHA1 100
64 hex SHA256 1400
$1$... md5crypt (Linux antiguo) 500
$5$... sha256crypt 7400
$6$... sha512crypt (Linux) 1800
$y$... yescrypt (Debian 11+, Ubuntu 22.04+) No: usa John
$2a$, $2b$, $2y$ bcrypt 3200
usuario::DOMINIO:... NetNTLMv2 (Responder) 5600
$krb5asrep$23$ AS-REP 18200
$krb5tgs$23$ Kerberoast (RC4) 13100
eyJ... (3 partes) JWT HS256 16500
pbkdf2_sha256$... Django 10000

Truco

Un hash de 32 caracteres que sale de secretsdump o de un SAM es NTLM (-m 1000), no MD5. Y si viene de una aplicación web, mira el código: puede llevar sal (md5($sal.$pass) es -m 20, md5($pass.$sal) es -m 10).

2. Ataque de diccionario

hashcat -m 1000 hashes.txt /usr/share/wordlists/rockyou.txt
hashcat -m 1000 hashes.txt rockyou.txt --show          # lo ya crackeado
john --wordlist=rockyou.txt hashes.txt
john --show hashes.txt

Con /etc/shadow, John necesita juntarlo con /etc/passwd:

unshadow passwd shadow > unshadowed.txt
john --wordlist=rockyou.txt unshadowed.txt
john --format=crypt --wordlist=rockyou.txt unshadowed.txt    # para yescrypt

3. Reglas: cuando rockyou no basta

Las reglas transforman cada palabra (mayúsculas, números al final, leet). Multiplican los intentos pero aciertan mucho más con contraseñas "corporativas":

hashcat -m 1000 hashes.txt rockyou.txt -r /usr/share/hashcat/rules/best64.rule
hashcat -m 1000 hashes.txt rockyou.txt -r /usr/share/hashcat/rules/OneRuleToRuleThemAll.rule
john --wordlist=rockyou.txt --rules=Jumbo hashes.txt

Diccionario a medida: el nombre de la empresa, de la máquina, de los usuarios, la estación y el año.

cewl http://objetivo.htb -d 2 -m 5 -w palabras.txt     # palabras de la propia web
hashcat --stdout palabras.txt -r best64.rule > lista.txt

4. Máscaras: cuando sabes el patrón

Si la política exige "mayúscula, minúsculas y cuatro números" o has visto que las contraseñas son Empresa2024!:

# ?u mayúscula ?l minúscula ?d número ?s símbolo ?a cualquiera
hashcat -m 1000 -a 3 hashes.txt '?u?l?l?l?l?l?d?d?d?d'
hashcat -m 1000 -a 3 hashes.txt 'Empresa?d?d?d?d?s'
# Diccionario + máscara (palabra seguida de 4 cifras)
hashcat -m 1000 -a 6 hashes.txt palabras.txt '?d?d?d?d'

5. Ficheros protegidos: las herramientas *2john

John trae un conversor para casi cualquier fichero con contraseña. Convierte y crackea:

zip2john copia.zip > zip.hash
rar2john copia.rar > rar.hash
keepass2john Base.kdbx > kp.hash
ssh2john id_rsa > ssh.hash
pdf2john informe.pdf > pdf.hash
office2john documento.docx > office.hash
7z2john backup.7z > 7z.hash         # necesita el módulo de Perl Compress::Raw::Lzma
john --wordlist=rockyou.txt zip.hash

Para hashcat, quita el nombre del fichero del principio de la línea y busca el modo con hashcat --example-hashes | grep -i keepass. Ejemplos: en Access, un zip con la contraseña dentro de una base de datos; en Active, un ticket de Kerberoast (guía de Kerberoasting).

6. Rendimiento

  • Hashes rápidos (MD5, NTLM, SHA1): millones o miles de millones por segundo. Prueba diccionario con reglas grandes y máscaras.
  • Hashes lentos (bcrypt, sha512crypt, KeePass, Kerberos AES): miles por segundo. Solo diccionario corto y bien elegido. Si rockyou entero va a tardar días, en un CTF casi seguro que la vía no es esa.
  • Sin GPU (por ejemplo, en una máquina virtual), John suele ir más rápido que hashcat en CPU para hashes lentos.
hashcat -b -m 3200              # cuánto va a tardar en tu equipo
hashcat ... -O -w 3             # kernels optimizados y más carga de trabajo

Errores típicos

  • Token length exception: el formato del fichero no es el que espera ese modo (espacios, el nombre de usuario delante, o el modo equivocado). Usa --username si las líneas son usuario:hash.
  • No hashes loaded en John: indícale el formato con --format= (john --list=formats).
  • Crackea en John pero no en hashcat (o al revés): algunos formatos tienen variantes; mira --example-hashes y compara con el tuyo carácter a carácter.

Y después

Una contraseña crackeada vale para más que una cuenta: pruébala en todos los usuarios y servicios (reutilización de contraseñas). En un dominio, un spray con ella puede abrir varias cuentas a la vez (enumeración de AD y password spraying).

Practícalo en máquinas reales

Máquinas de Hack The Box donde se usa la técnica. Cada ▶ salta al minuto del vídeo de IppSec donde aparece.

Cracking de hashes 101 máquinas

Ver las 101 máquinas →

¿Ves un error o echas algo en falta? Cuéntanoslo