我正在进行简单的缓冲区溢出攻击。该程序采用大小为12的数组,当溢出时,显然会覆盖堆栈上的元素,包括返回指针。在将元素输入数组之前,堆栈看起来像这样:
0xffffcf80: 0x00000000 0x00000000 0xffffcfa8 0x00209210
0xffffcf90: 0xffffcfd8 0x00209210 0x003514e0 0x080486a4
0xffffcfa0: 0xffffcfb4 0x00350ff4 **0xffffcfd8** 0x08048543
我加粗了我认为是回程地址的那个。当我输入十六进制字符串时,例如:11 11 11 11 22 22 22 22 33 33 33 33 44 44 44 44 55 55 55 55然后我尝试了另一个内存位置作为条目的最后部分以指向在其他地方返回地址。我总是得到非法的指令错误。
我尝试过在gdb中使用info frames命令获得的许多不同的内存位置,但它们都返回相同的结果。我想我只是难以理解这个概念。我会喜欢任何解释或帮助,即使它与我的问题没有直接关系。提前谢谢!
答案 0 :(得分:0)
您需要使用要运行的代码的地址覆盖返回地址。
此代码可以是:
请注意,在所有情况下,都可以通过保护机制(如buffer overflow protections或data execution prevention或......)的形式进一步跳过。