不确定在缓冲区溢出攻击中将返回地址更改为什么

时间:2015-04-15 08:41:53

标签: c assembly stack buffer overflow

我正在进行简单的缓冲区溢出攻击。该程序采用大小为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命令获得的许多不同的内存位置,但它们都返回相同的结果。我想我只是难以理解这个概念。我会喜欢任何解释或帮助,即使它与我的问题没有直接关系。提前谢谢!

1 个答案:

答案 0 :(得分:0)

您需要使用要运行的代码的地址覆盖返回地址。

此代码可以是:

  • 二进制文件中的现有代码 - 在这种情况下,您只需查找其地址
  • 您提供的代码(通过shellcode在您溢出的缓冲区中,例如。) - 在这种情况下,您使用该shellcode的地址

请注意,在所有情况下,都可以通过保护机制(如buffer overflow protectionsdata execution prevention或......)的形式进一步跳过。