Parte: 3 — Hacking ético y pentesting: metodología · Fuente: Documentación oficial de Hashcat y John the Ripper (Openwall); NIST SP 800-63B ⏱️ Duración estimada: 130 min · Nivel: Avanzado
El alumno aprenderá a recuperar contraseñas en texto claro a partir de hashes obtenidos legítimamente en un laboratorio, usando John the Ripper y Hashcat: identificar el tipo de hash correcto, elegir entre ataque de diccionario, reglas de mutación, máscara o híbrido, aprovechar la aceleración por GPU, y a partir de los resultados evaluar la fortaleza real de la política de contraseñas de una organización.
Al finalizar, el alumno podrá:
-m) y John (--format).| # | Tema | Por qué importa |
|---|---|---|
| 1 | Identificación del tipo de hash | Un modo incorrecto en Hashcat/John no produce ningún resultado |
| 2 | Ataque de diccionario | El método más eficiente contra contraseñas elegidas por humanos |
| 3 | Reglas de mutación | Transforman password en variantes como P@ssw0rd! automáticamente |
| 4 | Ataques de máscara | Fuerza bruta dirigida por un patrón conocido, mucho más eficiente que la fuerza bruta pura |
| 5 | Ataques híbridos | Combinan diccionario y máscara para cubrir patrones parcialmente predecibles |
| 6 | Aceleración por GPU | Diferencia de varios órdenes de magnitud frente al cracking por CPU |
| 7 | Salting y rainbow tables | El salt individual por hash inutiliza las tablas precomputadas |
| 8 | KDF lentos (bcrypt/Argon2) | Diseñados deliberadamente para hacer inviable el cracking a escala |
-m (por ejemplo, 1000 para NTLM); en John, al parámetro --format.best64, porque anticipan exactamente ese patrón; la longitud importa más que la complejidad forzada.?u?l?l?l?l?d?d?d?d (mayúscula, cuatro minúsculas, cuatro dígitos). Característica clave: reduce drásticamente el espacio de búsqueda frente a una fuerza bruta sin restricciones.sudo apt install john; ofrece autodetección de formato y es especialmente cómodo en CPU.sudo apt install hashcat; domina en velocidad cuando hay GPU disponible. Verifica los dispositivos con hashcat -I.gunzip -k /usr/share/wordlists/rockyou.txt.gz.best64.rule incluida por defecto en /usr/share/hashcat/rules/; también existen conjuntos más agresivos como rockyou-30000.rule.hashcat --identify: para determinar el tipo de hash antes de lanzar cualquier ataque.secretsdump.py de una VM propia, o hashes generados manualmente para práctica con openssl passwd o mkpasswd).-D 1) aunque más lento.El cracking de contraseñas se practica exclusivamente sobre hashes propios o extraídos en un engagement autorizado por escrito. Las contraseñas recuperadas son datos altamente sensibles: se documentan únicamente para demostrar impacto y deben destruirse al cerrar el laboratorio o el contrato, nunca reutilizarse fuera del alcance acordado.
hashcat --identify hashes.txt o hashid '$1$xyz$abc...'.1000): hashcat -m 1000 -a 0 hashes.txt /usr/share/wordlists/rockyou.txt.hashcat -m 1000 -a 0 hashes.txt rockyou.txt -r /usr/share/hashcat/rules/best64.rule.hashcat -m 1000 -a 3 hashes.txt '?l?l?l?l?d?d?d?d'.hashcat -m 1000 -a 6 hashes.txt rockyou.txt '?d?d?d?d'.john --wordlist=rockyou.txt hashes.txt y consulta resultados con john --show hashes.txt.hashcat -m 1000 hashes.txt --show.-D 1) frente a GPU (-D 2) si tu laboratorio dispone de una GPU dedicada.mkpasswd -m bcrypt y compara el tiempo de un solo intento de crackeo frente a un hash NTLM equivalente.hcxpcapngtool al formato Hashcat (-m 22000) y ejecuta un ataque de diccionario sobre él.-m correspondiente en Hashcat.best64 sobre el mismo conjunto de hashes.Nombre2024! y ejecútala.-a 6 o -a 7) combinando diccionario y máscara.Reto: a partir de un conjunto de hashes de tu laboratorio (mínimo 10, con al menos dos tipos distintos), crackea el máximo número posible y produce un informe de fortaleza de contraseñas.
Criterio de aceptación: el alumno documenta el tipo de hash de cada conjunto, el ataque exacto usado para crackearlo, el porcentaje total recuperado, una clasificación de las contraseñas obtenidas por nivel de debilidad, y una recomendación concreta de política de contraseñas (longitud mínima, uso de MFA, prohibición de patrones comunes).
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
| Hashcat reporta "No hashes loaded" | El modo -m no coincide con el formato real del hash; confirmar con hashcat --identify |
| Hashcat reporta "Separator unmatched" | El archivo mezcla formatos (usuario:hash y hash suelto); limpiar el archivo dejando un formato consistente |
| Velocidad de cracking muy baja e inesperada | El hash usa un KDF lento por diseño (bcrypt/Argon2) o no hay GPU disponible; ajustar expectativas de tiempo |
| John no detecta el formato automáticamente | Especificar el formato manualmente con --format=nt o el que corresponda |
rockyou.txt no se encuentra |
Falta descomprimir /usr/share/wordlists/rockyou.txt.gz con gunzip -k primero |
| Ataque de máscara tarda demasiado | El patrón elegido es demasiado amplio; reducir el espacio con suposiciones más específicas sobre longitud y conjunto de caracteres |
❓ ¿Debo usar John the Ripper o Hashcat? John destaca en CPU, en la variedad de formatos soportados y en su autodetección cómoda. Hashcat domina en velocidad bruta cuando hay GPU disponible. En la práctica profesional se usan ambos según el hash y el hardware disponible.
❓ ¿Por qué no logro crackear un hash bcrypt o Argon2? Porque están diseñados deliberadamente para ser lentos y usar salt individual; cada intento de contraseña cuesta un cómputo significativo, a diferencia de MD5 o NTLM que permiten miles de millones de intentos por segundo. Esa lentitud es precisamente su mecanismo de defensa.
❓ ¿Realmente ayudan tanto las reglas de mutación?
Sí, de forma considerable: la mayoría de contraseñas humanas son una palabra base con una mutación predecible (mayúscula inicial, año al final, símbolo de cierre). Reglas como best64 capturan exactamente esos patrones observados en filtraciones reales.
❓ Qué debo hacer con las contraseñas que logro crackear en un engagement real? Se documentan únicamente para demostrar impacto (por ejemplo, reutilización de credenciales o política débil) en el informe entregado al cliente, y se destruyen de forma segura al cierre del compromiso, conforme a lo pactado en las reglas de engagement.
❓ ¿Por qué la longitud importa más que la complejidad en una política de contraseñas? Porque cada carácter adicional multiplica exponencialmente el espacio de búsqueda, mientras que exigir mayúsculas/símbolos suele producir patrones predecibles (mayúscula inicial, símbolo final) que las reglas de mutación ya anticipan; NIST SP 800-63B refleja este cambio de enfoque.
Clase 079 — Pivoting y reenvío de puertos
Clase 081 — Ataques a credenciales: fuerza bruta y password spraying