✍🏼 Writeup – Magician room TryHackMe

This magical website lets you convert image file formats

Cette room suit un enchaînement plutôt « classique » :

  • Récupération du flag utilisateur
  • Récupération du flag root

1- Reconnaissance

Je commence, comme à mon habitude, par un tour d’horizon initial à l’aide de Nmap dans un premier temps.

Explications sur la commande :

  • -sS : On souhaite faire un TCP SYN (Stealth) scan (ou half open scan car on ne réalise pas l’intégralité du 3-way handshake TCP).
  • -A : Aggressive scan options = active la détection d’OS (-O) , le scan de version (-sV), utilisation des scripts par défaut (-sC) et réalise un traceroute de la cible (–traceroute).
  • -Pn : Considérer tous les hôtes comme étant connectés (saute l’étape de découverte des hôtes).
  • -p- : Scan l’intégralité des ports possibles.
  • -T4* : Choisit la « politique de temporisation » 4 (la plus rapide étant la 5, par défaut nmap utilise la valeur 3).
  • -oA : Sortie dans les trois formats majeurs en même temps (normal, XML et grepable).

* Concernant la « politique de temporisation », je choisis volontairement une valeur élevée pour scanner plus rapidement, mais attention à 2 choses :

  • Si votre connexion est mauvaise, il risque d’y avoir des retransmissions voire des échecs de communication, donc au final temps rallongé et résultat de scan bancal.
  • En condition réelle de pentest plus le scan est « rapide » plus il va avoir de chance d’être vu avec des solutions IDS/IPS (Intrusion Detection/Prevention System) et des pics vont être immédiatement visibles sur un éventuel SIEM (Security Information and Event Management) donc privilégier un scan plus « lent ».

On observe que les ports suivants sont ouverts sur la machine cible :

  • 21 : vsftpd >= 2.0.8 (serveur FTP)
  • 8080 : Apache tomcat (serveur web)
  • 8081 : nginx 1.14.0 (serveur web)

2- Mapping

J’ai décidé de débuter mes recherches à partir du serveur FTP (vsftpd >= 2.0.8), et je suis tombé sur un article de hackingdna.com qui détaille comment exploiter la fameuse backdoor introduite dans la version 2.3.4 de vsftpd avec metasploit, mais sans succès (je ne m’attendais à rien, et je suis quand même déçu).
En même temps, à ce stade rien ne m’indique que nous avons affaire à la version 2.3.4 de vsftpd, mais je me suis lancé à la poursuite de ce low hanging fruit aveuglément.

Je décide ensuite de tenter une connexion FTP au serveur, et en me basant sur le retour de metasploit (il n’aura pas servi à rien en fin de compte), je me connecte en anonyme.

On n’a pas beaucoup de droits sur le serveur, par contre la bannière de connexion nous donne un bel indice :

Since you’re a rookie, this might help you to get started : https://imagetragick.com. You might need some little tweaks tough …

Intéressant, surtout quand on a déjà entendu parlé (et exploité !) des failles de Imagemagick !

On en a terminé pour le serveur FTP, je poursuis avec les serveurs web, et pour commencer je leur rend une petite visite avec mon navigateur web :

J’ai ensuite lancé une énumération avec ffuf sur les 2 ports en écoute (8080 et 8081) :

Le site présent sur le port 8081 propose de convertir des fichier png en jpg, du côté du port 8080, cela ressemble à une API en écoute de requête afin d’alimenter le site de conversion d’image.
Il s’agit probablement de notre porte d’entrée vers l’exploitation de ImageMagick.


3- Exploitation

L’état des lieux étant terminé, je rend visite au site web nommé dans la bannière SSH :

On a le numéro de CVE (CVE-2016-3714), et après une lecture détaillée du site on peut partir à la recherche d’exploit tout prêt !

Avec une recherche ciblée, je tombe rapidement sur le repo GitHub de Hood3dRob1n : https://github.com/Hood3dRob1n/CVE-2016-3714, qui propose un script permettant de créer un fichier exploitant les mécanismes de ImageMagick.

J’ai réalisé plusieurs tentatives d’obtention de reverse shell, mais à peine le shell obtenu, le serveur se déconnectait :

J’ai alors choisi une autre « méthode », à savoir récupérer le contenu de fichiers intéressants :

Contenu du fichier /etc/passwd

Je découvre alors la présence d’un utilisateur du nom de magician, ayant pour répertoire /home/magician.

Je réitère l’opération précédente afin de récupérer le contenu d’un éventuel fichier user.txt dans le home de l’utilisateur.

Le flag utilisateur est alors obtenu :

THM{simsalabim_hex_hex}

🚨Ayant été bloqué un certain temps pour le flag suivant, il m’est apparu que j’avais « raté » une étape, et soudain m’est revenu le message de la bannière FTP, et plus précisément : « You might need some little tweaks tough … ».

C’est alors que je suis revenu sur mes pas afin de tenter d’obtenir le reverse shell qui me semblait indispensable !

Après quelques recherches supplémentaires, je suis tombé sur le repo GitHub de PayloadsAllTheThings qui avait une manière de procéder totalement différente (à l’exception de la payload bash qui elle est rigoureusement la même) :

Après l’envoi du fichier, ainsi que le lancement de la conversion en jpg, j’obtiens un shell, et je le conserve cette fois-ci !
De cette manière il est plus aisé de récupérer le flag utilisateur :

Reverse shell obtenu + flag utilisateur

4- Elévation de privilèges

Maintenant que j’ai en ma possession un shell fonctionnel, je parcours le serveur à la recherche d’éléments qui me permettraient d’obtenir le flag root.

Je commence par regarder le contenu du fichier the_magic_continues :

Le fichier parle d’un chat « oracle » en local qui pourrait me donner des secrets, je regarde les processus actifs (en filtrant avec le mot-clé « cat ») :

Ca sent bon tout plein : un « magiccat« , en écoute en local (127.0.0.1), et le tout lancé avec les droits root, pas de doute, je suis au bon endroit !

Je commence par effectuer une requête avec curl :

J’ai pensé faire un tunnel SSH afin d’exposer le port 6666 sur ma machine Kali et me « simplifier » la vier, mais très vite j’ai remarqué la présence d’un formulaire utilisant une requête POST demandant à l’utilisateur un fichier (filename).

Je décide d’abord de tenter ma chance, et j’envoie une nouvelle requête avec curl, en ajoutant le paramètre filename ayant pour valeur /root/root.txt :

Je récupère la valeur suivante :

54484d7b6d616769635f6d61795f6d616b655f6d616e795f6d656e5f6d61647d0a

Cette valeur me semble pour le moins … étrange, et en reproduisant la procédure, je remarque que la valeur obtenue « change » à chaque fois (ou presque).

Je tente alors un coup de CyberChef sur la chaîne obtenue :

Après passage au crible de CyberChef, j’obtiens le flag root :

THM{magic_may_make_many_men_mad}


Chaîne d’attaque


Retour d’expérience

Une room bouclée en une quarantaine de minutes, comme souvent du temps perdu malgré la connaissance de la faille à exploiter.

J’ai apprécié ce challenge, bien évalué par TryHackMe en niveau easy. Pour ma part, je regrette la rapidité à laquelle on clôture la compromission de la machine après l’obtention du shell initial.

J’ai trouvé assez fun le côté « aléatoire » du format de retour de l’application web locale.


Conclusion

Un plaisir à réaliser cette room, bien que le plaisir ait été d’assez courte durée ^^.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *