
Ceci est mon premier « writeup » concernant une résolution de room TryHackMe.
J’ai choisi « Relevant » un peu par hasard, son arrivĂ©e dans mon cursus tombant au moment oĂą l’idĂ©e m’est apparu de rĂ©aliser un article de ce genre.
Tout d’abord, je vous donne le briefing liĂ© au challenge :
You have been assigned to a client that wants a penetration test conducted on an environment due to be released to production in seven days.
Scope of Work
The client requests that an engineer conducts an assessment of the provided virtual environment. The client has asked that minimal information be provided about the assessment, wanting the engagement conducted from the eyes of a malicious actor (black box penetration test). The client has asked that you secure two flags (no location provided) as proof of exploitation:
User.txt
Root.txt
Additionally, the client has provided the following scope allowances:
Any tools or techniques are permitted in this engagement, however we ask that you attempt manual exploitation first
Locate and note all vulnerabilities found
Submit the flags discovered to the dashboard
Only the IP address assigned to your machine is in scope
Find and report ALL vulnerabilities (yes, there is more than one path to root)
(Roleplay off)
I encourage you to approach this challenge as an actual penetration test. Consider writing a report, to include an executive summary, vulnerability and exploitation assessment, and remediation suggestions, as this will benefit you in preparation for the eLearnSecurity Certified Professional Penetration Tester or career as a penetration tester in the field.
Note – Nothing in this room requires Metasploit
1ère Ă©tape : la reconnaissance …
… et pour cela rien de mieux qu’un coup de nmap :

Explications de 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).
* 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 identifie 2 accès web IIS : un sur le port 80 et l’autre sur le port 49663 qui mènent tous deux Ă une page web IIS par dĂ©faut.

On remarque Ă©galement que les ports 139 et 445 sont ouverts, typique d’une implĂ©mentation du protocole SMB.
Ci-dessous une explication détaillée concernant ces 2 ports :

Le port 3389, permettant l’accès Ă distance Ă la machine via le protocole RDP (Remote Desktop Protocol), est Ă©galement ouvert.
Les ports 49666, 49667 et 49668 me semblent non pertinents pour le moment.
2ème étape : établir une cartographie du système (mapping)
Je décide de commencer avec les services web en écoute respectivement sur les ports 80 et 49663.
Pour cela je rĂ©alise un bruteforce sur chacun des 2 points d’accès Ă l’aide de l’outil gobuster :


On ne trouve rien de croustillant sur le serveur web en écoute sur le port 80, mais on obtient un résultat intéressant sur le port 49663.
On découvre en effet un sous-répertoire nt4wrksv.
En naviguant sur ce répertoire, on ne trouve pas grand-chose à exploiter.
Second candidat à explorer : SMB, et pour cela on va se baser sur des outils spécifiques tels que netexec ou smbclient.
Premièrement, on recherche des informations sur la cible avec netexec.

On remarque que la version 1 du protocole SMB est activée, et que la signature des messages est désactivée.
On vérifie ensuite si il y a possibilité de se connecter de manière anonyme.

L’accès nous est refusĂ© en connexion anonyme.
On test la connexion « invité » (Guest).

On observe cette fois-ci un retour positif, on peut donc se connecter sans compte, en tant qu’invitĂ©.
On va maintenant utiliser l’outil smbclient afin d’Ă©numĂ©rer les Ă©ventuels partages disponibles et accessibles.

On retrouve des partages « classiques », ainsi qu’un partage plus spĂ©cifique, avec un nom dĂ©jĂ rencontrĂ© lors de l’Ă©numĂ©ration du serveur web en Ă©coute sur le port 49663 : nt4wrksv.
On tente de se connecter en invité à ce partage énigmatique.

On récupère le fichier passwords.txt qui semble prometteur, et on affiche son contenu.

Le contenu du fichier semble être encodé en base64, tentons de décoder les 2 lignes.

On a alors Ă notre disposition 2 couples d’utilisateur/mot de passe :
- Bob – !P@$$W0rD!123
- Bill – Juw4nnaM4n420696969!$$$
On vĂ©rifie Ă©galement s’il y a un lien entre ce partage et le rĂ©pertoire du mĂŞme nom trouvĂ© lors du bruteforce du serveur web en Ă©coute sur le port 49663 :

