PHP反序列化漏洞挖掘与模糊测试技术详解

本文深入探讨PHP反序列化函数的安全风险,提供基于AFL的完整模糊测试方案。包含PHP开发团队的安全政策分析、漏洞利用条件讨论,以及详细的测试环境搭建指南和种子文件优化建议。

模糊测试PHP的反序列化函数

最近,PHP开发团队决定不再将反序列化函数实现中的错误视为安全问题。在本文中,我想说明为什么我认为这是一个糟糕的决定,并提供一个简单的模糊测试/持续质量保证方案,因为无底洞般的错误数量似乎是这一举措的部分动机。

政策变更的争议

政策变更的论证有两点。首先,他们声称对来自不可信源的数据使用反序列化函数本质上是不安全的。 essentially,他们认为将反序列化实现中的错误视为安全相关问题没有意义,因为应用程序将不可信数据传递给该函数的事实意味着该应用程序的安全性已经受到威胁。其次,他们认为将反序列化错误视为安全相关问题会鼓励开发人员对其使用不可信数据。在我看来,这是一个相当薄弱的论点。文档中明确记载了反序列化是不安全的,如果这个警告没有传达信息,那么我非常怀疑PHP错误跟踪器中的分类变更会起到作用。

让我们更详细地讨论第一点,因为现实情况更为微妙。通常,无需攻击反序列化实现本身,相对容易利用不可信数据的反序列化。但这有一些要求。特别是,攻击者必须能够在目标应用程序或其使用的库中找到包含PHP魔术方法的类,例如__destruct函数。此外,如果提供了allowed_classes参数给反序列化,那么包含魔术方法的类必须包含在此列表中。这些条件并不总是成立。如果应用程序是闭源的,攻击者将无法直接找出此类类的名称,而如果allowed_classes是空列表,则他们无论如何也无法使用它们。

上述并非仅仅是假设场景。这篇相当不错的文章记录了PornHub

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计