Dans ce write-up, nous verrons comment compléter le lab RootMe de TryHackMe , Un challenge CTF de niveau débutant qui requiert plusieurs techniques : Nmap, gobuster, élévation de privilèges...
Enumération
Commençons par un scan Nmap pour voir les ports ouverts puis un second sur ceux ouverts pour voir les services qui tournent dessus ainsi que le script par défaut de nmap sur ces ports
Dans ce scan nous trouvons que deux ports sont ouverts :
22 : un service SSH 7.6p1 d’OpenSSH
80 : Un serveur Apache 2.4.29
Essayons maintenant d’énumérer les dossiers de ce site web avec Gobuster
Gobuster dir -u http://ip-tryhackme -w /usr/share/dirbuster/wordlists/directory-list-lowercase-2.3-medium.txt
Nous avons deux dossiers intéressants : /panel et /uploads, allons-y
Sur /uploads nous trouvons un dossier vide ( pour l’instant…)
Obtenir un shell
Sur /panel, On a ce qui semble être un uploader de fichier, je tente d’upload un fichier bénin « todo.txt »
Un message de couleur vert s’affiche en ce qui semble être du portugais et lorsque l’on se rend dans /uploads, le fichier « todo.txt » s’affiche correctement 😊
Nous retrouvons bien "todo.txt"
Nous allons alors upload un reverse shell php (de Pentest-monkey)
Vérifiez bien d’avoir mis votre adresse IP tryhackme et de connaitre le port que vous utilisez,
On upload et cette fois un message d’erreur s’affiche :
Erreur d'upload du fichier en extension .php
Apparemment les extensions .php sont bloquées, essayons alors un trick en changeant l’extension
Je change donc l’extension reverse-shell.php par reverse-shell.jpg.Php5 pour essayer de contourner diverses filtres
Je change l'extension du fichier en .jpg.Php5
Description automatically generated
Et cette fois ci, pas de message d’erreur, l’upload à l’air de fonctionner
Je check le /uploads et effectivement le fichier est là, il ne me reste plus qu’à setup un listener et de clicker sur le reverse-shell dans le dosser /uploads
Mettons un listener avec netcat avec le même port que celui configuré dans le reverse-shell
Accès initial réussi
Nous avons maintenant accéder au compte de service www-data, avant de passer à l’élévation de privilège je récupère le flag user.txt qui est surement dans le dossier /var/www
Elévation de privilège
Regardons les permissions SUID avec cette commande :
find / -type f -perm -u=s > 2/dev/null
Nous y trouvons un binary intéressant : /usr/bin/python
Regardons sur https://gtfobins.github.io/ pour trouver s’il y a une technique de d'élévation de privilège pour python avec le bit SUID d’activé et en effet
Il ne reste plus qu’à copier la commande et nous aurons les permissions root, nous pouvons récupérer le flag
J'espère que vous aurez appris quelque chose et apprécié mon write-up