Ld preload
-
Vérifier les droits sudo :
-
Commande :
sudo -l
-
Lorsque
env_keep+=LD_PRELOAD
est présent dans la configuration de sudo, cela signifie que la variable d'environnementLD_PRELOAD
est conservée lors de l'exécution des commandes avecsudo
. -
Créer le fichier source C (root.c) :
-
Commande :
nano -w /tmp/root.c
-
Le code C crée une bibliothèque partagée qui, lorsqu'elle est chargée, exécute son code d'initialisation (
_init()
). Ce code modifie l'ID utilisateur (UID) et l'ID de groupe (GID) du processus en 0 (c'est-à-direroot
), puis lance un shell Bash. -
Compiler le fichier source en bibliothèque partagée :
-
Commande :
gcc -fPIC -shared -o /tmp/root.so /tmp/root.c -nostartfiles
-
Cette commande compile le fichier
root.c
en une bibliothèque partagéeroot.so
. L'option-fPIC
crée du code position indépendant, nécessaire pour les bibliothèques partagées, et-nostartfiles
empêche gcc d'utiliser les fichiers de démarrage standard, ce qui n'est pas nécessaire pour ce type de charge utile. -
Exécuter une commande avec
sudo
en utilisantLD_PRELOAD
: -
Commande :
sudo LD_PRELOAD=/tmp/root.so /usr/sbin/executable restart
- Ici,
LD_PRELOAD
est utilisé pour préchargerroot.so
. Lorsque la commande/usr/sbin/executable
(qui doit être une commande autorisée parsudo
) est exécutée, elle chargeroot.so
avant toute autre bibliothèque. Cela entraîne l'exécution du code dans_init()
, élevant ainsi les privilèges du processus à ceux deroot
.
Contenu de root.c: