
Cette room se découpe en 2 phases :
- Enumération
- Compromission
Let’s start !
Task 1 – Enumeration through Nmap (5 min)
On lance un scan Nmap :

Q1 – How many ports are open?
Comme on peut le voir dans le résultat du scan :
3 ports sont ouverts !
Q2 – What is the version of nginx?
Toujours dans le retour du scan de port :
La version du serveur nginx est la 1.16.1.
Q3 – What is running on the highest port?
On ne change pas une Ă©quipe qui gagne, on trouve l’info … dans le scan Nmap !
Sur le plus haut port ouvert (65524), on trouve un serveur Apache en version 2.4.43.
Task 2 – Compromising the machine (1h30)
Q1 – Using GoBuster, find flag 1.
En tant que bon soldat, je m’exĂ©cute et lance un scan avec GoBuster.
Mon premier scan cible le serveur Nginx en écoute sur le port 80 :

On trouve un fichier robots.txt pas très intéressant, et un dossier qui semble juteux : /hidden
En visitant l’URL, on observe une page statique pas très utile, et une recherche web avec l’image ne donne rien non plus.

Le code source de la page ne révèle pas non plus de contenu intéressant.
Je décide de relancer un scan GoBuster, à partir du dossier /hidden cette fois-ci.

On trouve encore un répertoire caché nommé /whatever.

Une fois de plus la page ainsi que l’image ne sont pas d’une grande utilitĂ© …

… mais en regardant le source de près, on trouve une balise paragraphe avec du texte « caché » :
ZmxhZ3tmMXJzN19mbDRnfQ==
En allant faire un tour sur CyberChef, on décode le texte encodé en base64 et on obtient un flag tout neuf :
flag{f1rs7_fl4g}

Q2 – Further enumerate the machine, what is flag 2?
J’ai d’abord passĂ© un peu de temps Ă chercher du cĂ´tĂ© du serveur Nginx pour ĂŞtre sĂ»r de ne pas rater le second flag, mais rien de plus.
Je lance alors un scan GoBuster sur le serveur Apache cette fois.

Rien de croustillant, la page html et le robots.txt.
En regardant le contenu du fichier robots.txt, on tombe sur un User-Agent mystĂ©rieux qui a l’autorisation de scanner toutes les pages du site, avec un message qui laisse Ă penser que ce n’est pas un User-Agent comme les autres :
User-Agent:a18672860d0510e5ab6699730763b250
Allow:/
This Flag Can Enter But Only This Flag No More Exception

J’ai donc recherchĂ© quel pouvait ĂŞtre le format de ce qui semble ĂŞtre un hash :

Je dĂ©cide d’utiliser un service en ligne (reversemd5.com) pour dĂ©chiffrer le hash.

Second flag récupéré !
flag{1m_s3c0nd_fl4g}
Q3 – Crack the hash with easypeasy.txt, What is the flag 3?
Alors cette question m’a laissĂ© quelque peu … perplexe.
DĂ©jĂ chronologiquement, ce flag est le 1er que j’ai trouvĂ© du cĂ´tĂ© du serveur Apache, et ensuite on le trouve directement en clair, Ă aucun moment il est nĂ©cessaire d’utiliser la wordlist fournie pour avoir ce flag. Je pense qu’il s’agit d’un vestige datant de la crĂ©ation de la room.
Aparté terminée, voyons comment obtenir ce flag.
En scannant la page Apache, et plus particulièrement lorsque je scrutait le code source de la page, je suis littéralement « tombé » dessus :

Avec le bon coup d’Ĺ“il, on aperçoit rapidement le flag qu’on n’a plus qu’Ă cueillir tel le « Low Hanging Fruit » qu’il est !
flag{9fdafbd64c47471a8f54cd3fc64cd312}
Q4 – What is the hidden directory?
Aucun rĂ©pertoire n’est ressorti de mon scan GoBuster (et pourtant j’ai pas utilisĂ© une petite wordlist ^^), mais en regardant dans le code source de la page d’index, je suis tombĂ© lĂ -dessus :

C’est du dĂ©jĂ -vu dans cette room, un paragraphe cachĂ© dans le source. Un indice nous est donnĂ© permettant de rĂ©aliser quelques tests avec CyberChef.

Après plusieurs tentatives, il s’avère que le nom du rĂ©pertoire avait Ă©tĂ© encodĂ© en Base62 :
/n0th1ng3ls3m4tt3r

Q5 – Using the wordlist that provided to you in this task crack the hash what is the password?
On nous demande (encore, mais ce coup si c’est le bon je le sens), d’utiliser la wordlist fournie pour casser un hash, mais quel hash me direz-vous ? J’y venais justement.
En regardant de plus près la page, on voit (difficilement) un texte situĂ© en dessous de l’image reprĂ©sentant des 0 et des 1.
Je dĂ©cide d’aller voir dans le source pour plus de lisibilitĂ©.

On a, a priori, trouvé le hash, reste maintenant à le casser !
J’ai pas mal tournĂ© en rond Ă cette Ă©tape car je suis initialement parti sur la dĂ©tection du type de hash fournie par hashes.com (SHA-256) afin de tenter de le casser avec Hashcat et John, mais sans succès.
J’ai alors tentĂ© de lancer la dĂ©tection du hash en mode « expert » et l’outil m’a alors affichĂ© tous les types de hash probables et non plus un seul :

J’ai dĂ©jĂ essayĂ© de le casser comme Ă©tant un hash SHA-256, je relance avec le second plus probable : gost.

