2016-04-26 20 views
1

Ich möchte mit einem konkreten Beispiel zeigen, wie mächtig die Ausnutzung eines Pufferüberlaufs ist.Setzen von SUID/SGID-Berechtigungen auf eine ausführbare Datei

Um dieses Ziel achive ich dieses einfache C-Programm vorbereitet, die so genannte "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]); 
} 

, die ich mit Optionen kompiliert: -fno-Stack-Protektor und execstack.

Alles funktioniert gut und ich kann meinen Shellcode läuten, der eine neue Bash öffnet.

In meinem System (Ubuntu MATE 15.10 32bit) habe ich 2 Benutzer: "Benutzer" (Gruppe: Benutzer) und "admin" (Gruppe: Admin), beide mit Sudo-Berechtigungen.

Was ich tun möchte, ist es "Benutzer" zu ermöglichen, "bo" mit den Privilegien von "admin" auszuführen, so dass, wenn der Pufferüberlauf passiert und der Shellcode ausgeführt wird, ich eine Shell habe, die mit "admin" Privilegien läuft (und von dieser Shell, wenn ich die Befehle "ID" oder "Whoami" ausführen möchte ich zeigen, dass wir jetzt "Admin" sind).

Ich habe gesehen, dass ich SUID/SGID-Privilegien zu "bo" chmod muss. Ich habe es auf viele Arten versucht, aber wenn der Shellcode läuft, habe ich immer eine Shell von "user" gestartet.

Antwort

0

Endlich fand ich heraus, dass ich nicht nur ein Berechtigungsproblem hatte, aber mein Shellcode erzeugte keine Root-Shell.

By the way, dank der Anregungen von Cwissy, um diese Sicherheitsanfälligkeit voll ausschöpfen ich auf meinem bo Datei einige Privilegien gesetzt hatte:

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

Dann mit der rechten Shellcode (jetzt benutze ich das eine vom https://www.exploit-db.com/docs/21013.pdf) Ich bin in der Lage, eine root-Shell zu spawnen.

Es ist etwas anders als meine ursprüngliche Idee (spawn eine Shell mit "admin" Privilegien), aber dies ist ein gutes Beispiel zu zeigen.

2

sudo gibt dem aufrufenden Benutzer Root-Benutzerrechte und führt jeden Prozess als Root aus. Der su Prozess wird verwendet, um switch user

zu gewährleisten, dass der Prozess mit dem admin user privs ausgeführt wird. Die BO-Binärdatei muss chown admin:admin und chmod u+s als Admin sein. z.B. wenn die Binärdatei wie folgt aussieht derzeit:

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

, wenn Sie root werden, dann werden Admin dann die Berechtigungen ändern, sollten Sie:

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

dann <ctrl-d> zweimal zurück zu kommen user zu sein, und Sie sollten siehe:

ls -l bo 
drwSrwxr-x admin admin bo 

natürlich, könnten Sie tun, weg mit all den sudo und su Unsinn durch den Code alsKompilierenBenutzer an erster Stelle, und dann chmod'ing es (auch noch als admin Benutzer), bevor die user Benutzer.