C简单缓冲区溢出Shellcode位置

时间:2016-12-30 19:38:23

标签: c buffer-overflow

我正在尝试理解缓冲区溢出的基本原理。 在无数个小时的阅读中,我注意到的一件事是:

大多数情况下,漏洞利用字符串结构如下所示,其中nops和shellcode位于缓冲区溢出之前的第一部分:

[NOPS-SHELLCODE-NEWEIPADDRESS]

现在我喜欢在盒子外面思考并尝试这个,其中shellcode位于堆栈中新的eipaddress之后:

[NOPS-NEWEIPADDRESS-SHELLCODE]

我成功地以这种方式利用了我的测试漏洞,但真的很奇怪为什么没有人写或使用这种示例?这是不好的做法还是我忽略了什么?

1 个答案:

答案 0 :(得分:1)

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

让我为你解释一下。

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

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

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

如果你的NEWEIPADRESS登陆NOP雪橇或shellcode的第一个字节,你的攻击成功。

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

如果您使用NOP底座,则NEWEIPADRESS将被解释为要执行的汇编语言。

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