🛠️📝 Wordlists y Reglas de Contraseñas
Muchos usuarios crean contraseñas simples en lugar de seguras.
👉 Para mitigar esto, los sistemas aplican políticas de contraseñas:
-
📏 Mínimo 8 caracteres
-
🔠 Al menos una mayúscula
-
🔢 Un número
-
🔣 Un símbolo
👥 Comportamiento humano
Aunque existen políticas, los usuarios siguen patrones predecibles:
-
🏢 Nombre de la empresa
-
🐶 Mascotas
-
👨👩👦 Familia
-
⚽ Hobbies / Deportes
-
📅 Mes actual o un número al final
🧩 Ejemplos comunes de contraseñas
| Descripción | Sintaxis |
|---|---|
| Primera letra mayúscula | Password |
| Agregar números | Password123 |
| Agregar año | Password2022 |
| Agregar mes | Password02 |
| Último carácter ! | Password2022! |
| Caracteres especiales | P@ssw0rd2022! |
🛠️ Creación de Wordlists y Rules
Podemos usar Hashcat para mutar palabras base con rules.
📂 Archivo de entrada (password.list)
password
📂 Archivo de reglas (custom.rule)
:
c
so0
c so0
sa@
c sa@
c sa@ so0
$!
$! c
$! so0
$! sa@
$! c so0
$! c sa@
$! so0 sa@
$! c so0 sa@
🔑 Significado de las reglas
-
:→ No cambia nada -
c→ Capitaliza (primera letra en mayúscula) -
so0→ Sustituyeo → 0 -
sa@→ Sustituyea → @ -
$!→ Añade!al final
📌 Puedes combinar reglas → Ejemplo: c so0 $!
📌 Aplicar reglas a la lista
hashcat --force password.list -r custom.rule --stdout | sort -u > mut_password.list
📂 Salida (mut_password.list)
password
Password
passw0rd
Passw0rd
p@ssword
P@ssword
P@ssw0rd
password!
Password!
passw0rd!
p@ssword!
Passw0rd!
P@ssword!
p@ssw0rd!
P@ssw0rd!
💡 De 1 palabra base → obtuvimos 15 variaciones realistas.
⚡ Rules predefinidas
Hashcat y JtR ya traen rules listas:
-
🏆
best64.rule→ Las 64 mutaciones más comunes y efectivas -
📚
rockyou-30000.rule→ Miles de variaciones sobre la lista RockYou
Ejemplo:
hashcat -a 0 -m 0 hash.txt rockyou.txt -r /usr/share/hashcat/rules/best64.rule
🕵️ Generar Wordlists con OSINT + CeWL
Podemos extraer palabras de páginas web:
cewl https://www.inlanefreight.com -d 4 -m 6 --lowercase -w inlane.wordlist
wc -l inlane.wordlist
👉 Esto genera una lista con palabras relacionadas a la empresa, aumentando el % de éxito.
🧪 Ejercicio: Caso de Mark White
📋 OSINT Info:
-
👤 Nombre: Mark White
-
🎂 05/08/1998
-
🏢 Empresa: Nexura Ltd.
-
📏 Política: ≥ 12 caracteres, mayúscula, minúscula, número, símbolo
-
🌍 San Francisco, USA
-
🐱 Mascota: Bella
-
👩❤️👨 Esposa: Maria
-
👦 Hijo: Alex
-
⚾ Fan de Baseball
📌 Hash a crackear:
97268a8ae45ac7d15c3cea4ce6ea550b
1️⃣ Crear el HTML local
Crea un archivo mark_white.html con el contenido:
<!DOCTYPE html>
<html>
<head><title>Mark White Bio</title></head>
<body>
<h1>Mark White</h1>
<ul>
<li>Born: August 5, 1998</li>
<li>Works at Nexura, Ltd.</li>
<li>Lives in San Francisco, CA, USA</li>
<li>Pet: cat named Bella</li>
<li>Wife: Maria</li>
<li>Son: Alex</li>
<li>Fan of baseball</li>
</ul>
</body>
</html>
Guárdalo en la carpeta de trabajo donde vas a generar tu wordlist.
2️⃣ Servir el HTML con Python
python3 -m http.server 6969
-
Esto levanta un servidor HTTP en
http://127.0.0.1:6969/. -
Ahora puedes acceder a tu HTML desde el navegador o CeWL.
3️⃣ Generar el diccionario con CeWL apuntando al HTML local
cewl -d 1 -m 2 --with-numbers -w wordlist_mark.txt http://127.0.0.1:6969/mark_white.html
-
-d 1: Profundidad de araña 1. -
-m 2: Palabras mínimas de 2 caracteres. -
--with-numbers: Incluye números como el año de nacimiento.

4️⃣ Generar combinaciones de palabras
hashcat --stdout -a 1 wordlist_mark.txt wordlist_mark.txt > combinacion_palabras.txt
- Se combinan todas las palabras entre sí para cubrir posibles contraseñas largas (≥12 caracteres).

- Luego filtramos solo las combinaciones que cumplan con la longitud mínima:
awk 'length($0) >= 12' combinacion_palabras.txt > combinacion_palabras_12.txt

5️⃣ Crear reglas de transformación
Archivo custom.rule con reglas como:
:
c
so0
c so0
sa@
c sa@
c sa@ so0
$!
$! c
$! so0
$! sa@
$! c so0
$! c sa@
$! so0 sa@
$! c so0 sa@
-
c: Pone mayúscula inicial -
sa@: Sustituyeapor@ -
so0: Sustituyeopor0 -
$!: Añade!al final
6️⃣ Aplicar reglas a las combinaciones
hashcat --stdout -r custom.rule combinacion_palabras_12.txt > mut_mark_final.txt

7️⃣ Crackear el hash
hashcat -a 0 -m 0 hash.txt mut_mark_final.txt