On confirme que le partage SMB ainsi que le répertoire du serveur web nt4wrksv pointent bien vers le même endroit.
A ce stade, on a obtenu des informations complĂ©mentaires sur la cible, ainsi que 2 jeux de nom d’utilisateur et mot de passe, on peut passer Ă la phase suivante.
3ème Ă©tape : l’exploitation de l’hĂ´te cible
On va tenter d’uploader un reverse shell via le partage SMB nt4wrksv que l’on appellera ensuite via le navigateur web.
Pour cela, on utilise l’outil msfvenom permettant de gĂ©nĂ©rer divers payloads, dont des reverse shells :

On upload ensuite le reverse shell via le partage SMB.

A partir de ce moment lĂ , il ne nous reste plus qu’Ă dĂ©marrer netcat en Ă©coute sur le port configurĂ© dans la payload (4444 dans notre exemple).

DĂ©sormais, netcat est en attente d’une connexion entrante, on peut appeler le script directement via le navigateur web pour dĂ©clencher son exĂ©cution, et ainsi obtenir le reverse shell tant attendu !

On retourne dans notre console attendant désespérément une connexion entrante afin de vérifier le bon fonctionnement de la payload :

Maintenant que l’on est connectĂ©, on peut « fouiller » Ă la recherche d’informations utiles (un flag peut ĂŞtre ?).

On retrouve un nom déjà vu : Bob !
Voyons s’il a des choses Ă nous offrir.

Bingo !!! On trouve le premier flag :
THM{fdk4ka34vk346ksxfr21tg789ktf45}
Premier flag en poche, le prochain est le flag root, on peut passer Ă la prochaine Ă©tape : l’escalade de privilèges.
4ème étape : Elévation de privilèges
Première Ă©tape, on vĂ©rifie les droits Ă l’aide de la commande whoami.

On observe 3 privilèges actifs :
- SeChangeNotifyPrivilege
- SeImpersonatePrivilege
- SeCreateGlobalPrivilege
Le second semble prometteur, et après avoir essuyĂ© une fin de non recevoir avec l’outil GodPotato (https://github.com/BeichenDream/GodPotato), j’ai dĂ©cidĂ© de persister avec l’utilisation de ce privilège avec un autre outil : PrintSpoofer (https://github.com/itm4n/PrintSpoofer).
On commence par tĂ©lĂ©charger le binaire de l’outil, et on lance un serveur web avec python afin de le rĂ©cupĂ©rer Ă partir de la cible.

Pour cela, on peut utiliser un « LOL bin » (Living Off The Land Binary : exemples et cas d’utilisation ici : https://lolbas-project.github.io/) tel que certutil.exe :

On lance maintenant l’outil afin d’abuser du privilège SeImpersonatePrivilege afin d’obtenir un shell avec les droits « system ».

Bingo ! Le plus « dur » est fait, on a obtenu un shell « system », il ne reste plus qu’Ă fouiller pour rĂ©cupĂ©rer le flag root.

On trouve le second flag :
THM{1fk5kf469devly1gl320zafgl345pv}
ChaĂ®ne d’attaque
| Étape | Technique MITRE ATT&CK (ID) | Nom technique (anglais) | Commentaire / application au challenge |
|---|---|---|---|
| Scan initial avec nmap (ports & versions) | T1595 / T1595.002 | Active Scanning / Scanning IPs, Ports | nmap -sS -A -Pn -p- -T4 -oA — découverte des services exposés (IIS, SMB, RDP). |
| Découverte des services (IIS, SMB, RDP) | T1046 | Network Service Discovery | Identification des services sur 80, 49663, 139/445, 3389, etc. |
| Bruteforce / enumeration web (gobuster) | T1595 (recon) | Active Scanning / Web content discovery | Recherche de répertoires (ex : nt4wrksv) sur le site écoutant sur 49663. |
| Découverte des partages SMB / accès invité (Guest) | T1135 | Network Share Discovery | Énumération des partages SMB, détection du partage nt4wrksv. |
| Récupération d’un fichier contenant des credentials encodés | T1552.001 | Credentials in Files | passwords.txt trouvé dans le partage puis décodé (base64) → identifiants récupérés. |
| Utilisation des identifiants (upload via SMB) | T1078 | Valid Accounts | Utilisation des comptes trouvés (Bob/Bill) pour interagir avec le service/partage. |
| Transfert du webshell/reverse shell via SMB (ingress) | T1105 | Ingress Tool Transfer | Upload du payload ASPX sur le répertoire web partagé / accessible. |
| Déclenchement du shell via HTTP (reverse shell) | T1190 | Exploit Public‑Facing Application / Web shell execution | Appel du fichier uploadé via navigateur → exécution → reverse shell. |
| Exécution de commandes (reverse shell → interaction) | T1059 | Command and Scripting Interpreter | Utilisation de la session shell pour énumérer le système, trouver utilisateurs, fichiers. |
| Abus du privilège SeImpersonatePrivilege → PrintSpoofer | T1134, T1068 | Access Token Manipulation (Token Impersonation/Theft) / Exploitation for Privilege Escalation | Abus de l’impersonation via PrintSpoofer pour obtenir un shell SYSTEM. |
| Récupération de données locales (root/System) | T1005 | Data from Local System | Lecture de fichiers sensibles (flags, configs) une fois le compte SYSTEM obtenu. |
Synthèse de la chaĂ®ne d’attaque:
- Reconnaissance : scan complet (
nmap -sS -A -Pn -p- -T4) → découverte de services : IIS (ports 80 & 49663), SMB (139/445) et RDP (3389). - Mapping & énumération : brute‑force web (
gobuster) → découverte du répertoirent4wrksv; énumération SMB → accès Guest au partagent4wrksv. - Collecte de credentials : récupération de
passwords.txtdans le partage, décodage base64 → comptes identifiés (Bob, Bill). - Accès initial : upload d’un reverse shell (ASPX) sur le partage web via SMB (Ingress Tool Transfer), puis déclenchement via navigateur → reverse shell obtenu.
- Post‑compromission & escalade : exploration locale, découverte du privilège SeImpersonatePrivilege ; abus via PrintSpoofer pour obtenir un shell SYSTEM (escalade).
- Impact : accès SYSTEM obtenu et lecture des données locales sensibles.

Retour d’expĂ©rience
Ce qui n’apparaĂ®t pas dans cet article, c’est la notion de temps passĂ©, de tentatives et d’Ă©checs.
L’enchaĂ®nement des commandes dĂ©taillĂ©es ci-dessus n’ont pas Ă©tĂ© rĂ©alisĂ©es d’une manière si linĂ©aire et limpide.
Il y a tout d’abord une partie recherche d’informations liĂ©e aux diffĂ©rentes dĂ©couvertes rĂ©alisĂ©es durant ce challenge, en commençant par les ports dĂ©couverts liĂ©s Ă leurs services (et surtout leurs versions).
Ensuite je n’ai pas pensĂ© tout de suite Ă faire une Ă©numĂ©ration web, du coup après avoir trouvĂ© le partage SMB accessible en Guest, je n’ai pas tout de suite su quoi en faire.
Enfin, si je devais refaire cette room (ce qui est valable pour la prochaine), je suivrais une procĂ©dure plus claire, j’irais dans moins de direction Ă la fois pour ĂŞtre sĂ»r de ne pas rater quelque chose.
J’ai d’ailleurs commencĂ© Ă me faire un document regroupant par catĂ©gories les pistes Ă suivre ainsi que les outils Ă utiliser afin de ne pas me reposer les mĂŞmes questions systĂ©matiquement.
Conclusion
Pour rappel : il s’agit de mon tout premier writeup, j’y ai passĂ© beaucoup plus de temps que je ne pensais y passer mais ça aura Ă©tĂ© une expĂ©rience enrichissante.
Tout d’abord cet exercice m’a contraint Ă plus de rigueur afin de pouvoir restituer de manière la plus claire et comprĂ©hensive que possible pour d’Ă©ventuels lecteurs.
Ensuite j’ai passĂ© plus de temps qu’Ă l’accoutumĂ© sur chaque « trouvaille », me permettant ainsi de creuser plus loin ce qui a amĂ©liorĂ© ma comprĂ©hension globale (et spĂ©cifique) des sujets abordĂ©s (SMB entre autres).
Enfin, j’espère que cet article pourra servir au maximum de personnes en quĂŞte de rĂ©ponses sur cette room.