PHP 反序列化审计(php-deser-audit)用于分析 PHP 项目源码,识别用户可控数据进入 unserialize() 或等价反序列化点,并结合类的魔术方法(__wakeup/__destruct/__call/__toString 等)判断是否存在对象注入可利用链。
用途 面向 PHP Web 源码的安全审计,重点发现反序列化/对象注入类漏洞,并评估其可利用性。
主要能力
- 危险 Sink 识别:unserialize($data)、unserialize(base64_decode({value})),以及任何将用户输入转换后再反序列化的路径。
- 可控性追踪:必须追踪并输出反序列化入参来自哪里(GET/POST/Cookie/Session/Header/数据库字段等);是否存在 base64/加密/解码/拼接步骤(仍可能可控);是否有校验/签名(如 hash_hmac)以及签名是否可靠(需要证据)。
- gadget 链识别:必须输出反序列化后的对象类型(或可能类型集合)、该类型类中魔术方法列表与触发条件,以及“从对象创建 -> 魔术方法触发 -> 最终敏感操作(如文件/命令/SSRF/数据库)”的数据流链。
- tracer 触发条件:反序列化入参经过多层 decode/封装,或魔术方法链跨多个类/文件时触发追踪。
- 分级与编号:详见 shared/SEVERITY_RATING.md;漏洞编号格式为 {C/H/M/L}-DESER-{序号}。
证据引用要求(强制) 每条反序列化/对象注入疑似漏洞必须逐项引用 trace 输出中 ## 9) Sink Evidence Type Checklist 的 DESER 行对应证据要点(允许状态为待验证,但证据引用必须存在):
- EVID_DESER_CALLSITE:反序列化调用点位置证据(unserialize 等等价点)
- EVID_DESER_INPUT_SOURCE:入参用户可控来源证据
- EVID_DESER_OBJECT_TYPE_MAGIC_TRIGGER_CHAIN:反序列化后对象类型/魔术方法触发条件证据(以及最终敏感操作点链路证据,若能定位)
证据缺失处理(强制) 若无法定位上述 1~3 任一关键证据要点,该漏洞状态只能标记为 ⚠️待验证,不得直接给出 ✅已确认可利用。
报告输出 输出到:{output_path}/vuln_audit/deser_{timestamp}.md
PoC(强制,但标注为“概念 PoC/验证 PoC”) 必须给出:真实路由(或 cookie/session 字段使用方式);payload 生成思路(若无法生成真实 gadget payload,必须给出“需人工补齐的部分”并说明原因,同时仍保留可执行框架与可替换字段)。
适用场景 适用于对 PHP Web 项目源码进行反序列化/对象注入漏洞审计,尤其是存在用户输入进入反序列化流程、涉及多层解码封装或跨类魔术方法链的场景。
限制 资料未提供具体安装方式、运行命令、依赖环境、支持平台、收费与价格等信息,暂未提供。