-
-
[翻译] Linux (x86) Exploit 开发系列教程之四(使用return-to-libc绕过NX bit)
-
发表于:
2017-4-10 21:32
9023
-
[翻译] Linux (x86) Exploit 开发系列教程之四(使用return-to-libc绕过NX bit)
使用return-to-libc绕过NX bit
前提条件:
经典的基于堆栈的缓冲区溢出
虚拟机安装:Ubuntu 12.04(x86)
在以前的帖子中,我们看到了这个攻击者
-复制shellcode堆栈并跳转到它!
为了成功利用漏洞代码。为了阻止攻击者的行动,安全研究人员提出了一个名为“NX Bit”的漏洞缓解!
什么是NX Bit?
它是一种利用缓解技术,使某些内存区域不可执行,并使可执行区域不可写。示例:使数据,堆栈和堆段不可执行,而代码段不可写。
在NX bit打开的情况下,我们基于堆栈的缓冲区溢出的经典方法将无法利用此漏洞。因为在经典的方法中,shellcode被复制到堆栈中,返回地址指向shellcode。但是现在由于堆栈不再可执行,我们的漏洞利用失败!但是这种缓解技术并不完全是万无一失的,因此在这篇文章中我们可以看到如何绕过NX Bit!
漏洞代码:此代码与以前发布的漏洞代码相同,稍作修改。稍后我会谈谈需要修改的内容。
编译命令:
注意:“-z execstack”参数不传递给gcc,因此现在堆栈是非可执行的,可以验证如下所示:
堆栈段只包含RW标志,无E标志!
如何绕过NX位并实现任意代码执行?
可以使用叫做“return-to-libc”的攻击技术绕过NX bit。这里返回地址被一个特定的libc函数地址覆盖(而不是包含shellcode的堆栈地址)。例如,如果攻击者想要生成一个shell,那么他将使用system()地址覆盖返回地址,并在堆栈中设置system()所需的相应参数,以便成功调用它。
在已经反汇编并绘制了漏洞代码的堆栈布局后,让我们编写一个漏洞代码来绕过NX位!
漏洞代码:
执行上面的exploit程序给我们root shell,如下所示:
宾果,我们得到了root shell!但是在实际应用中,由于root setuid程序会采用最小权限的原则,它并不容易。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!