关于缓冲区溢出shellcode位置

时间:2015-04-06 14:32:17

标签: buffer-overflow exploit shellcode

我正在学习利用。在所有BOF示例中,shellcode始终放在buffer =>中。 shellcode + padding + overwrite return addr。在缓冲区太小的情况下,是否可以在返回地址之后放置shellcode覆盖先前的堆栈帧=> padding + overwirte返回地址+ shellcode ??

1 个答案:

答案 0 :(得分:2)

当然,正如你所说的那样,当缓冲区太小时,它是可能的。有一个名为' 环境变量的用户地点,它位于堆栈上,您可以通过gdb轻松查看。距离堆栈顶部稍远一点。只需使用此命令' x / 500s $ esp'并且您将使用其地址查找所有变量。然后你需要做的就是准备你的shellcode(带有一些NOP雪橇),并将它导出到你的新环境变量,下一步你必须得到你的env的地址。变量。使用核心转储更好,因为它比gdb更精确(在gdb中,地址与实际地址略有不同,因为存在转移)。或者只使用Jon Erickson编写的这个小程序 - getenvaddr.c

所以你现在的有效载荷如下: [垃圾| SFP |退货地址]

例如:

  • 垃圾= 40 * A

  • SFP = 4 * B

  • 返回地址= 0xXXXXXXXX < - 这是您的环境的地址。 变量,你想要跳。

第二个选项很容易将你的shellcode放在缓冲区之后,在这种情况下,有一个地方。

所以你的有效负载看起来像: [垃圾| SFP |退货地址| NOP雪橇| Shellcode]

  • 垃圾= 40字节(40 * A)
  • SFP = 4 * B
  • 返回地址= 0xXXXXXXXX < - 您需要跳到NOP中
  • NOP雪橇= x90 * 30
  • 的Shellcode