堆栈溢出 - Nop 雪橇,你能给我解释一下吗?



我一直在读这本书:黑客,剥削的艺术

在第140页,这本书解释了Nop幻灯片:

我们将创建这些 NOP 指令的大型数组(或雪橇)并将其放置 在外壳代码之前;然后,如果 EIP 寄存器指向 中找到的任何地址 NOP滑板,它将在执行每个NOP指令时递增,一个在 一段时间,直到它最终到达外壳代码。这意味着只要 返回地址被 NOP 托架(EIP)中的任何地址覆盖 寄存器将沿着雪橇滑到外壳代码,这将正确执行。

但是使用这种技术,我们会用0x90覆盖返回地址,不是吗?EIP 将转到0x90,从而导致段错误。那么,你能清楚地向我解释这个技巧吗?谢谢:)

不,您不会使用 NOP 雪橇重写返回地址。一旦你得到了正确的偏移量,你必须用地址重写返回地址,什么指向你的NOP指令的某个地方。而且由于NOP雪橇放置在您的shellcode之前,因此它将向下滑动并执行shellcode。因此,60字节长的NOP雪橇无所作为。

这是因为(你可以在那本书中找到关于它的一切):

NOP 是一个汇编指令,是"无操作"的缩写。是的 一个绝对不执行任何操作的单字节指令。

添加到

@Yeez答案

NOP雪橇(如前所述,没有操作)被称为雪橇,因为;它看起来像一个

[nop sleds][shellcode]

因此,如果您"降落"在nop(又名x90,或者陈词滥调也xchg eax, eax两者都是NOP))

它只会"向下滑动"到外壳代码

如果我们碰巧到达这里,在 2 号: [nop] [nop]; the last one

然后我们将沿着它"滴答/雪橇/滑动/爬行",直到我们到达我们的shellcode(此时我们执行该shellcode)

[nop] [nop] [nop] [shellcode]

^ go ^ go ^ go ^ execute

在 RASM2 中进行测试

(雷达2的工具,比如msf-nasm,如果你习惯的话)

rasm2 -a x86 -b 32 "xchg eax, eax"

相关内容

  • 没有找到相关文章

最新更新