PHP 5.3.9 漏洞帮助

信息安全 php C
2021-08-25 01:56:53

这是我尝试自己利用以扩展我的漏洞利用知识的首批漏洞之一。

这是对漏洞的一个很好的总结我已经能够控制 EIP,但我不确定如何执行代码。

我的测试机器是 Ubuntu 11.10,并且为堆栈、堆和库启用了 ASLR 和 NX。我控制的字符串(如文章中所述)存储在堆中,因此我无法在其中放置任何代码,因为它不可执行。除了 EIP,我还控制 EDI 寄存器,仅此而已。这是一个 32 位系统,所以蛮力足以击败 ASLR(另外我没有任何其他安全机制;不是很现实,但一个好的开始)。

编辑:

刚找到这个PoC基本上,作者到达了我所在的地方,然后依靠 PHP 服务器上的代码更进一步,以便能够读取 Apache 进程内存。他表示代码执行“很有可能”,但除此之外没有详细说明。

1个回答

这是一个令人讨厌的漏洞,与Dangling Pointer非常相似简而言之,它允许远程攻击者读取和/或写入任意内存地址。这比简单的基于堆栈的缓冲区溢出更有价值,尤其是在利用现代系统时。针对此漏洞的可靠远程代码执行漏洞尚未公开。然而,著名的漏洞利用经销商 Vupen 可能已经开发了这样的漏洞利用

因为这也是一个内存泄露漏洞,所以您不必使用蛮力绕过 ASLR。已编写了一个利用程序来读取有效负载在内存中的 ASLR 内存地址。

仍然存在控制EIP的问题。我还没有看到这样做的漏洞利用,但它看起来可能是可能的,可能是 GOT 覆盖或损坏堆栈帧。

在您完成 EIP/RIP 之后,您有几个选择。一种选择是使用面向返回的编程(ROP 链)来执行任意代码。ROP 链由有用的“小工具”或应用程序中执行有用任务的汇编程序段组成,这些任务被链接在一起。一个常见的 ROP 小工具是使用jmp edx. 另一个有用的 ROP 小工具是对 的调用system(),请记住,由于 ASLR,ret2libc 调用system()将失败,因为您不知道此函数的地址,因此需要 ROP 小工具。这些是一些简单的示例,但是 ROP 链也可能非常复杂。ROP 链很有用,因为它们由必须可执行且非随机的代码组成。在目标应用程序中。在像 Apache 这样的应用程序中,必然会有许多有用的 ROP 小工具。

或者另一种选择是泄漏内存以找到可以放置有效负载的内存地址。然后击败 NX 位(可能需要 ROP 链)以使您的有效负载可执行并将 EIP/RIP 指向您的有效负载。

繁荣。