ThinkPHP 框架与安全挑战
ThinkPHP 是一款由国人开发的轻量级 PHP 开源框架,自2006年诞生以来,凭借其开发效率高、学习成本低、生态完善等优势,广泛应用于各类中小型Web项目中。然而,正因其普及度高,也成为黑客攻击的重点目标。

近年来,ThinkPHP 多个版本曝出严重安全漏洞,其中 5.0.x 系列 在2018年至2019年间连续出现多个远程代码执行(Remote Code Execution, RCE)漏洞,影响范围广、危害程度高。本文将聚焦 ThinkPHP 5.0.11 版本中存在的远程代码执行漏洞,深入剖析其成因、复现过程,并提供切实可行的修复建议。
漏洞概述:ThinkPHP 5.0.11 RCE 漏洞
漏洞名称:
ThinkPHP 5.0.11 远程代码执行漏洞(RCE)
漏洞等级:
高危(Critical)
漏洞类型:
远程代码执行(Remote Code Execution)
影响版本:
ThinkPHP 5.0 < 5.0.23
ThinkPHP 5.1 < 5.1.31
特别说明:虽然漏洞在 5.0.23 版本中被官方修复,但 5.0.11 作为早期版本,存在严重的安全缺陷,极易被利用。
官方修复:
ThinkPHP 官方于 2019年1月11日 发布 5.0.24 版本,正式修复该系列漏洞。
漏洞原理:为何 ThinkPHP 5.0.11 存在RCE?
该漏洞的根本原因在于 框架对用户输入的处理不当,尤其是在请求方法(method)和过滤器(filter)的处理逻辑中存在缺陷。
核心问题点:
_method参数未正确过滤
ThinkPHP 支持通过_method参数伪造 HTTP 请求方法(如 POST、PUT、DELETE)。攻击者可通过该参数构造恶意请求。filter参数可调用任意函数
框架允许通过filter参数对输入数据进行过滤处理。在 5.0.11 版本中,filter可被设置为 PHP 内置函数(如system、exec、assert等),并结合用户输入执行任意代码。server[REQUEST_METHOD]可被覆盖
攻击者可通过server[REQUEST_METHOD]覆盖服务器的请求方法,从而绕过部分安全检测。
漏洞触发链:
攻击者通过精心构造的 POST 请求,利用 _method=__construct 触发 Request 类的构造函数,再通过 filter[]=system 将输入数据传递给 system() 函数执行,最终实现 远程命令执行。
漏洞复现:手把手教你验证漏洞(仅用于学习)
⚠️ 免责声明:以下操作仅限于合法授权的测试环境或本地搭建的靶场,请勿用于非法渗透。
1. 环境准备
搭建 ThinkPHP 5.0.11 环境(推荐使用 Vulhub 或 Vulfocus)
访问靶场地址:
http://your-ip:8080
2. 构造恶意请求(POST)
3. 漏洞验证
发送上述请求后,若服务器返回
uid=0(root) gid=0(root) groups=0(root)等信息,说明id命令已成功执行。替换
server[REQUEST_METHOD]=whoami或server[REQUEST_METHOD]=ls /可进一步验证系统权限和文件结构。
4. 写入Webshell(高危操作)
访问 http://your-ip:8080/shell.php 并使用菜刀、蚁剑等工具连接,即可实现 GetShell。
其他 ThinkPHP 5.x RCE 漏洞补充
除 5.0.11 外,ThinkPHP 5.x 系列还存在多个类似漏洞:
| 漏洞版本 | 利用方式 | 示例 |
|---|---|---|
| 5.0.22 / 5.1.29 | invokefunction 调用任意函数 | /index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=id |
| 5.0.23 | __construct + filter | 同本文所述 |
| 3.2.x | preg_replace /e 模式 | s=/index/index/name/${@phpinfo()} |
修复方案:如何安全升级?
✅ 方案一:立即升级框架版本
升级至 ThinkPHP 5.0.24 或更高版本
或升级至 ThinkPHP 6.x 系列(推荐)
✅ 方案二:临时缓解措施(未升级前)
禁用危险函数
在php.ini中禁用system、exec、shell_exec、passthru等函数:启用强制路由
在配置文件中设置'url_route_must' => true,防止未定义路由被解析。WAF 防护
部署 Web 应用防火墙(如 ModSecurity),拦截包含_method=__construct、filter[]=等特征的请求。
安全建议:开发者必读
及时更新依赖:定期检查并更新 ThinkPHP 及其插件。
最小权限原则:Web 服务运行用户应避免使用 root 权限。
关闭调试模式:生产环境务必关闭
APP_DEBUG。输入验证:对所有用户输入进行严格过滤与转义。
使用安全工具:集成代码审计工具(如 RIPS、SonarQube)进行自动化检测。
ThinkPHP 5.0.11 的远程代码执行漏洞是典型的“输入未过滤 + 函数调用滥用”导致的安全事故。作为开发者,我们不仅要追求开发效率,更要重视代码安全。定期关注官方安全公告,及时修复已知漏洞,是保障系统稳定运行的基石。
安全无小事,防患于未然。





















