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

Not sure what to change return address to in buffer overflow attack

我正在研究一个简单的缓冲区溢出攻击。该程序接受一个大小为 12 的数组,当它溢出时显然会覆盖堆栈上的元素,包括 return 指针。在我将元素输入数组之前,堆栈看起来像这样:

0xffffcf80:    0x00000000    0x00000000    0xffffcfa8    0x00209210
0xffffcf90:    0xffffcfd8    0x00209210    0x003514e0    0x080486a4
0xffffcfa0:    0xffffcfb4    0x00350ff4  **0xffffcfd8**  0x08048543

我已将我认为是 return 地址的地址加粗。当我输入一个十六进制字符串时,例如:11 11 11 11 22 22 22 22 33 33 33 33 44 44 44 44 55 55 55 55 然后我尝试将另一个内存位置作为条目的最后一部分以指向return 地址别处。我总是遇到非法指令错误。

我已经尝试了很多不同的内存位置,这些位置是我在 gdb 中使用 info frames 命令获得的,但它们都 return 相同的结果。我想我只是很难理解这个概念。我会喜欢任何解释或帮助,即使它与我的问题没有直接关系。提前致谢!

您需要用您想要 运行 的代码地址覆盖 return 地址。

此代码可以是:

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

请注意,在所有情况下,都可以以保护机制的形式(如 buffer overflow protections, or data execution prevention 或 ...)跳过更多的环节。