Buffer Overflow★★★★★★
#include <stdio.h>
#include <stdlib.h>
char answer[0x100];
int solve()
{
FILE *fp = fopen("/home/bof/answer", "r");
fread(answer, 1, 100, fp);
puts("Great! here is answer");
puts(answer);
exit(0);
}
void *get_retaddr()
{
__asm__ __volatile__ ( "movl 0x10c(%%esp), %%eax":::"eax");
}
int main()
{
printf("current return address: %p\n", get_retaddr());
printf("your job is call %p\n", solve);
char buf[0x100];
read(0, buf, 0x200);
printf("changed return address: %p\n", get_retaddr());
}
이번에는 return address
를 덮는것인데 [buf 0x100] [SFP 0x4] [RET 0x4]
이므로 Bof-easy 문제와 똑같이 260자를 입력해주고 주어지는 return address
를 적어주면 된다.
ASLR
이 걸려있지 않으므로 return address
는 항상 동일하다.