php漏洞搭建复现,ThinkPHP6.0 任意文件操作 漏洞分析复现

本文详细介绍了ThinkPHP6.0版本中一个由不安全的SessionId引发的任意文件操作漏洞,该漏洞可能导致远程代码执行。攻击者在目标环境启用session时,可利用此漏洞进行文件的任意创建、删除,甚至获取webshell。受影响的版本包括ThinkPHP6.0.0和6.0.1。官方已在6.0.2版本中修复该问题,建议用户及时更新。
摘要由CSDN通过智能技术生成

一、漏洞简介

2020年1月10日,ThinkPHP团队发布一个补丁更新,修复了一处由不安全的SessionId导致的任意文件操作漏洞。该漏洞允许攻击者在目标环境启用session的条件下创建任意文件以及删除任意文件,在特定情况下还可以getshell。

攻击者可利用此漏洞构造恶意的数据报文,向服务器写入任意内容的文件,从而能够达到远程代码执行.

9b2469341d37943888c7e7edf1c5aa73.png

二、影响范围

ThinkPHP6.0.0

ThinkPHP6.0.1

三、环境搭建

使用ThinkPHP6.0.0版本搭建,利用中间件phpstudy运行搭建的网站,

49e6a8bd56e9ecba47020eff8e372eb1.png

5de06b636441488f851aff0f944187fa.png

228a3f56ae8ba097ac8238c8426323c5.png

四、漏洞复现

利用条件:

在目标环境为Windows且开启session的情况下,容易遭受任意文件删除攻击。

在目标环境开启session且写入的session可控的情况下,容易遭受任意文件写入攻击。

修改/app/controller/Index.php 文件

增加下面这段代码:

bff6be6ff43b788a288f8c80f67f4d77.png

修改 /app/middleware.php 文件如下

7bb0c7e2315675404d54a1ed319f2e75.png

使用burp构造数据报文如下:

f416300c3f5b29d16c8933ddc219dfce.png

默认在目标/ runtime/session文件夹下生成如下文件

a798615b884b4b9aadfe2393ca24dbc1.png

写入的文件内容

636bc3e7d10d7467e03e7a073512f3a7.png

拼接URL地址:

1e8b5b9aca22535a8efbbb4880d57c2b.png

替换payload获取webshell

bfdc70e8fd7b28c8baa6f8b44ebe7ce0.png

获取webshell

75599aa5b96720f06122f4b5d2ed3710.png

五、漏洞分析

根据官方github的commit推测,可能是在存储session时导致的文件写入。然后,跟踪:vendor/topthink/framework/src/think/session/Store.php

public function save(): void

90f44c5f37e91c073fbb8cf2c837f5d2.png

这里调用了一个write函数,跟进一下:vendor/topthink/framework/src/think/session/driver/File.php

ec1baa6436a5f790ba9339609ac21a8b.png

调用writeFile函数,跟入:

926c16024a0e9d8b663c7777a58f7b68.png

写入文件的操作。

继续看一下文件名是否可控,该文件名来自于最开始的getId()得到的$sessionId的值。看一下函数内容:

f6bf96f2ed35da7ee276aa48a0bc4b82.png

在 session 初始化时,程序会将 PHPSESSID 对应的值赋值给 \think\session\Store:id 。这里如果 PHPSESSID 对应值长度等于32,则无任何过滤直接赋值,看一下调用setId的地方:vendor/topthink/framework/src/think/middleware/SessionInit.php:46。

83320bb01a7318328ce9835dc8ef322d.png

然后在程序构造响应数据返回给用户时,会先将 session 写入文件,而这个文件的文件名则由之前的 PHPSESSID 拼接而成。由于没有任何的过滤,这也就造成了任意文件创建、覆盖。在session 数据可控的情况下,可以达到 getshell 的目的

a0154a56763cefcb64db003d1c87e622.png

六、漏洞修复

目前官网已经更新了thinkphp6.0.2版本,修复了该漏洞,建议尽快升级最新版本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值