
Briefing, très concis, du challenge (lui-même concis) :
Enumerate and root the box attached to this task. Can you discover the source of the disruption and leverage it to take control?
Reconnaissance (2 minutes)
On commence par un scan des ports via le légendaire nmap.

Explication 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).
- -oA : Permet de sauver dans « tous » les formats le résultat du scan (bonne pratique permettant de conserver des traces de nos actions)
- format « standard » nmap = out.nmap
- format « standard » nmap « grepable » = out.gnmap
- format XML : out.xml
On trouve ici 2 ports ouvert :
- le port 22 permettant l’accès via SSH, avec un server OpenSSH en version 7.6p1.
- le port 10000 en écoute avec un serveur MiniServ (Webmin) en version 1.890.

Exploitation (5 minutes)
Après quelques recherches sur le web concernant l’application Webmin dans sa version 1.890, je tombe rapidement sur le repository suivant : https://github.com/n0obit4/Webmin_1.890-POC

Je clone le repository car il semble être une piste plus qu’intéressante.

Je lance alors le script python fourni pour vérifier son bon fonctionnement.

Le script semble fonctionner à merveille !
Post exploitation (10 minutes)
Après divers essais inutiles de me créer un reverse shell, je me rend compte que je suis allé un peu vite, et qu’en lisant un peu mieux la CVE et l’exploit utilisé, on exécute des commandes en tant que root, pas besoin de reverse shell alors pour récupérer mes flags …
A l’aide de l’exploit précédemment récupéré sur GitHub, je parcours d’abord le /home.

Je trouve alors le dossier personnel de l’utilisateur dark, et je m’empresse alors de lister ce répertoire …

… dans lequel on trouve … le flag user !

Par ici le flag utilisateur découvert :
THM{SUPPLY_CHAIN_COMPROMISE}
On réalise la même gymnastique afin de trouver le flag root.
On commence par lister le dossier /root puisque toutes les commandes exécutées le sont avec les droits root.

On trouve un fichier des plus intéressant, qui semble nous indiquer que nous sommes proches du but, on affiche le contenu de ce fichier root.txt.

Et par là le flag root :
THM{UPDATE_YOUR_INSTALL}
Chaîne d’attaque
| Étape | Technique MITRE ATT&CK (ID) | Nom technique (anglais) | Explication / application au challenge |
|---|---|---|---|
| Scan Nmap (ports et version) | T1595 (Reconnaissance) / T1595.002 | Active Scanning / Scanning IPs, Ports | Scan actif pour trouver ports ouverts et versions (nmap -sS -A -p- -Pn). |
| Découverte de services (Webmin 1.890) | T1046 | Network Service Discovery | Identification du service Webmin/MiniServ sur le port 10000 et d’OpenSSH sur 22. |
| Recherche d’exploit public / ciblage de service Web | T1190 | Exploit Public-Facing Application | Utilisation d’un exploit public (CVE-2019-15107) ciblant l’application Webmin exposée. |
| Exécution de commandes via l’exploit (RCE) | T1059 | Command and Scripting Interpreter | Commandes shell exécutées sur la machine cible par le vecteur RCE fourni par l’exploit. |
| Obtenir contexte root directement via le service vulnérable | T1068 (ou T1190 selon perspective) | Exploitation for Privilege Escalation (ou RCE via service) | L’exploit permet exécution en tant que root (pas d’élévation additionnelle nécessaire). |
| Exploration des fichiers locaux | T1083 | File and Directory Discovery | Listing de /home puis /home/dark et /root pour trouver les fichiers d’intérêt. |
| Collecte des preuves/flags (lecture) | T1005 | Data from Local System | Lecture des fichiers user.txt et root.txt (récupération de données locales). |
Remarque : l’étape « exploitation » est principalement couverte par T1190 (Exploit Public‑Facing Application) — ici l’exploit aboutit à une RCE avec privilèges root, situation qui peut aussi être décrite via T1068 (Exploitation pour l’escalade) si on insiste sur l’obtention de privilèges élevés.
Synthèse de la chaîne d’attaque :
- Reconnaissance : scan complet (
nmap -sS -A -Pn -p-) → découverte de Webmin/MiniServ 1.890 sur le port 10000 et OpenSSH 7.6p1 sur le port 22. - Recherche d’un exploit public pour Webmin 1.890 (CVE‑2019‑15107) et clonage du PoC.
- Exploitation : exécution du script PoC → Remote Code Execution sans authentification (RCE). L’exploit permet d’exécuter des commandes en tant que root.
- Post compromission : listing
/homeet/root→ lecture deuser.txtetroot.txt. - Conclusion : accès root obtenu sans élévation additionnelle — montrant l’impact critique d’un service public vulnérable.

Retour d’expérience
Ce challenge, nettement plus simple que les derniers que j’ai pu réalisé, ne m’a quand même par épargné.
Malgré une facilité annoncée, je me suis quand même de nouveau retrouvé piégé par mon impatience, qui m’a conduite à chercher là où il n’en était nul besoin.
Cette recherche de reverse shell (inutile) m’a pris moins d’une dizaine de minutes, mais c’est rageant de voir que cette perte de temps est due à une précipitation de ma part qui m’a emmené à négliger certaines informations, et dans les métiers de la cybersécurité, la patience est plus qu’une qualité, c’est une nécessité afin d’éviter des incompréhensions et des erreurs pouvant être très graves.
Conclusion
Une room rapidement terminée (20 minutes douche comprise !).
Ici pas de recherche interminable, de découverte technique, ni d’incantations spirituelles n’ont été nécessaire.
Un cas d’école, on scan, on trouve un service avec une version douteuse, on trouve un exploit directement utilisable et on obtient une RCE root sans authentification même pas besoin de recourir à de l’élévation de privilèges.
Un cas d’école oui, mais un cas désastreux en production, et pourtant, à l’heure où j’écris ces lignes, une simple recherche sur Shodan m’indique que près de 1500 IPs publiques exposent un service MiniServ en version 1.890.
