2016-04-26 3 views
1

Je souhaite montrer, avec un exemple concret, à quel point l'exploitation d'un débordement de tampon est puissante.Définition des autorisations SUID/SGID sur un exécutable

Pour ACHIVE cet objectif, je préparais ce programme simple C, appelé "bo":

#include <stdio.h> 
#include <string.h> 

void function(char* input) { 
    char buffer[128]; 
    strcpy(buffer, input); 
    printf("Your input is: %s\n", buffer); 
} 

void main(int argc, char **argv) { 
     function(argv[1]); 
} 

que je compilé avec: -fno-stack-protecteur et execstack.

Tout fonctionne très bien et je suis en mesure de Lauch mon shellcode qui ouvre une nouvelle bash.

Dans mon système (Ubuntu MATE 15.10 32bit) j'ai 2 utilisateurs: "utilisateur" (groupe: utilisateur) et "admin" (groupe: admin), les deux ayant des privilèges sudo. Ce que je veux faire est d'activer "user" pour exécuter "bo" avec les privilèges de "admin" de telle sorte que lorsque le débordement de tampon arrive et que le shellcode soit exécuté j'ai un shell qui fonctionne avec des privilèges "admin" (et à partir de ce shell, si je cours les commandes "id" ou "whoami" je veux montrer que maintenant nous sommes "admin").

Je l'ai vu que je dois chmod privilèges SUID/SGID "bo". J'ai essayé de plusieurs façons, mais quand le shellcode fonctionne j'ai toujours un shell lancé depuis "user".

Répondre

0

Enfin je me suis dit que je devais non seulement un problème d'autorisation, mais mon shellcode ne peut pas se reproduire une coquille de racine.

Par ailleurs, grâce aux suggestions de Cwissy, d'exploiter pleinement cette vulnérabilité je devais définir certains privilèges sur mon fichier bo:

sudo -i 
chown 0:0 bo 
chmod 4755 bo 
exit 

Puis, avec le droit shellcode (maintenant j'utilise celui de https://www.exploit-db.com/docs/21013.pdf) je suis capable de générer un shell racine.

Il est légèrement différent de mon idée originale (frayer un shell avec les privilèges « admin »), mais cela est un bon exemple pour montrer aussi.

2

sudo donne les privilèges d'appel d'utilisateur root utilisateur et exécute tout processus en tant que root. le processus su est utilisé pour switch user

Pour vous assurer que le processus s'exécute avec les privilèges de l'utilisateur admin. le bo binary devra être chown admin:admin et chmod u+s en tant qu'administrateur. par exemple. si votre binaire ressemble actuellement à ceci:

ls -l bo 
drwxrwxr-x user user <size> bo 

si vous devenez la racine, puis devenir administrateur puis modifier les autorisations que vous devriez obtenir:

sudo -i # become root 
chown admin: bo # change ownership 
su - admin # become admin 
chmod u+s bo # set sticky bit 

puis deux fois <ctrl-d> de revenir à être user et vous devriez voir:

ls -l bo 
drwSrwxr-x admin admin bo 

bien sûr, vous pouvez en finir avec toutes les absurdités et su sudo en compilant le code comme admin utilisateur en premier lieu, puis chmod'ing (également toujours comme l'utilisateur admin) avant de devenir l'utilisateur user.