ThinkPHP
漏洞基本信息
| 项目 | 内容 |
|---|---|
| 漏洞名称 | 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 进行变量覆盖。
- 核心逻辑:通过
_method=__construct覆盖类属性filter。 - 函数调用:将
filter[]设置为system等敏感函数。 - 绕过限制:利用
s=captcha等合法路由诱导框架进入错误的解析逻辑,最终执行攻击者传入的恶意指令。
渗透测试过程 (Exploit)
免责声明: 本实验仅用于安全教学与授权渗透测试,严禁用于任何非法用途。
1. 环境启动与初始化
进入靶场目录,执行 Docker 指令启动环境。
1 | # 进入目录 |

2.漏洞验证 (PoC)
构造特定的 POST 请求,尝试调用系统的 id 命令。
1 | # 发送构造好的攻击 Payload |
反馈:如回显所示,成功获取了 Web 服务的 www-data 用户权限。
3. 权限深度利用 (WebShell)
在确认可执行命令后,进一步通过 echo 命令向 Web 目录写入 PHP 一句话木马。
1 | # 写入名为 shell.php 的后门文件 |
4. WebShell 连通性测试
访问 http://127.0.0.1:8080/shell.php,确认文件已成功生成(页面返回空白即代表 PHP 解析正常)。利用 curl 传递参数验证木马功能:
1 | # 测试木马执行 whoami |
防御修复建议
框架升级:尽快升级 ThinkPHP 至最新官方稳定版本。
权限加固:如本次实验所示,确保 Web 服务运行在 www-data 等低权限用户下,严格遵循最小权限原则,防止攻击者直接提权。
边界防护:在 Web 应用防火墙(WAF)中增加对 _method=__construct 等异常特征请求的拦截规则。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ukio!




