ThinkPHP6.0任意文件创建Getshell复现

2020-04-26 16:30:52 浏览数 (1)

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版本(目前最新),修复了该漏洞,建议尽快升级最新版本。

0 人点赞