我正在尝试从 StackOverflow 测试这个示例(how-can-i-invoke-buffer-overflow),但我没有成功。
两周前我也直接在帖子上要求澄清(通过评论),但仍然没有答案(也许太旧了,2010年)。
我要求一种简洁的方式来完成这项工作:编译器选项、操作系统配置,如果有必要,更改代码以使其符合当今的进程/内存布局,或者至少能够超越当今的安全操作系统保护。
我尝试了自己的猜测,但似乎没有任何作用。
我想避免继续进行迷信尝试(无关的编译器选项,无关的操作系统修补),并选择在这里询问专家或消息灵通的人是否提出建议或至少指出一条充满希望的道路。
我的结果:
$ gcc overflow.c
$ ./a.out
now inside f()!
应该发生的结果:
nils@doofnase:~$ gcc overflow.c
nils@doofnase:~$ ./a.out
now inside f()!
now inside g()!
now inside g()!
now inside g()!
now inside g()!
now inside g()!
now inside g()!
Segmentation fault
代码:
#include <stdio.h>
#include <stdlib.h>
void g()
{
printf("now inside g()!\n");
}
void f()
{
int i;
void * buffer[1];
printf("now inside f()!\n");
// can only modify this section
// cant call g(), maybe use g (pointer to function)
// place the address of g all over the stack:
for (i=0; i<10; i++)
buffer[i] = (void*) g;
// and goodbye...
}
int main (int argc, char *argv[])
{
f();
return 0;
}
我的机器:
x86_64 GNU/Linux
6.10.9-amd64