⬅ Retour à Machines · 🏠 Accueil du repo
Machine 1 — Cap¶
IDOR sur capture réseau (PCAP) + Linux capability cap_setuid — Easy / Linux
| OS | Linux |
| Difficulté | Easy |
| Points | 20 |
| Services | FTP (21) · SSH (22) · HTTP / Gunicorn (80) |
| Vulnérabilité principale | IDOR → PCAP credentials + cap_setuid |
Concept¶
Un dashboard web Flask/Gunicorn permet de lancer un Security Snapshot (capture réseau) et de le télécharger via un identifiant incrémental. Une IDOR (Insecure Direct Object Reference) permet d'accéder aux captures des autres utilisateurs, révélant des identifiants FTP en clair dans un PCAP. La privesc exploite une Linux capability (cap_setuid) posée sur l'interpréteur Python.
flowchart LR
A["nmap -sC -sV"] --> B["Port 80 : dashboard web<br/>Security Snapshot"]
B --> C["IDOR sur /data/<id><br/>id = 0"]
C --> D["Télécharge le PCAP<br/>d'un autre utilisateur"]
D --> E["Wireshark : filtre ftp<br/>creds en clair"]
E --> F["nathan : Buck3tH4TF0RM3!"]
F --> G["SSH avec les mêmes creds<br/>réutilisation FTP → SSH"]
G --> H["getcap -r /<br/>python3.8 = cap_setuid+eip"]
H --> I["os.setuid(0)<br/>→ root"]
Énumération¶
Nmap¶
Le FTP est fermé à l'accès anonyme — fausse piste, on se concentre sur l'application web.
Dashboard web¶
Le site propose de lancer un Security Snapshot (capture réseau du trafic système). Une fois lancé, le navigateur est redirigé vers :
Foothold — IDOR sur l'identifiant de capture¶
L'ID dans l'URL est incrémental et contrôlé côté client, sans vérification de propriétaire : c'est une IDOR classique. On teste l'ID le plus bas.
Cela renvoie la page de résultat du scan d'un autre utilisateur. On télécharge le PCAP correspondant :
Analyse du PCAP¶
Filtre Wireshark :
Résultat : identifiants FTP transmis en clair.
Réutilisation du mot de passe → SSH¶
Le mot de passe FTP est réutilisé pour SSH :
Privilege Escalation — Linux capability cap_setuid¶
Découverte¶
getcap liste les capabilities POSIX accordées aux binaires — l'équivalent moderne (et plus granulaire) du bit SUID.
/usr/bin/python3.8 = cap_setuid,cap_net_bind_service+eip
/usr/bin/ping = cap_net_raw+ep
/usr/bin/traceroute6.iputils = cap_net_raw+ep
/usr/bin/mtr-packet = cap_net_raw+ep
python3.8 porte cap_setuid+eip : l'interpréteur peut changer son UID effectif vers n'importe quelle valeur, y compris 0 (root).
Exploitation¶
Flags¶
| User | 61b0186a70164919f0be2de0139cc03f |
| Root | e7f342183e8016c7e5786586752b50d1 |
Réponses aux questions HTB¶
| Question | Réponse |
|---|---|
| How many TCP ports are open? | 3 |
Path format /[something]/[id] → something |
data |
| Able to get other users' scans? | yes |
| ID of the PCAP with sensitive data | 0 |
| Application layer protocol with sensitive data | ftp |
| Other service where the password works | ssh |
Points clés¶
- Une IDOR sur un identifiant de ressource incrémental (
/data/<id>) permet souvent d'accéder aux données d'autres utilisateurs en changeant simplement le nombre — toujours testerid=0,id-1, etc. - Les fichiers PCAP capturés par une application peuvent contenir des identifiants en clair pour des protocoles non chiffrés (FTP, HTTP, Telnet) — toujours les analyser avec Wireshark ou
tsharkaprès téléchargement. - La réutilisation de mot de passe entre FTP et SSH pour un même utilisateur est une faille humaine très fréquente.
- Les Linux capabilities (
getcap -r /) sont l'équivalent moderne du bit SUID, mais accordent des privilèges plus granulaires (cap_setuid,cap_net_raw...).getcap -r /doit être aussi systématique quefind / -perm -4000en énumération de privesc. cap_setuid+eipsur un interpréteur (Python, Perl...) permet un changement d'UID direct vers 0 depuis un one-liner, sans exploit complexe.
Leçon retenue¶
Une simple IDOR sur un numéro d'identifiant, combinée à une capture réseau contenant des identifiants en clair et une capability Linux mal restreinte, suffit à obtenir un accès root complet. Les capabilities Linux méritent la même attention que les binaires SUID lors de toute énumération de privesc.