Introducción
En este laboratorio, aprenderá los fundamentos para descifrar un hash PMKID (Pairwise Master Key Identifier) de WPA/WPA2 utilizando Hashcat, una herramienta de recuperación de contraseñas potente y versátil. Un PMKID es parte del proceso de autenticación WPA/WPA2 y a veces se puede capturar de un punto de acceso sin necesidad de que un cliente esté presente. Descifrar un PMKID suele ser más eficiente que descifrar un handshake completo de 4 vías.
Recorrerá todo el proceso, desde la preparación de un archivo hash hasta la ejecución de un ataque de diccionario con Hashcat. Esta experiencia práctica le proporcionará una comprensión práctica de cómo funciona el descifrado de contraseñas en un entorno controlado y educativo. Todas las actividades en este laboratorio son solo para fines educativos.
Convertir la Captura PMKID a un Formato Compatible con Hashcat
En este paso, aprenderá sobre el formato requerido para que Hashcat descifre hashes PMKID. Típicamente, los PMKID se extraen de archivos de captura de red sin procesar (por ejemplo, archivos .pcapng). Una herramienta como hcxpcapngtool se utiliza para convertir la captura a un formato de hash de texto plano que Hashcat puede procesar.
El comando para hacer esto sería:
hcxpcapngtool -o <archivo_hash_salida> <archivo_captura_entrada.pcapng>
Para este laboratorio, para garantizar un proceso fluido, ya hemos realizado esta conversión por usted. El hash resultante se guarda en un archivo llamado pmkid.hash en su directorio actual (~/project).
Examinemos el contenido de este archivo para comprender su estructura. Utilice el comando cat para mostrar el contenido del archivo.
cat pmkid.hash
Verá la siguiente salida, que es una sola línea que representa el hash PMKID:
d5b6c18645897310626525389ebb3461*a0b1c2d3e4f5*f9e8d7c6b5a4*4d795377656574486f6d65
Este formato es PMKID*MAC_AP*MAC_STA*SSID_HEX. Cada parte está separada por un asterisco, proporcionando a Hashcat toda la información necesaria para realizar el ataque.
Seleccionar el Modo Correcto de Hashcat para WPA-PMKID, que es -m 16800
En este paso, identificará el modo correcto para descifrar hashes PMKID en Hashcat. Hashcat soporta cientos de algoritmos de hash diferentes, y a cada uno se le asigna un número de modo único. Proporcionar el modo correcto es esencial para que Hashcat funcione correctamente.
Puede encontrar la lista de todos los tipos de hash compatibles y sus modos correspondientes utilizando la opción --help con el comando hashcat. Para acotar la lista, puede canalizar la salida a grep y buscar una palabra clave específica como "PMKID".
Ejecute el siguiente comando para encontrar el modo para WPA-PMKID:
hashcat --help | grep "WPA-PMKID"
La salida mostrará el modo de hash relevante:
16800 | WPA-PMKID-PBKDF2 | Network Protocols
Como puede ver en la salida, el número de modo para WPA-PMKID-PBKDF2 es 16800. Utilizará este número de modo con la opción -m en su comando Hashcat.
Construir el Comando Hashcat con el Archivo Hash
En este paso, comenzará a construir el comando hashcat. La sintaxis básica para un ataque de diccionario es hashcat [opciones] <archivo_hash> <archivo_lista_palabras>.
Hasta ahora, ha identificado dos componentes clave:
- El modo hash:
-m 16800 - El archivo hash:
pmkid.hash
Vamos a juntar esto. También necesitamos especificar un modo de ataque usando la opción -a. Un ataque de diccionario es el modo 0, por lo que usaremos -a 0. Este es el modo de ataque predeterminado, pero es una buena práctica especificarlo explícitamente.
Intentemos ejecutar el comando solo con el modo hash y el archivo hash. Esto fallará, pero es una buena manera de confirmar nuestra sintaxis y ver qué espera Hashcat a continuación.
hashcat -m 16800 pmkid.hash
Hashcat se iniciará y luego saldrá con un mensaje de uso, porque le falta un argumento requerido para este tipo de ataque.
hashcat (v6.2.6) starting...
* Device #1: WARNING! Kernel exec timeout is not disabled.
...
Usage: hashcat [options]... hash|hashfile|hccapxfile [dictionary|mask|directory]...
Try --help for more help.
El error indica que para el modo de ataque predeterminado (diccionario), se requiere una lista de palabras o un directorio. Esto confirma que nuestra estructura de comando es correcta hasta ahora y nos lleva directamente al siguiente paso: proporcionar una lista de palabras.
Especificar una Lista de Palabras para el Ataque de Diccionario
En este paso, completará el comando Hashcat añadiendo una lista de palabras. Un ataque de diccionario funciona tomando cada palabra de un archivo dado (la "lista de palabras" o "diccionario") y probándola como una posible contraseña contra el hash.
Para este laboratorio, se ha creado un pequeño archivo de lista de palabras llamado wordlist.txt en el directorio ~/project. Vamos a inspeccionar su contenido.
cat wordlist.txt
Verá una lista corta de posibles contraseñas:
secret
123456
password123
qwertyuiop
labex
Una de estas palabras es la contraseña correcta para nuestro hash. Ahora puede construir el comando completo añadiendo el nombre del archivo de lista de palabras al comando del paso anterior.
El comando completo es: hashcat -m 16800 -a 0 pmkid.hash wordlist.txt
-m 16800: Especifica el tipo de hash WPA-PMKID.-a 0: Especifica el modo de ataque de diccionario.pmkid.hash: El archivo que contiene el hash a descifrar.wordlist.txt: El archivo de diccionario que contiene los candidatos a contraseña.
En el paso final, ejecutará este comando para descifrar el hash.
Ejecutar Hashcat y Analizar los Resultados del Descifrado
En este paso, ejecutará el comando Hashcat completo y analizará la salida para encontrar la contraseña descifrada. Es hora de juntar todo y comenzar el proceso de descifrado.
Ejecute el comando completo en su terminal:
hashcat -m 16800 -a 0 pmkid.hash wordlist.txt
Hashcat se inicializará, mostrará información de la sesión y comenzará a probar las contraseñas de wordlist.txt. Dado que la lista de palabras es muy pequeña, el proceso será casi instantáneo. Una vez encontrada la contraseña correcta, Hashcat la mostrará e informará el estado como "Cracked" (Descifrado).
La salida se verá similar a esto:
...
Session..........: hashcat
Status...........: Cracked
Hash.Name........: WPA-PMKID-PBKDF2
Hash.Target......: d5b6c18645897310626525389ebb3461*a0b1c2d3e4f5*...
Time.Started.....: ...
Time.Estimated...: 0 secs
Guess.Base.......: File (wordlist.txt)
...
Recovered........: 1/1 (100.00%) Digests
...
d5b6c18645897310626525389ebb3461*a0b1c2d3e4f5*f9e8d7c6b5a4*4d795377656574486f6d65:password123
All hashes have been recovered.
...
La línea más importante es d5b6c18645897310626525389ebb3461*...:password123, que muestra el hash original seguido de dos puntos y la contraseña recuperada: password123.
Hashcat guarda automáticamente las contraseñas descifradas. Para ver los hashes descifrados previamente sin ejecutar el ataque de nuevo, puede usar la opción --show.
hashcat -m 16800 pmkid.hash --show
Este comando mostrará instantáneamente el hash descifrado y el par de contraseñas:
d5b6c18645897310626525389ebb3461*a0b1c2d3e4f5*f9e8d7c6b5a4*4d795377656574486f6d65:password123
Resumen
¡Felicitaciones por descifrar con éxito un hash PMKID! En este laboratorio, adquirió experiencia práctica con Hashcat y aprendió los pasos esenciales involucrados en un ataque de diccionario.
Ha aprendido a:
- Reconocer el formato compatible con Hashcat para hashes PMKID.
- Identificar el modo correcto de Hashcat para un tipo de hash específico (
-m 16800para WPA-PMKID). - Construir un comando Hashcat completo para un ataque de diccionario (
-a 0). - Ejecutar el ataque utilizando un archivo de hash y una lista de palabras.
- Analizar la salida y ver las contraseñas descifradas utilizando la opción
--show.
Si bien este laboratorio utilizó un ejemplo pequeño y simple, los mismos principios se aplican a escenarios del mundo real, que implicarían listas de palabras mucho más grandes y hardware más potente. Las habilidades que ha aprendido brindan una base sólida para comprender la seguridad de las contraseñas y las prácticas de hacking ético.
