破绽简介
2020年1月10日,ThinkPHP团队发布一个补丁更新,修复了一处由不平安的SessionId招致的恣意文件操作破绽。该破绽允许攻击者在目的环境启用session的条件下创立恣意文件以及删除恣意文件,在特定状况下还能够getshell。
攻击者可应用此破绽结构歹意的数据报文,向效劳器写入恣意内容的文件,从而可以到达远程代码执行.
影响范围
ThinkPHP6.0.0
ThinkPHP6.0.1
破绽剖析
依据官方github的commit揣测,可能是在存储session时招致的文件写入。然后,跟踪:vendor/topthink/framework/src/think/session/Store.php
public function save(): void
这里调用了一个write函数,跟进一下:vendor/topthink/framework/src/think/session/driver/File.php
调用writeFile函数,跟入:
写入文件的操作。
继续看一下文件名能否可控,该文件名来自于最开端的getId()得到的$sessionId的值。看一下函数内容:
在 session 初始化时,程序会将 PHPSESSID 对应的值赋值给 thinksessionStore:id 。这里假如 PHPSESSID 对应值长度等于32,则无任何过滤直接赋值,看一下调用setId的中央:vendor/topthink/framework/src/think/middleware/SessionInit.php:46。
然后在程序结构响应数据返回给用户时,会先将 session 写入文件,而这个文件的文件名则由之前的 PHPSESSID 拼接而成。由于没有任何的过滤,这也就形成了恣意文件创立、掩盖。在session 数据可控的状况下,能够到达 getshell 的目的
环境搭建
运用ThinkPHP6.0.0版本搭建,应用中间件phpstudy运转搭建的网站
破绽复现
应用条件:
在目的环境为Windows且开启session的状况下,容易遭受恣意文件删除攻击。
在目的环境开启session且写入的session可控的状况下,容易遭受恣意文件写入攻击。
修正/app/controller/Index.php 文件
增加下面这段代码:
修正 /app/middleware.php 文件如下
运用burp结构数据报文如下:
默许在目的/ runtime/session文件夹下生成如下文件
写入的文件内容
拼接URL地址:
交换payload获取webshell
获取webshell
破绽修复
目前官网曾经更新了thinkphp6.0.2版本,修复了该破绽,倡议尽快晋级最新版本。
感谢您的来访,获取更多精彩文章请收藏本站。
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。