前记

前段韶光,在美国的BlackHat会议上宣告了一种针对PHP运用程序的新漏洞利用办法。
你可以在这篇文章中理解到它。

概要

php最新技术PHP新式破绽应用技巧剖析 CSS

来自Secarma的安全研究员Sam Thomas创造了一种新的漏洞利用办法,可以在不该用php函数unserialize的条件下,引起严重的php工具注入漏洞。
这个新的攻击办法被他公开在了美国的BlackHat会议演讲上,演讲主题为:”不为人所知的php反序列化漏洞”。
它可以使攻击者将干系漏洞的严重程度升级为远程代码实行。

流包装

大多数PHP文件操作许可利用各种URL协议去访问文件路径,如data://,zlib://或php://。
个中一些包装器常日用于利用远程文件包含漏洞,攻击者可以在个中掌握文件包含的完全文件路径。
例如,包装器被注入泄露源代码,否则将被实行,或者注入自己的PHP代码实行:

Phar元数据

但到目前为止,没有人关注phar://。
Phar(PHP Archive)文件的有趣之处在于它们包含序列化格式的元数据。
让我们创建一个Phar文件,并添加一个包含一些数据作为元数据的工具:

我们新创建的test.phar文件现在具有以下内容。
我们可以看到我们的工具存储为序列化字符串。

PHP工具注入

如果现在通过phar://包装器对我们现有的Phar文件进行文件操作,则其序列化元数据将被反序列化。
这意味着我们在元数据中注入的工具将被加载到运用程序中。
如果此运用程序具有已命名的类AnyClass,并且具有魔术方法函数__destruct或__wakeup定义,则会自动调用这些方法。
这意味着我们可以在代码库中触发任何析构函数或唤醒方法。
更糟糕的是,如果这些方法函数对我们注入的数据进行操作,那么这可能会导致进一步的漏洞:

漏洞利用

首先,攻击者必须能够在目标Web做事器上植入精心制作的Phar文件。
而Sam Thomas创造了一些关于如何将Phar文件隐蔽到JPG中的好技巧,因此常见的图像上传功能已足够。

到目前为止,这彷佛仍不是关键,由于攻击者如果可以掌握诸如完全的include,fopen,file_get_contents,file等文件操作的函数,则可以造成严重的漏洞。
因此,常日须要在这些函数利用前验证用户的输入。

但是,phar://在任何文件操作中都会触发反序列化。
因此,其他文件操作,例如file_exists大略地检讨文件的存在,直到现在被认为对安全风险不太敏感并且受到较少保护。
但是现在攻击者可以注入phar://包装器并得到代码实行:

总结

可以通过RIPS的污点剖析,然后就可以在PHP文件操作中自动检测用户输入的未经由滤或验证的信息。
这样,我们即可检测文件删除、透露、写入、创建、包含(等等)漏洞。

(作者:曲速未来安全区,内容来自链得得内容开放平台“得得号”;本文仅代表作者不雅观点,不代表链得得官方态度)