这是我自己试图利用的第一批漏洞之一,以扩大我对漏洞的了解。
这是一个良好的脆弱性总结。我已经能够控制EIP,但我不知道如何执行代码。
我的测试机器是Ubuntu11.10,在堆栈、堆和库中启用了ASLR和NX。我控制的字符串(如本文所述)存储在堆中,因此我不能在堆中放置任何代码,因为它不能执行。除了EIP之外,我还控制EDI寄存器,但仅此而已。这是一个32位系统,所以蛮力足以击败ASLR (另外,我没有任何其他安全机制;不太现实,但一个良好的开端)。
编辑:
刚找到这个PoC。基本上,作者回到我所在的地方,然后依赖PHP服务器上的代码来进一步阅读Apache进程内存。他说代码执行是“极有可能的”,但除此之外并没有太多的细节。
发布于 2012-07-11 19:33:30
这是一个非常类似于悬吊指针的严重漏洞。简而言之,它允许远程攻击者读取和/或写入任意内存地址。这比简单的基于堆栈的缓冲区溢出更有价值,特别是在利用现代系统时。针对此漏洞的可靠远程代码执行漏洞尚未出现在公众面前。然而,Vupen,一个著名的剥削交易商,可能已经开发了这样一种利用。
因为这也是一个内存泄漏漏洞,您不必使用蛮力绕过ASLR。读取有效负载在内存中的ASLR内存地址的开发已经写好了。
对环境影响投资的控制仍然存在问题。我还没有见过这样的漏洞,但它看起来可能是可能的,可能是通过一个GOT覆盖或者破坏堆栈框架。
在您完成EIP/RIP之后,您有几个选项。一种选择是使用面向返回的编程 (ROP链)执行任意代码。ROP链由执行有用任务的应用程序中的汇编程序片段组成,这些任务被链接在一起。一个常见的ROP小工具是用jmp edx控制EIP/RIP。另一个有用的ROP小工具将是对system()的调用,请记住,由于ret2libc对system()的调用将失败,因为您不知道该函数的地址,因此需要ROP小工具(S)。这些是一些简单的例子,但是ROP链也可能非常复杂。ROP链很有用,因为它们由必须是可执行且不是随机的代码组成。目标应用程序中有帮助您找到ROP小工具的工具。在像Apache这样的应用程序中,肯定有许多有用的ROP小工具。
或者另一种选择是泄漏内存以查找可以放置有效负载的内存地址。然后击败NX位 (可能需要一个ROP链)使您的有效负载可执行,并将EIP/RIP指向您的有效负载。
轰隆隆。
https://security.stackexchange.com/questions/16806
复制相似问题