0x01 简介
ThinkPHP框架是MVC结构的开源PHP框架,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。该漏洞源于ThinkPHP 6.0的某个逻辑漏洞,成功利用此漏洞的攻击者可以实现“任意”文件创建,在特殊场景下可能会导致GetShell。
0x02 漏洞概述
2020年1月10日,ThinkPHP团队发布一个补丁更新,修复了一处由不安全的SessionId导致的任意文件操作漏洞。该漏洞允许攻击者在目标环境启用session的条件下创建任意文件以及删除任意文件,在特定情况下还可以getshell。
0x03 影响版本
ThinkPHP 6.0.0-6.0.1
0x04 环境搭建
利用PHPStudy对环境进行搭建
1.安装Composer
下载Composer-Setup.exe ,链接:https://getcomposer.org/download/
执行安装文件,选择php.exe位置,一路默认安装成功
composer拉取环境会卡住,换成国内镜像。
composer config -g repo.packagist composer https://packagist.phpcomposer.com
2.安装thinkphp
TP6下载:https://github.com/top-think/think 下载后放到phpstudy的根目录即可
创新项目之前,先切换到web项目目录windows R 进入cmd命令窗口
composer create-project topthink/think tp6 (tp6自定义,这个会生成一个文件夹)
这里说一个问题,我这个时间Thinkphp的最新版是6.0.2,用上面的命令下载下来framework是6.0.2版本的,我们需要再执行一条命令:composer require topthink/framework:6.0.0
:此时就会把将6.0.0的版本把6.0.2给替换掉
成功后配置php对应的环境变量(这个自行百度),注意php开启和配置的环境变量要对应且要php7.1以上,我这里用的是phpstudypro的最高版本php7.3
接着进入刚刚生成的tp6的目录,输入php think run, 默认运行在localhost:8000
接下来访问127.0.0.1:8000就可以看到搭建成功了
0x05 漏洞利用
在目标环境为Windows且开启session的情况下,容易遭受任意文件删除攻击。
在目标环境开启session且写入的session可控的情况下,容易遭受任意文件写入攻击。
修改/app/controller/Index.php 文件
session(‘demo’,$_GET[‘c’]);
修改 /app/middleware.php 文件如下
这里注意PHPSESSID的值一定要是32位(算上.php)这样才可以,接着再通过变量c传递任意代码。
可以看到文件在runtimesession下生成,内容并写入
接下来进行访问即可,同时将phpinfo代码改成一句话代码,即可Getshell。
0x06 修复
目前官网已经更新了thinkphp6.0.2版本(目前最新),修复了该漏洞,建议尽快升级最新版本。