ThinkPHP V6.0.12LTS多语言模块RCE
字数 1230 2025-08-11 21:26:18
ThinkPHP V6.0.12LTS 多语言模块RCE漏洞分析
1. 漏洞概述
ThinkPHP是一个轻量级的PHP框架,旨在简化企业级应用和WEB应用开发。在V6.0.12LTS及之前版本中,存在一个通过多语言模块实现的远程代码执行(RCE)漏洞。
2. 漏洞产生原因
该漏洞的产生基于两个关键因素:
- 多语言功能设计缺陷:程序开启了多语言功能时,攻击者可以通过GET、POST、Header或Cookie等方式传入参数
- 文件包含漏洞:攻击者可以利用这些参数实现目录穿越和文件包含
通过结合pearcmd.php文件的特性,攻击者可以实现远程代码执行。
3. 影响版本
- v6.0.1 < ThinkPHP < v6.0.13
- ThinkPHP v5.0.x 系列
- ThinkPHP v5.1.x 系列
4. 漏洞利用条件
- 目标系统运行在Docker环境中(因为默认安装pecl/pear)
- 系统启用了ThinkPHP的多语言功能
- PHP版本<=7.3(7.4+需要编译时指定--with-pear才会安装pear)
5. 漏洞复现
环境搭建
使用Vulfocus提供的漏洞环境:
docker pull vulfocus/thinkphp:6.0.12
漏洞利用
访问目标URL并附加以下参数:
http://[target]/public/index.php?lang=../../../../usr/local/lib/php/pearcmd&+config-create+/+/var/www/html/a.php
这个EXP利用了pearcmd.php的config-create功能,会在web目录下创建一个包含PHP代码的文件。
攻击原理
- 通过
lang参数实现目录穿越,包含pearcmd.php文件 - 利用
pearcmd.php的config-create功能:- 第一个
/是写入文件的内容 - 第二个
/var/www/html/a.php是写入文件的路径
- 第一个
- 成功后会创建一个webshell文件
a.php
6. 技术细节
pecl/pear背景
- pecl:PHP扩展社区库,用于管理PHP扩展的命令行工具
- pear:PHP扩展和应用仓库,pecl依赖的类库
- 在PHP<=7.3中默认安装,PHP>=7.4需要编译时指定
--with-pear - Docker镜像中默认安装,路径为
/usr/local/lib/php
多语言模块实现
ThinkPHP的多语言功能允许通过多种方式(GET/POST/Header/Cookie)设置语言参数,缺乏严格的过滤导致可以注入恶意路径。
7. 修复建议
- 升级到安全版本:
- ThinkPHP >= 6.0.14
- ThinkPHP >= 2.1.42
- 临时缓解措施:
- 禁用多语言功能
- 对语言参数进行严格过滤
- 移除或限制访问
pearcmd.php
8. 防御措施
- 在生产环境中禁用不必要的PHP组件(如pear)
- 实施严格的输入验证和过滤
- 使用最小权限原则运行Web应用
- 定期更新框架和组件到最新版本
9. 参考链接
- 原始漏洞报告:FreeBuf文章《ThinkPHP V6.0.12LTS多语言模块RCE》
- ThinkPHP官方更新日志
- PHP官方关于pear的文档