模糊测试PHP的反序列化函数
最近,PHP开发团队决定不再将反序列化函数实现中的错误视为安全问题。本文旨在说明这一决策的潜在风险,并提供一套针对反序列化功能的持续模糊测试方案。
安全分类争议
PHP团队的观点基于两个论点:首先,反序列化函数本身就不应处理不可信数据;其次,将反序列化漏洞列为安全漏洞会误导开发者滥用该函数。但实际情况更为复杂——当应用采用闭源代码或设置allowed_classes白名单时,攻击者可能不得不直接攻击反序列化实现本身。
实战模糊测试方案
本方案基于AFL(American Fuzzy Lop)框架,包含以下核心组件:
环境搭建
|
|
脚本会自动启动GNU screen会话,包含1个AFL主实例和N个从实例。
技术要点
- 驱动脚本:直接从未序列化数据文件读取字符串传入unserialize()函数
- 编译策略:全量编译保证覆盖率,针对性编译提升性能
- 字典优化:集成反序列化解析器中的关键令牌
- 种子文件:融合PHP文档示例和历史漏洞触发样本
扩展建议
- 可结合魔术方法(如__destruct)增强测试深度
- 参考PornHub