关于缓冲区溢出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
感谢您的回复。我认为没有人会回答我的问题 – logicalway