温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-10-11 11:15:18 来源:亿速云 阅读:465 作者:柒染 栏目:大数据

这期内容当中小编将会给大家带来有关ThinkPHP6.0任意文件如何创建Getshell复现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

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 环境搭建

1、安装Composer      
下载Composer-Setup.exe      
     
https://getcomposer.org/download/
     


执行安装文件,选择php.exe位置,即可安装成功      
     


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


composer拉取环境有时候可能会卡住,可以换国内镜像      
     

     
composer config -g repo.packagist composer https://packagist.phpcomposer.com
     


     

2、安装thinkphp

composer create-project topthink/think tp6 (tp6自定义)
     

     

出现报错可参考:

http://www.jrnw.net/index.php/2019/05/30/thinkphp6%E6%A1%86%E6%9E%B6%E6%BA%90%E7%A0%81%E7%9A%84%E4%B8%8B%E8%BD%BD%E4%B8%8E%E5%AE%89%E8%A3%85%E8%AF%A6%E7%BB%86%E6%95%99%E7%A8%8B/
     


     

3、版本选择

将 tp6/composer.json 文件的 "topthink/framework": "^6.0.0" 改成 6.0.0 版本,并执行更新命令


     
进入tp6目录cd tp6composer update
     

     

PS:

  • 如果是linux 就再执行启动环境 :./think run --host=0.0.0.0 --port=8000

  • 如果不能拉取到环境,公众号内回复“tp60环境”获取


0x05 漏洞利用

首先在得到可控session参数名,这是本地构造的,实战需要自己fuzz。      

构造位置:tp60\app\controller\Index.php      


需要增加构造的内容:


     
use think\facade\Session;Session::set('user',$_GET['username']);
     

     

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


     
开启session且写入的session可控      
/tp6/app/middleware.php 文件开启session      
去掉注释session的//      

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


构造请求:      
username就是我们刚才构造的接受参数,然后将PHPSESSID的值修改为32位的保存路径      

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

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


我们通过poc打了之后,就可以访问一下public下的文件    


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


0x06 坑点

1、本地测试localhost失败

问题:

     当我们用localhost去测试poc的时候,请求中自带cookie,即使修改也没用

解决:

      通过IP去测试,127.0.0.1 或者内网IP

2、shell选择

问题:

      在最新版的phpstudy测试菜刀马失败

解决:

      冰蝎的shell可以用。


0x07 修复方式

官方给出方案

对session id 加一个过滤,使用ctype_alnum()

$this->id = is_string($id) && strlen($id) === 32 ctype_alnum($id) && ? $id : md5(microtime(true) . session_create_id());

上述就是小编为大家分享的ThinkPHP6.0任意文件如何创建Getshell复现了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI