El pasado mes de marzo después de la presentación que se hizo de este proyecto llamado WiFiChallengeLab en nada más ni nada menos que la Rooted (uno de los eventos más importante de España), se lanzó para todo el público. La verdad que llamó mi atención desde el primer momento y si bien no he podido ir a la rooted de este año, por fortuna tuve la oportunidad de coincidir con el creador de este proyecto (Raul Calvo Laorden) en un cliente, donde en una sesión de formación interna nos dio en primicia la charla, XD
En fin, lo que os les traigo es mi particular Walkthrough de los distintos retos que he podido completar durante el par de semana que le dedique tiempo al asunto. Lamentablemente no logré completarlo, me faltó un reto, pero sin duda aprendí mucho el mismo y me mantuvo bastante entretenido. Por último comentar que el día de hoy se hará publico el Walkthrough oficial del proyecto por si queréis darle un vistazo, tan solo tenéis que ir a la web del proyecto. Una vez más, si quieres aprender y aprender sobre Hacking WiFi, este es tu lugar: WiFiChallengeLab.
Preparación y previa:
Lo primero que nos tocará hacer es poner en modo monitor una de nuestras interfaces de red, en este caso lo hago con la wlan0.
airmon-ng start wlan0
Ahora llega el momento de capturar todo el tráfico alcanzable que se genera en la red wireless del laboratorio.
airodump-ng -c1,44 wlan0mon -w capture
Dejaré esta captura por unos minutos antes de detenerla y procesar los datos que puedan obtenerse. Alrededor de unos 20 minutos, en este caso.
Ahora con la utilidad de Raúl Calvo Laorden (creador de este laboratorio), llamada wifi_db procesaremos los ficheros de Aircrack-ng obtenidos en la primera captura a fin de dejarlos listo para ser revisado con sqlitebrowser.
python3 wifi_db.py /home/user/Lab/capture-01
Al abrirlo, conseguiremos la siguiente vista:
sqlitebrowser db.SQLITE &
Ya con esta información procesada, estamos listos para obtener distintas flags (banderas) de este CFT. Vamos con ello.
List all client MACs:
Desde DB Browser for SQLite, nos desplazaremos en la pestaña Browse Data, seleccionamos la tabla ConnectedAP y obtendremos la primera flag:
Detect APs information:
En este caso con la tabla AP nos valdrá para hacernos con la segunda flag:
Get probes from users:
Para identificar los probes asociados a clientes lo haremos con la tabla ProbeClients:
Find hidden network ESSID:
En la semana del 14 de Marzo estuve comentando junto a mi viejo amigo BigMike algunas ideas aireadas y justo me comentó sobre la herramienta MDK4, a decir verdad, apenas la conocía de nombre, por tanto revisando un poco la ayuda y la documentación identifiqué que ésta nos ofrece la posibilidad de identificar SSID mediante fuerza fruta, por tanto la pondremos en marcha de la siguiente manera:
mdk4 wlan5mon p -f /root/rockyou.txt -t F0:9F:C2:71:22:11
En donde:
- p -> Será la forma de selecionar el modo de ataque para el descubrimiento del SSID
- -f -> Indicaremos un diccionario de palabras para emplear
- -t -> Indicaremos el objetivo (BSSID)
Alternativamente podemos probar con una fuerza bruta “pura”, sin embargo esto demorará algo más, como es lógico.
mdk4 wlan5mon p -b l -t F0:9F:C2:71:22:11
Bien, pues manteniendo nuestro airodump levantado conseguiremos que el ESSID ya no sea oculto para nosotros. Pasaremos del mensaje inicial () a:
Login to the server with users password:
A través del fichero del volcado obtenido en modo monitor y mediante el uso de la herramienta pcapFilter.sh identificaremos las credenciales de acceso al router:
Desde el navegador conseguiremos hacernos con la flag:
Get hidden wifi password:
Para conseguir resolver este reto, me tuve que remontar a mi preparación para el OSWP con el WiFu de Offensive Security y es que estaba recordando que me tocó hacer un ejercicio similar a éste en más de una ocasión, por lo cual me resulto también un poco nostalgico volver a recordarlo. En fin, que lo que tendremos que hacer en esta red WEP sin clientes conectados es un entretenido Ataque de fragmentación y posterior inyección de paquetes que pasaremos describir paso a paso.
Al final de este apartado dejaré algunos enlaces para revisar más profundamente esta técnica y la parte teórica.
Partiendo con la siguiente información:
airodump-ng wlan0mon -c 1 --bssid F0:9F:C2:71:22:11 -w capture_administration
De lo primero será realizar una falsa autenticación al objetivo. Tomemos en cuenta la MAC de nuestra antena:
aireplay-ng -1 10 -e administration -a F0:9F:C2:71:22:11 -h 1e:93:ac:99:13:1d wlan0mon
Ahora ejecutamos un ataque de fragmentación que nos permita obtener PRGA:
aireplay-ng -5 -b F0:9F:C2:71:22:11 -h 1E:93:AC:99:13:1D wlan0mon
Al indicar “y” y pulsar enter, obtendremos un fichero resultado que en este caso es fragment-0315-032049.xor.
Llega el momento de generar un paquete ARP con el PRGA obtenido. Para ello emplearemos packetforge-ng de la siguiente forma:
packetforge-ng -0 -a F0:9F:C2:71:22:11 -h 1E:93:AC:99:13:1D -k 255.255.255.255 -l 255.255.255.255 -y fragment-0315-032049.xor -w paquete_arp
Inyectaremos este paquete generado mediante aireplay-ng:
aireplay-ng -2 -r arp-request wlan0mon
Se empezarán a disparar los IVs (aka Data):
Pasado un ratillo es momento de revisar con aircrack-ng si disponemos de los IVs necesarios para obtener la clave de esta red “oculta”.
aircrack-ng capture_administration-01.cap
Referencias:
- https://www.aircrack-ng.org/doku.php?id=es:fragmentation
- https://medium.com/@alejandrochavezgo/network-attack-sin-clientes-conectados-35e839bf830f
Get wifi-mobile password:
La obtención del handshake es bastante simple en este caso, de hecho con la mera escucha inicial conseguimos hacernos con este primer «apreton de manos» vinculado a la red en cuestión. Ya solo quedará poner en marcha Aircrack-ng:
aircrack-ng capture-01.cap -w /root/rockyou.txt
Alternativamente también podría obtener el handshake de la wifi-mobile mediante la tabla Handshake dentro del DB Browser for SQLite.
Este resultado tendríamos que pasarlo por HashCat para obtener la clave en claro. Me puedo apoyar en el siguiente comando:
hashcat -m 22000 Handshake_wifi-mobile.txt /root/rockyou.txt
Get users traffic passively:
Este reto fue bastante simple de resolver, sin embargo me resulto algo confuso su descripción y fue por eso principalmente que no lograba resolverlo. Una vez comprendí la pista, fue tan solo necesario indicar la subred, es decir: 192.168.2.0/24. Para ello una vez conectado a la red, con un ifconfig nos vale.
Verify Client isolation:
Aquí con las credenciales obtenidas de la wifi-mobile nos conectaremos a dicha red para hacer la verificaciones necesarias.
Una vez conectado, lo primero será identificar nuestra configuración de red asignada:
Y lo siguiente será hacer un barrido de hosts en busca de «vecinos interesantes»:
Los hosts con direcciones IPs 192.168.2.8 y 192.168.2.90 se ven interesantes, hagamos un escaneo de puertos y servicios:
Ambos tienen servidores web habilitados, por tanto ahora tan solo queda comprobar el contenido de lo mismo a través de un navegador. De esta manera se llega a la flag requerida en este reto:
Cabe resaltar que el otro host alberga la misma flag.
Get wifi-admin AP password:
Para conseguir la contraseña a esta red hemos tirado de una falla de implementación conocido que permite el ataque de fuerza bruta contra el WPS (Wi-Fi Protected Setup) habilitado. Para identificar que esta red emplea WPS ejecutamos la siguiente herramienta (la columna Lck indica si el WPS se encuentra deshabiltado):
wash -i wlan0mon
Lo siguiente será emplear la herramienta Reaver para conseguir el PIN WPS e inmediatamente la contraseña del AP:
reaver -i wlan0mon -b F0:9F:C2:71:22:33 -vv
Esta acción podría demorar ciertamente unos minutos.
Get users login IDs (usernames):
En un primer momento, me costó entender lo requerido en este apartado, pero luego rápidamente lo consigues mediante la tabla IdentityAP:
Get cert information:
Para este caso se empleó otra de las herramientas del creador de este laboratorio, en este caso una llamada pcapFilter.sh, que está muy interesante.
Para ejecutarlo nos valdremos de la opción -C que nos exportará los resultados de los certificados. Con esto conseguiremos la flag deseada:
../tools/pcapFilter.sh -C -f capture-01.cap
Get EAP methods supported by AP:
Este es otro reto que saqué con solo revisar la parte teórica del tema. Solo «googlee» por “EAP methods” y en base a los resultado, probé un par de posibilidades hasta conseguir hacerme con la flag válida, que en este caso fue:
Me quedó pendiente ver la forma de contrastar esa información en los AP de wifi-corp y wifi-global.
Brute force user test:
Para conseguir esta contraseña vamos a emplear la herramienta Air-Hammer que se encargará de hacer la fuerza bruta correspondiente.
python ../tools/air-hammer/air-hammer.py -i wlan0 -e wifi-corp -1 -p /root/rockyou.txt -u /home/user/Lab/User.txt
Como resultado obtendremos la contraseña válida de este usuario:
Login with user with password 12345678:
Para obtener el usuario que corresponde con esta contraseña vamos a emplear la técnica de Password Spraying y para ello pondremos en marcha la herramienta EAPHammer de la siguiente manera:
python3 ../tools/eaphammer/eaphammer --eap-spray -I wlan0 --essid wifi-corp --password 12345678 --user-list Users_corp.txt
Siendo el fichero Users_corp.txt una combinación del listado de usuarios del proporcionado top-usernames-shortlist.txt junto al dominio CONTOSOLAB correspondiente a la red WiFi auditada. Es decir:
Hay un par de factores que presentan cierta dificultad en este ejercicio, uno, se trata de lo abultado de la salida (output) de la herramienta, incluso incrementada con mensajes de errores y otros, que para afrontarlo he tenido que remitir todo el log de salida a un fichero y posteriormente revisarlo detenidamente, filtrando el resultado deseado. Y lo segundo, que en principio no sabemos sobre que red WiFi debemos lanzar el ataque. Para resolver esto he tenido que repetir adicionalmente la técnica en las redes wifi-global y wifi-regional respectivamente.
cat Result_PasswordSpray.txt | grep wlan | egrep -v 'CTRL|SME|SSID|EAP|Associated' | grep FOUND
De esta forma nos haremos con el usuario que corresponde con esta contraseña presentada:
Connect to the network with Luis user without cracking their password:
Para conseguir este objetivo se ejecutará un ataque llamado PEAP Relay, para ello emplearemos 3 herramientas: hostapd-mana, WPA_Sycophant y Aireplay-ng de Aircrack-ng. Asímismo emplearemos 3 interfaces de red (wlan0, wlan1 y wlan5mon).
Lo primero y para poner en marcha nuestra herramienta hostapd-mana, tendremos que generarnos algunos ficheros requeridos. Con openssl generamos los siguientes:
openssl genrsa -out server.key 2048 openssl req -new -sha256 -key server.key -out csr.csr openssl req -x509 -sha256 -days 365 -key server.key -in csr.csr -out server.pem ln -s server.pem ca.pem openssl dhparam 2048 > dhparam.pem
Luego y con los ficheros generados anteriormente, prepararemos nuestro primer fichero de configuración (ap.conf):
El otro fichero necesario será hostapd.eap_user:
Es hora de poner en marcha hostapd-mana:
hostapd-mana ap.conf
Luego nos vamos con la configuración de WPA_Sycophant, en concreto con el fichero wpa_sycophant_example.conf:
WPA_Sycophant nos permitirá trasferir el MSCHAPv2 interno para conectarse a la red PEAP sin tener que descifrar las credenciales del usuario. Lo podremos en marcha de la siguiente forma (desde el directorio de la herramienta):
./wpa_sycophant.sh -i wlan1 -c wpa_sycophant_example.conf
Para conseguir que se produzca una conexión lanzaremos un ataque de desautenticación:
aireplay-ng -0 0 -a F0:9F:C2:71:22:66 wlan5mon
De esta forma conseguiremos las credenciales del usuario (CONTOSOLABREG\luis.da en este caso):
Y también conseguiremos la conexión a la red:
Ahora tan solo hacemos una identificación de equipos vivos:
Localizamos el router y accedemos mediante navegador para obtener la flag:
Referencias:
- https://github.com/sensepost/hostapd-mana/wiki
- https://github.com/sensepost/hostapd-mana/wiki/Creating-PSK-or-EAP-Networks
- https://github.com/sensepost/hostapd-mana/wiki/EAP-Relay-with-Sycophant
- https://www.youtube.com/watch?v=3FSLM1VY0SQ
Get CA from the Router using default creds:
La carpeta de la que se habla es visible desde el router:
Get wifi-corp Administrator password using the CA:
A partir de la data recopilada del ejercicio anterio (21), se generó el mismo ataque de PEAP Relay, esta vez con el objetivo de identificar las credenciales del Administrador.
hostapd-mana ap.conf ./wpa_sycophant.sh -c wpa_sycophant_example.conf -i wlan1
Pasados unos minutos es posible obtener las credenciales en claro deseadas.
También se identificó el hash NTLM del usuario, sin embargo este hash aún no ha sido posible crackear.