【发布时间】:2015-12-23 11:07:57
【问题描述】:
我正在尝试在堆栈缓冲区溢出方面进行练习。我正在做一个经典的例子,其中 vuln 允许您覆盖 EIP。我的问题是我只能使用以 00 开头的地址,这意味着我不能覆盖大于 ESP 指向的地址。因此,将 shellcode 放在我覆盖 EIP 的地址之后的经典方法将不起作用。相反,我需要将地址之前的 shellcode 放入缓冲区。请看下面的简单图。
......... ESP 需要以某种方式跳到这里 | | 五五 XXXX|AAAA|AAAA|AAAA|AAAA|AAAA|....|AAAA|AAAA|AAAA|.... 一种 | | 我的缓冲区不会到达任何地址 比 ESP 大,因为它里面有 0...现在的问题是:我需要搜索的汇编指令是什么,它将跳转到比 ESP 小 200 字节的地址?我不太了解 x86 汇编程序。我已经尝试过 jmp [ESP-8]、jmp [ESP-16]、...(也有更大的偏移量),然后是 sub ESP、EBX + jmp ESP、xor ESP、EBX + jmp ESP 等。我应该在这里补充一点,看起来我也可以覆盖 EBX。因此,如果有 sub ESP、EBX + jmp ESP 或类似的东西,那么我可以通过首先从 ESP 中减去偏移量来填充 EBX 与跳转到 shellcode 的负偏移量。但是无论我尝试什么,我都找不到模块中的说明。我认为我的主要问题是我不太了解 x86 汇编语言。我在代码中看到了 jmp DWORD PTR DS:[ESP+8] 之类的指令,并且一直在谷歌搜索,我有限的理解告诉我这是数据段中的相对跳转。所以我需要在堆栈段中做这样的事情,理想情况下从 EBX 寄存器中获取偏移量......这样的事情存在吗?
【问题讨论】:
-
我日夜在谷歌上搜索这个东西......并找到了一些可能有帮助的东西。有 2 个有趣的 mona.py 搜索命令:findwild 和 jmp。
-
您很可能可以使用 ROP 解决此问题
标签: x86 buffer-overflow exploit