如何做一个NOP雪橇的工作?(How does a NOP sled work?)

2019-08-16 19:49发布

我找不到回答这个问题的良好来源。 我知道,一个NOP雪橇是用来绕过堆栈随机化的缓冲区溢出攻击的技术,但我不能让我的周围是如何工作的负责人。

那是什么说明这种方法一个简单的例子?

什么样的128字节NOP雪橇意味着什么?

Answer 1:

有些攻击包括使程序跳转到指定的地址,并从那里继续运行。 注入的代码必须在准确的位置以前莫名其妙地加载。

堆栈随机化和其他运行时的差异可能会使该程序会跳转无法预测的地址,所以攻击者放置一个NOP雪橇在一个大范围的内存。 如果程序跳转到任何地方进入雪橇,它将运行所有剩余的NOP,什么都不做,然后将运行负载代码,就在旁边的雪橇。

攻击者使用的NOP雪橇的原因是为了使目标地址更大:该代码可以在注入代码开头雪橇跳的任何地方,而不是完全吻合。

一个128字节的NOP雪橇仅仅是一个组NOP说明资讯128个字节宽的。

注1:NOP(空操作),在大多数(所有?)架构提供的指令,可以做什么,不是占用内存和一些运行时等。

注2:在用可变长度指令架构中,NOP指令通常在长度只是一个字节,因此它可以被用来作为一种方便的指令填充。 不幸的是,还可以很容易地做一个NOP雪橇。



Answer 2:

要添加到罗德里戈的解释 - 即使有NOP雪橇,在内存中缓冲的大致位置必须提前预测。 用于近似的存储器位置的一个技术是使用附近栈位置作为参考帧。 通过减去从该位置偏移,能够获得任何变量的相对地址。

边注:在x86架构NOP指令等价于十六进制字节的0x90因此完成利用缓冲区可能是这个样子:

| NOP雪橇| 的Shellcode | 重复返回地址|

眼看仿佛EIP寄存器指向在NOP雪橇发现任何地址,它会同时在同一时间执行每个NOP指令,一个增量,直到它最终到达的shellcode



文章来源: How does a NOP sled work?