预警|PHP新式漏洞利用技术分析
摘要: 这种新式漏洞可以在不使用php函数unserialize()的前提下,引起严重的php对象注入漏洞。这个新的攻击方式被他公开在了美国的BlackHat会议演讲上,演讲主题为:”不为人所知的php反序列化漏洞”。它可以使攻击者将相关漏洞的严重程度升级为远程代码执行。
前记
前段时间,在美国的BlackHat会议上宣布了一种针对PHP应用程序的新漏洞利用方式。你可以在这篇文章中了解到它。
概要
来自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文件操作中自动检测用户输入的未经过滤或验证的信息。这样,我们即可检测文件删除、泄露、写入、创建、包含(等等)漏洞。
(作者:曲速未来安全区,内容来自链得得内容开放平台“得得号”;本文仅代表作者观点,不代表链得得官方立场)
评论(0)
Oh! no
您是否确认要删除该条评论吗?