我正在尝试学习堆栈溢出,但我的练习有问题。在易受攻击的程序中,必须接收我的shellcode的代码部分是:
int array[8];
index = (int) strtol(argv[1], NULL, 10);
value = (int) strtoul(argv[2], NULL, 16);
array[index] = value;
我很容易找到用于覆盖RET的数组索引。然后我试图在易受攻击的程序中找到返回地址的偏移量,如下所示:
./victim 12 $(printf "%0512x" 0)
我尝试了很多不同的长度,但是在每个可能的长度我都会遇到分段错误。这很奇怪,因为我的书说我应该只能在保存的返回地址的位置得到分段错误。 我是初学者,所以我可能正在做一些基本的错误。任何人都可以帮我解决这个问题吗? 提前感谢您的帮助。
答案 0 :(得分:1)
您遇到分段错误,因为您只为程序提供了一个参数,但是您在strtoul
上调用了argv[2]
,这是一个NULL
指针。