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.