直接在RET寄存器中使用跳转

时间:2011-11-14 15:51:55

标签: assembly buffer stack-overflow shellcode

我正在处理缓冲区溢出问题,其中输入字符串必须用我的shellcode的地址覆盖RET(显然),该地址也在我的输入字符串中。

我研究过并发现在运行时确定缓冲区的内存地址并不容易。

我也学到了相对跳跃。是否可以通过相对跳转覆盖到shell编码开始的堆栈(和我的字符串)的早期部分来覆盖RET?我不知道这是否有效。

基本上它看起来像这样: ./program 90909090909090 / bin / sh / 00RELATIVE_JUMP_HERE

显然所有这些都是在机器代码中,这只是为了说明我想要实现的目标。

由于

1 个答案:

答案 0 :(得分:0)

在堆栈溢出中覆盖的内容不是RET指令,而是返回地址。因此,您不会覆盖机器代码,而是覆盖机器代码的指针。确实有技术可以继续跳转到有趣的代码片段,google用于ret-into-libc和面向回归的编程。

在类似的说明中,一种着名的技术是“蹦床”技术,您可以将返回地址指向“JMP ESP”指令,该指令会跳回到溢出的缓冲区。