ThinkPHP 最新rce(QVD-2022-46174)复现和分析
2022-12-10 22:25:0 Author: xz.aliyun.com(查看原文) 阅读量:226 收藏

昨晚到处都是关于thinkphp rce漏洞的消息,所以今天想着分析复现一下

我这里用的是一款基于thinkphp5开发的程序进行测试,漏洞成功利用需要thinkphp开启多语言模式

利用一

直接文件包含:

其中/www/server/php/72/lib/php/hello.php为phpinfo文件

利用二

使用pearcmd在/tmp文件夹下创建文件再进行包含,前提是php安装了pearcmd,并且开启了register_argc_argv选项,这里有疑问参见P神博客
首先创建文件


再包含

thinkphp程序初始化都会运行/thinkphp/library/think/app.php的initialize()函数,函数中使用this->loadLangPack()获取语言包

进入loadLangPack看一下

可以看到当设置多语言模式后,执行$this->lang->detect()检测语言,进入/thinkphp/library/think/lang.php detect()函数

程序会按照顺序通过url,cookie或浏览器获取语言设置,我们在lang中输入payload,此时payload被赋值给为参数$langSet。回到loadLangPack函数,下一步执行$this->request->setLangset($this->lang->range());设置语言,再执行load函数进行加载。

可以看到load函数的参数是由目录和langset参数拼接构造的,并且没有对传入参数进行过滤和限制
跟进/thinkphp/library/think/lang.php的load函数,参数传递给了$file,漏洞触发位于标识位置,函数对传入的file参数直接进行了包含操作,造成文件包含漏洞


文章来源: https://xz.aliyun.com/t/11940
如有侵权请联系:admin#unsafe.sh