John the Ripper - Crackeo de Contrasenas
John the Ripper - Crackeo de Contrasenas
1. Introduccion
John the Ripper (comunmente conocido como John) es una de las herramientas mas utilizadas para el crackeo de contrasenas mediante fuerza bruta. Es una utilidad de codigo abierto desarrollada inicialmente por Solar Designer que soporta multiples formatos de hash.
Esta guia cubre la instalacion, configuracion, parametros y ejemplos practicos para el uso efectivo de esta herramienta en penetration tests y capture the flag (CTF).
2. Caracteristicas Principales
2.1. Formatos Soportados
John soporta diversos formatos de hash:
| Categoria | Formatos |
|---|---|
| Tradicionales | DES, MD5, bcrypt |
| Modernos | SHA-256, SHA-512, SHA-3 |
| Windows | NTLM, LM |
| Red | NetNTLMv1, NetNTLMv2 |
| Others | Kerberos, GPG, SSH, PDF, ZIP |
2.2. Modos de Operacion
| Modo | Descripcion |
|---|---|
| Single | Usa informacion del usuario para generar candidatos |
| Wordlist | Itera sobre una lista de palabras |
| Incremental | Fuerza bruta caracter por caracter |
| External | Usa un filtro externo como modo |
3. Instalacion
3.1. Arch Linux
sudo pacman -S john
3.2. Kali/Parrot
sudo apt install john
3.3. Desde Fuente
git clone https://github.com/magnumripper/JohnTheRipper
cd JohnTheRipper/src
./configure
make -j4
sudo make install
4. Identificacion de Formatos
4.1. hashid
Herramienta para identificar el tipo de hash.
# Instalacion
pip install hashid
# Uso
hashid hash.txt
hashid -m hash.txt # Con metodo
4.2. Identificacion Manual
# Longitud del hash
MD5: 32 caracteres
SHA-256: 64 caracteres
SHA-512: 128 caracteres
NTLM: 32 caracteres
LM: 32 caracteres (en mayusculas)
# Prefijos
$1$: MD5
$2$: bcrypt
$5$: SHA-256
$6$: SHA-512
4.3.john (auto-deteckion)
#John intenta detectar el formato
john --format=auto hash.txt
5. Modos de Uso
5.1. wordlist Mode
Usa una lista de palabras para generar candidatos de contrasena.
john --wordlist=<wordlist> --format=<formato> hash.txt
| Parametro | Descripcion |
|---|---|
--wordlist |
Archivo de wordlist |
--format |
Formato del hash |
Ejemplo:
john --wordlist=rockyou.txt --format=raw-md5 hash.txt
5.2. incremental Mode
Modo de fuerza bruta caracter por caracter.
john --incremental --format=<formato> hash.txt
Parametros:
| Parametro | Descripcion |
|---|---|
--incremental |
Activa modo incremental |
--max-length |
Longitud maxima |
--min-length |
Longitud minima |
--mask |
Mask para incremental |
Ejemplo:
john --incremental --max-length=8 --format=raw-md5 hash.txt
5.3. Single Mode
Utiliza informacion del usuario (username, GECOS) para generar candidatos.
john --single --format=<formato> hash.txt
Ejemplo:
john --single --format=des hash.txt
6. Pre-procesamiento
6.1. Unshadow
Combina archivos /etc/passwd y /etc/shadow para crear un hash crackeable.
# Combinar archivos
unshadow /etc/passwd /etc/shadow > hash.txt
# Crackear
john --wordlist=wordlist.txt hash.txt
| Parametro | Descripcion |
|---|---|
| passwd | Archivo passwd |
| shadow | Archivo shadow |
Requisito: Acceso como root a /etc/shadow.
6.2. Extraccion de Hashes
John incluye extractores para multiples formatos:
ZIP
zip2john zip archivo.zip > hash.txt
pdf2john.pl archivo.pdf > hash.txt
SSH
ssh2john id_rsa > hash.txt
SSH (Pem)
ssh2john.py id_rsa > hash.txt
GPG
gpg2john archivo.gpg > hash.txt
Keepass
keepass2john database.kdb > hash.txt
BitLocker
bitlocker2john -c <imagen> > hash.txt
7. Formatos de Hash
7.1. Formatos Commones
| Formato | Opcion | Descripcion |
|---|---|---|
| MD5 | raw-md5 |
MD5 simple |
| SHA-256 | raw-sha256 |
SHA-256 simple |
| SHA-512 | raw-sha512 |
SHA-512 simple |
| bcrypt | bcrypt |
bcrypt |
| NTLM | ntlm |
NTLM de Windows |
| LM | lm |
LM de Windows |
| MySQL | mysql |
MySQL |
| PostgreSQL | postgresql |
PostgreSQL |
7.2. Especificar Formato
john --format=sha256crypt hash.txt
john --format=md5crypt hash.txt
john --format=ntlmv2 hash.txt
8. Wordlists
8.1. Wordlists Incorporadas
| Archivo | Ubicacion |
|---|---|
| rockyou.txt | /usr/share/wordlists/rockyou.txt |
| passwords.txt | /usr/share/wordlists/passwords.txt |
| seclists | /usr/share/seclists/Passwords/ |
8.2. Reglas
John puede aplicar reglas a las wordlists para generar variantes:
# Activar reglas por defecto
john --wordlist=wordlist.txt --rules hash.txt
8.3. Crear Custom Rules
Editar el archivo de configuracion de John para agregar reglas personalizadas.
9. Visualizacion de Resultados
9.1. Mostrar Contrasenas Crackeadas
# Mostrar todos los crackeados
john --show hash.txt
# Mostrar de un formato especifico
john --show --format=<formato> hash.txt
9.2. Formato de Salida
#Formato simple
john --show hash.txt
#Solo contrasenas crackeadas
john --show --format=<formato> hash.txt | grep -v "password file"
9.3. Session
# Guardar progreso
john --save-session=nombre hash.txt
# Continuar sesion
john --restore=nombre
10. Ejemplos Practicos
10.1. Crackear MD5
john --wordlist=rockyou.txt --format=raw-md5 hash.txt
10.2. Crackear NTLM
john --wordlist=rockyou.txt --format=ntlm nt_hash.txt
10.3. Crackear LM
john --wordlist=rockyou.txt --format=lm lm_hash.txt
10.4. Crackear SHA-256
john --wordlist=rockyou.txt --format=raw-sha256 hash.txt
10.5. Crackear bcrypt
john --wordlist=rockyou.txt --format=bcrypt hash.txt
10.6. Modo Incremental
john --incremental --format=raw-md5 --max-length=10 hash.txt
10.7. Combinar Unshadow + Crack
unshadow /etc/passwd /etc/shadow > hash.txt
john --wordlist=rockyou.txt hash.txt
11. Optimizacion
11.1. Fork
# Usar multiples cores
john --wordlist=rockyou.txt --format=raw-md5 --fork=4 hash.txt
11.2. Rules Personalizadas
# Usar reglas especificas
john --wordlist=rockyou.txt --rules: KoreLogicRulesAppendYears --format=raw-md5 hash.txt
11.3. Potencial
# Maximo intentos por segundo
john --format=raw-md5 --make-chk=wordlist.txt hash.txt
12. Comparacion con Hashcat
| Caracteristica | John | Hashcat |
|---|---|---|
| Velocidad | Media | Muy rapida |
| GPU | Limitada | Excelente |
| Formatos | Mas | Mas |
| Facilidad | Alta | Media |
| Reglas | Simple | Completa |
Recomendacion:
- Usar hashcat para hashes GPU-accelerated (SHA, bcrypt)
- Usar john para hashes especificos y formatos legacy
13. Feedback
13.1. Lo Que Esta Bien
- Multiples formatos soportados
- Extractores incluidos
- Modo incremental efectivo
13.2. Lo Que Falta
- Documentacion de formatos menos comunes
- Ejemplos de optimizacion
- Comparativa con hashcat
13.3. Mejoras Recomendadas
- Agregar optimizacion GPU
- Documentar reglas avanzadas
- Agregar casos de studio