2016-12-30 63 views
-1

我想了解缓冲区溢出的基本原理。 在阅读中我注意到的事情之一了无数的时间为:C简单缓冲区溢出Shellcode位置

大部分时间的利用串结构是这样的,当空指令和shellcode的位于缓冲区溢出之前,第一部分:

[NOPS-SHELLCODE-NEWEIPADDRESS] 

现在我喜欢思考框外,并试图此,其中的shellcode位于堆栈中的新eipaddress后:

[NOPS-NEWEIPADDRESS-SHELLCODE] 

我在利用这种方式,但真正WO我测试的漏洞成功为什么没有人写或使用这种例子?这是不好的做法还是我忽略了什么?

回答

1

我认为你用来实现缓冲区溢出比第一种方式差的第二种方式。

让我为您解释。

通常,操作系统具有一个称为ASLR的安全功能。

简而言之,您的堆栈地址(缓冲区地址)在每次执行时都会有所不同。

所以你必须猜测缓冲区地址,这就是为什么NOP雪橇。

如果您的NEWEIPADRESS落在NOP底座或shellcode的第一个字节内,您的利用成功。

但是,如果您使用第二种方式,则只有当您的NEWEIPADRESS是shellcode的第一个字节时才会成功。

如果您登陆NOP雪橇,您的NEWEIPADRESS将被解释为汇编语言执行。

在大多数情况下,您的NEWEIPADRESS会使您的漏洞利用失败,期望NEWEIPADRESS都是NOP。