Solutionnaire pour le CTF « Pickle Rick »

Publié le 3 mars 2022 par Maximilien Schmitt-Laurin
CTF Pentesting TryHackMe
...

Ce défi sur le thème de Rick et Morty nous demande d'exploiter un serveur web pour trouver 3 ingrédients (ou drapeaux) qui aideront Rick à préparer sa potion pour se retransformer en humain à partir d'un cornichon.

Lien du défi : https://tryhackme.com/room/picklerick

Le premier drapeau

Tout d'abord, commençons par déployer la machine virtuelle à attaquer. Pour ce défi, l'adresse IP qui m'a été fournie pour la machine virtuelle est : 10.10.120.45

Une fois l'adresse IP obtenue, nous pouvons par la suite taper l'adresse IP dans la barre de recherche d'un fureteur web afin d'effectuer une requête GET au serveur web et ainsi obtenir une page web en retour. Le fureteur web que je vais utiliser pour ce défi sera Mozilla Firefox. La page web qui nous sera retournée en réponse par le serveur web est la suivante :

...

Un des premiers réflexes que nous devrions avoir serait d'inspecter le code source de la page web afin de trouver un indice. Justement, nous pouvons y retrouver le commentaire suivant qui a été laissé accidentellement : "Note to self, remember username ! Username: R1ckRul3s".

...

Par la suite, nous devons trouver d'autres indices. Comme il n'y a aucun hyperlien ou bouton sur la page web qui nous permettrait de nous diriger vers une autre page, nous devons donc tenter de trouver plus de ressources sur le serveur web, car autrement nous sommes limités en indices.

Une chance pour nous, il existe un excellent outil nommé Gobuster qui peut nous permettre d'identifier des répertoires et des fichiers présents sur le serveur web. Pour utiliser cet outil de manière à répondre à nos besoins, nous devons fournir l'adresse IP du serveur web ainsi qu'un fichier .txt contenant une liste de mots. La liste de mots que nous allons utiliser est la suivante :

https://github.com/danielmiessler/SecLists/blob/master/Discovery/Web-Content/common.txt

Ouvrons le terminal. Pour utiliser Gobuster afin d'identifier des répertoires et fichiers présents sur le serveur web, nous devons taper une commande sous la forme suivante :

gobuster dir -u MACHINE_IP -w WORD_LIST

Dans notre cas, MACHINE_IP sera l'adresse IP du serveur web (10.10.120.45 pour moi) et WORD_LIST sera notre fichier common.txt.

...
...

Une fois que Gobuster a fini d'appliquer sa magie, nous pouvons remarquer un fichier robots.txt qui suscite notre intérêt. Nous accédons donc à cette ressource sur le serveur web et nous trouvons une chaîne de caractères intéressante.

...

Cool ! Cette chaîne est peut-être un mot de passe. Après tout, nous avions trouvé précédemment un username au tout début du défi. Pourquoi ne pas essayer de se connecter via SSH ? Commençons par identifier en premier les ports ouverts sur le serveur web avec le scanner de ports Nmap.

...
...

Nous pouvons nous apercevoir que le port 22 est ouvert et qu'il accepte des connections via SSH. Parfait ! Nous pouvons donc essayer de nous connecter via SSH au serveur web avec le username trouvé au tout début du défi (R1ckRul3s) et avec la chaîne de caractères trouvée dans le fichier robots.txt (Wubbalubbadubdub) comme mot de passe. Cependant nous allons rencontrer un problème.

...

Malheureusement, la permission de se connecter nous a été refusée. Par contre, nous n'abandonnons pas. Si vous vous rappelez bien, nous attaquons un serveur web et parmi les ports énumérés par Nmap lors du balayage de ports, le port 80 était ouvert et acceptait des connections. Pourquoi ne pas utiliser un outil comme Nikto pour scanner des vulnérabilités sur le serveur web ? Nous pouvons donc utiliser la commande suivante :

nikto -h http://MACHINE_IP -o scan.txt

...

Une fois la commande exécutée et le scan fini, nous pouvons aller voir le résultat dans scan.txt. Nous y retrouverons ceci :

- Nikto v2.1.6/2.1.5
+ Target Host: 10.10.20.45
+ Target Port: 80
+ GET The anti-clickjacking X-Frame-Options header is not present.
+ GET The X-XSS-Protection header is not defined. This header can hint to the user agent to protect against some forms of XSS
+ GET The X-Content-Type-Options header is not set. This could allow the user agent to render the content of the site in a different fashion to the MIME type
+ HEAD Apache/2.4.18 appears to be outdated (current is at least Apache/2.4.37). Apache 2.2.34 is the EOL for the 2.x branch.
+ GET Server may leak inodes via ETags, header found with file /, inode: 426, size: 5818ccf125686, mtime: gzip
+ OPTIONS Allowed HTTP Methods: OPTIONS, GET, HEAD, POST
+ GET Cookie PHPSESSID created without the httponly flag
+ OSVDB-3233: GET /icons/README: Apache default file found.
+ GET /login.php: Admin login page/section found.

Génial ! Il semblerait que notre scan ait découvert une page /login.php sur le serveur web. Rendons-nous vers cette page web.

...

Essayons maintenant de se connecter avec le username R1ckRul3s et le mot de passe Wubbalubbadubdub. Incroyable ! Ça marche ! Nous arrivons maintenant sur une nouvelle page web.

...

Sur cette page web, nous pouvons remarquer un champ qui semblerait prendre en entrée des commandes pouvant être exécutées sur le serveur web. Pourquoi ne pas en profiter pour énumérer des fichiers et répertoires qui se retrouvent sur le serveur web ? Je propose de fournir en entrée la commande suivante pour y arriver :

...

Dans les résultats qui nous sont présentés à l'écran, il y a le fichier Sup3rS3cretPickl3Ingred.txt qui devrait nous intéresser.

...

Évidemment, notre première intuition serait de lire le contenu de ce fichier avec la commande 'cat Sup3rS3cretPickl3Ingred.txt'. Cependant, cette commande ne semble pas être permise.

...

Ok. Essayons donc une autre commande comme 'less Sup3rS3cretPickl3Ingred.txt'.

...

Super ! Nous venons de trouver notre premier drapeau !

Le deuxième drapeau

Parmi les fichiers/répertoires que nous avons énumérés précédemment, il y avait un fichier nommé clue.txt. Nous pouvons effecuer la commande 'less clue.txt' pour lire le contenu du fichier.

...

Cool ! Dans ce cas, nous allons explorer plusieurs répertoires sur le serveur web jusqu'à ce que nous trouvons quelque chose qui pourrait susciter notre intérêt. Justement, c'est lorsque nous nous retrouvons dans le répertoire /home/ que les choses deviennent intéressantes.

...

Allons voir dans le répertoire /home/rick. Intéressant... Nous pouvons voir un fichier 'second ingredients'.

...

Lisons le contenu avec 'less /home/rick/"second ingredients" '

...

Super ! Notre deuxième drapeau !

Le troisième drapeau

Dans la section précédente, vous avez probablement remarqué /root en explorant les divers répertoires sur le serveur web.

...

Tout d'abord, vérifions la permission de l'utilisateur en tapant 'sudo -l'.

...

Wow ! Nous avons aucune restriction et nous pouvons exécuter des commandes en tant que sudo. Tentons d'énumérer les fichiers et répertoires dans /root avec 'sudo ls /root'.

...

Nous avons deux fichiers qui s'affichent. 3rd.txt est celui qui devrait nous intéresser. Il nous reste plus qu'à lire son contenu avec 'sudo less /root/3rd.txt'.

...

Voilà notre dernier drapeau !