关于缓冲区溢出shellcode的位置

问题描述:

我在学习exploit。在所有BOF示例中,shellcode始终放在buffer => shellcode + padding +覆盖return addr中。是否有可能在返回地址之后放置shellcode以覆盖先前的栈帧,以防缓冲区太小=> padding + overwirte返回地址+ shellcode?关于缓冲区溢出shellcode的位置

当然,在这种情况下,正如你所说的 - 当缓冲区太小时。有一个名为'环境变量'的用户位置,它位于堆栈中,您可以通过gdb轻松检查它。离栈顶较远一点。只需使用这个命令'x/500s $ esp',你就可以找到所有的变量及其地址。然后,你需要做的就是准备你的shellcode(带有一些NOP底座),并将它导出到你的新环境变量中,作为下一步你必须得到你的环境地址。变量。最好使用核心转储,因为它比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 sled = x90 * 30
  • Shellcode
+0

感谢您的回复。我认为没有人会回答我的问题 – logicalway