Grâce à (beaucoup) de persévérance et un bon coup de main de notre ami John on retrouve le mot de passe :
mypasswordforthatjob
Q6 – What is the password to login to the machine via SSH?
ArrivĂ© Ă ce stade, j’avoue que j’ai perdu (inutilement) beaucoup de temps, au moins 1h, Ă chercher des failles au niveau d’openSSH qui pourraient me permettre dans un premier temps d’Ă©numĂ©rer les utilisateurs pour ensuite tenter un bruteforce avec Hydra, et au bout d’un moment je me suis recentrĂ© sur la room, son niveau de difficultĂ© et le fait que l’on Ă©tait assez bien guidĂ© jusque lĂ .
Je me suis repenchĂ© sur la page cachĂ©e trouvĂ©e prĂ©cĂ©demment, et j’ai fini par voir ce que j’avais ignorĂ© jusque lĂ : l’image reprĂ©sentant des 0 et des 1. C’est la seule image locale de la room, toutes les autres pointent vers des serveurs externes.

J’ai donc tĂ©lĂ©chargĂ© l’image et cherchĂ© des informations dans ses donnĂ©es EXIF mais sans succès, rĂ©cupĂ©rĂ© toutes les chaĂ®nes avec la commande strings, mais rien non plus, j’ai vĂ©rifiĂ© avec un Ă©diteur hexadĂ©cimal si je trouvais des sections supplĂ©mentaires dans le jpeg, ou en fin d’image, et c’est lĂ que j’ai pensĂ© Ă la stĂ©ganographie.
Un petit coup de steghide, il nous demande une passphrase, je lui donne le mot de passe trouvé précédemment :

On rĂ©cupère un nom d’utilisateur (en clair) et un mot de passe, encodĂ© en binaire selon toute vraisemblance.
Je retourne sur CyberChef et vérifie si on peut récupérer le mot de passe.

On a alors récupéré un couple user / password, on va pouvoir se connecter au service SSH !
- Nom d’utilisateur : boring
- Mot de passe : iconvertedmypasswordtobinary
Q7 – What is the user flag?
Je me connecte avec succès au service SSH de la machine grâce aux identifiants obtenus à la question précédente.

Je liste alors mon répertoire utilisateur et trouve ce qui semble être le flag utilisateur :

Le fichier user.txt contient ce qui semble ĂŞtre un flag accompagnĂ© d’un message qui me donne envie d’aller faire un tour de nouveau sur CyberChef.

Encore une fois avec l’aide de CyberChef, on trouve un nouveau flag !
flag{n0wits33msn0rm4l}
Q8 – What is the root flag?
Le moment semble venu d’Ă©lever ses privilèges !
Premier reflexe : vĂ©rifier les possibilitĂ©s via sudo … chou blanc !
Je poursuis ma « visite manuelle » sans trouver grand chose d’exploitable, alors je sors l’artillerie lourde, j’ai nommĂ© LinPEAS.
Je tĂ©lĂ©charge le script sur ma machine, puis je l’expose au travers un serveur web Ă l’aide de Python :

Du côté de la machine cible, je me rends dans le dossier /tmp et je télécharge, rend exécutable puis lance le script :

En examinant la sortie du script, j’ai remarquĂ© une tâche CRON prometteuse se lançant en tant que root :

Ce job commence par aller dans le dossier /var/www/ (dossier habituellement réservé aux contenus web), et exécute le script bash « caché » .mysecretcronjob.sh.
En regardant de plus près ce fichier, on se rend compte qu’il appartient Ă l’utilisateur et qu’il a les droits d’Ă©criture (entre autres) dessus.

En Ă©ditant le fichier, je vois qu’il ne contient aucune instruction (le shebang + un commentaire), je dĂ©cide alors d’y insĂ©rer un reverse shell de manière Ă obtenir un accès root.

Je lance ensuite netcat en Ă©coute sur ma machine afin d’attendre la connexion issue de la cible.

Le shell root est obtenu avec succès !

En allant regarder le répertoire /root, on retrouve le flag dans le fichier « caché » .root.txt :
flag{63a9f0ea7bb98050796b649e85481845}
Retour d’expĂ©rience
Une salle classĂ©e au niveau easy par TryHackMe, ce que je confirme sur le plan technique, par contre bien plus « prise de tĂŞte » que la plupart des rooms de niveau Ă©quivalentes, ce qui m’a « contraint » Ă passer pratiquement 2h sur cette machine !
J’ai personnellement Ă©tĂ© agrĂ©ablement surpris par cette room qui m’a pris plus de temps que je n’aurais cru sans m’en lasser une seule fois. Elle ne se focalise pas seulement sur un seule concept ce qui l’a rend d’autant plus intĂ©ressante, passer de l’Ă©numĂ©ration initiale jusqu’Ă l’obtention d’un shell root est très gratifiant.
Petite prĂ©cision : j’ai utilisĂ© l’outil GoBuster pour rester dans le chemin tracĂ© par la room bien que j’ai une prĂ©fĂ©rence pour ffuf, ou alors dirb qui scanne de manière rĂ©cursive les rĂ©pertoires trouvĂ©s et qui m’aurait Ă©viter de relancer un second scan.
Conclusion
Une room plus longue que prĂ©vue et un agrĂ©able sentiment de progression tout au long de l’avancĂ©e.
Quelques « rabbit holes » m’ayant fait perdre du temps mais personnellement satisfait de l’avoir terminĂ©e.