Broker [EASY🟢]

Dificultad: Fácil

1- Reconocimiento y escaneo

1.1 Ping

Podemos notar que se trata de una maquina Linux, debido al TTL:

1.2 Nmap

Se ven puertos comunes de Windows, como el 135, 139, y el 445(SMB), ademas del puerto 80 correspondiente a un servidor web(Microsoft IIS httpd 10.0)

1.3 whatweb

Tenemos tecnologías web como:

Vamos a ingresar al sitio web alojado en el puerto 80:

Tenemos un panel de login, vamos a probar las credenciales de siempre que suelen tener estos paneles de login comunes en IoT, pero en este caso es un Apache ActiveMQ, un BROKER de mensajería de código abierto, de ahí el nombre de la maquina, "admin/admin":

Nos ingresa correctamente y si vamos a la sección de "Home", podemos ver la siguiente información:

2- Explotación

2.1 Searchsploit

Vamos a buscar con la herramienta de searchsploit algún exploit de ActiveMQ:

Hay exploits para la versión 5.14.0 de ActiveMQ, o tenemos el Path Traversal para la versión 5.x de ActiveMQ

2.2 CVE-2023-46604

Investigando en internet me di cuenta que la versión 5.15.15 de ActiveMQ tiene vulnerabilidades publicas y encontré un CVE correspondiente al mismo servicio "CVE-2023-46604" por lo que nos quedaría realizar una búsqueda en GitHub si encontramos algún exploit correspondiente al CVE, en mi caso encontré el siguiente repositorio que contiene un PoC para el CVE:

Repositorio de GitHub

Créditos al creador del repositorio

exploit.py:

poc.xml:

Vamos a bajarnos el repositorio con git clone y a irnos dentro de la carpeta del repositorio descargado:

Antes de ejecutar el script en Python, vamos a ver que contiene el archivo "poc.xml":

En la tercera linea de las etiquetas "<value>" tenemos que modificar la IP de nuestra VPN de Hack The Box y el puerto, en mi caso 443:

Ahora vamos a ver los parámetros que tenemos que pasarle al script en Python con la flag de -h:

Como podemos ver, tenemos que pasarle como parametro el archivo XML que acabamos de editar dentro de una pagina web, asi que vamos a abrir una consola de Kali y vamos a alojar un servidor web en Python donde tengamos el archivo "poc.xml":

No olvidemos en una consola nueva de Kali, ponernos en escucha con netcat por el puerto 443:

Y ahora vamos a ejecutar el script especificando los siguientes parámetros:

Y ahora vamos a revisar en la consola donde teniamos netcat en escucha por el puerto 443 si recibimos la reverse shell:

2.3 Obtención de la flag user

La flag de user se encuentra dentro de la ruta absoluta "/home/activemq/user.txt":

2.4 Tratamiento de la TTY

Vamos a realizar el tratamiento de la TTY para obtener una shell como dios manda :)

"script /dev/null -c bash":

CTRL + Z:

Y vamos a ejecutar el siguiente comando:

Ejecutamos:

Y ahora ejecutamos:

Ejecutamos y nos va a devolver a la reverse shell que obtuvimos:

Ahora vamos a exportar XTERM como TERM y BASH como consola, como variables de entorno:

Para verificar que el tratamiento de la TTY se realizo correctamente, pondremos "echo $SHELL" o "echo $TERM":

El tratamiento de la TTY corresponde hacerlo cuando debemos hacer muchas cosas con una reverse shell y necesitamos realizar algunas tareas como utilizar un editor de texto en consola, entre otras

3- Escalado de privilegios

3.1 sudo -l

Siempre que queramos escalar privilegios, es importante saber que podemos hacer con el usuario de la reverse shell que obtuvimos, en este caso para saber eso, utilizaremos el comando "sudo -l":

Podemos ejecutar el binario "nginx" de la ruta absoluta "/opt/sbin/nginx" con permisos de root

3.2 nginx.conf

Dentro de nginx, existe un archivo llamado "nginx.conf" que contiene la configuración de nginx, este archivo se encuentra dentro de la ruta "/etc/nginx/nginx.conf"

Vamos a alterar este archivo reemplazándolo por otro que contenga un código que nos permita elevar privilegios como root, para eso vamos a ubicarnos primero dentro de la carpeta "/tmp":

Crearemos el archivo "pwned.conf" con "touch":

Y dentro de este archivo, vamos a almacenar el siguiente código con el editor de texto "nano":

Con esta configuración le estamos diciendo que nos levante el servicio "nginx" como si fuésemos usuarios root, y que nos aloje dentro del servicio, el directorio personal de root donde se encuentra la flag de root, por el puerto 1337

Y ahora vamos a ejecutar nginx, que si recordamos se encontraba dentro de la ruta absoluta "/usr/sbin/nginx" pasandole como parámetro el archivo de configuración "pwned.conf":

(Recordar ejecutarlo con sudo al principio del comando)

Ya tendremos nginx corriendo por el "localhost" por el puerto "1337"

3.3 Obtención de la flag root

Ahora, vamos a obtener la flag de root haciendole un curl a "localhost" por el puerto "1337" con el recurso "/root/root.txt", que es donde se encuentra la flag de root:

Con esto, concluimos la maquina "Broker" de Hack The Box

Espero te haya sido de ayuda este Write Up :)

Si tuviste alguna dificultad a la hora de resolverlo, no olvides contactarme en mis redes sociales

Última actualización