ThinkPHP6 任意文件操作漏洞分析
发布时间 - 2020-01-20 00:00:00 点击率:次漏洞介绍
2025年1月10日,ThinkPHP团队发布一个补丁更新,修复了一处由不安全的SessionId导致的任意文件操作漏洞。该漏洞允许攻击者在目标环境启用session的条件下创建任意文件以及删除任意文件,在特定情况下还可以getshell。
具体受影响版本为ThinkPHP6.0.0-6.0.1。
漏洞复现
本地环境采用ThinkPHP 6.0.1+PHP7.1.20+Apache进行复现。在特定情况下执行测试验证程序即可写入一个webshell,如下图:
漏洞分析
根据官方github的commit:
https://github.com/topthink/framework/commit/1bbe75019ce6c8e0101a6ef73706217e406439f2
因而推测,可能是在存储session时导致的文件写入。然后,跟踪:vendor/topthink/framework/src/think/session/Store.php:254。
这里调用了一个write函数,跟进一下:vendor/topthink/framework/src/think/session/driver/File.php:210。
调用writeFile函数,跟入:
果然是写入文件的操作。
继续反向看一下文件名是否可控,该文件名来自于最开始的getId()得到的$sessionId的值。既然有getId,就会有setId,看一下函数内容:
当传入的参数$id满足32位的长度时,就将该值设为$this->id。看一下调用setId的地方:vendor/topthink/framework/src/think/middleware/SessionInit.php:46。
这里的$cookieName的值是PHPSESSID。
而$sessionId是cookie中名为PHPSESSID的值,因此是攻击者可控的,从而导致写入的文件名可控。
写入的文件名可控,那么写入的内容是否可控呢?分析发现,写入的内容就是创建session使用的内容。但是session的创建是由实际的后端业务逻辑来决定的,而默认环境下并没有创建session。因此,默认环境下无法做到任意文件写入。
在对该漏洞的深入分析过程中,我们发现该漏洞还可
以实现任意文件删除,且文件删除对后端业务逻辑依赖较低。
还是在vendor/topthink/framework/src/think/session/Store.php:254中:
通过分析验证,我们发现漏洞(如上图)还能导致任意文件删除。
总结
在目标环境为Windows且开启session的情况下,容易遭受任意文件删除攻击。
在目标环境开启session且写入的session可控的情况下,容易遭受任意文件写入攻击。
建议相关用户及时升级到ThinkPHP6.0.2版本,以免遭受攻击。
,大量的免费thinkphp入门教程,欢迎在线学习!
# php
# thinkphp
# Cookie
# Session
# this
# github
# windows
# apache
# 看一下
# 是在
# 后端
# 情况下
# 还可以
# 还能
# 是由
# 设为
# 发现该
# 在特定情况下
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Python高阶函数应用_函数作为参数说明【指导】
JavaScript如何操作视频_媒体API怎么控制播放
如何在云主机快速搭建网站站点?
安克发布新款氮化镓充电宝:体积缩小 30%,支持 200W 输出
php485函数参数是什么意思_php485各参数详细说明【介绍】
Laravel如何处理跨站请求伪造(CSRF)保护_Laravel表单安全机制与令牌校验
Laravel如何处理CORS跨域请求?(配置示例)
如何用PHP工具快速搭建高效网站?
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
jQuery中的100个技巧汇总
历史网站制作软件,华为如何找回被删除的网站?
手机软键盘弹出时影响布局的解决方法
如何打造高效商业网站?建站目的决定转化率
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
Laravel怎么实现支付功能_Laravel集成支付宝微信支付
JS经典正则表达式笔试题汇总
Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南
如何获取上海专业网站定制建站电话?
INTERNET浏览器怎样恢复关闭标签页_INTERNET浏览器标签恢复快捷键与方法【指南】
如何用wdcp快速搭建高效网站?
详解Android中Activity的四大启动模式实验简述
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
郑州企业网站制作公司,郑州招聘网站有哪些?
laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
微信小程序 闭包写法详细介绍
Bootstrap CSS布局之列表
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
Laravel如何使用Service Container和依赖注入?(代码示例)
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
Internet Explorer官网直接进入 IE浏览器在线体验版网址
如何在万网开始建站?分步指南解析
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
详解jQuery中基本的动画方法
laravel怎么使用数据库工厂(Factory)生成带有关联模型的数据_laravel Factory生成关联数据方法
如何在万网自助建站平台快速创建网站?
Laravel如何设置定时任务(Cron Job)_Laravel调度器与任务计划配置
Laravel如何为API生成Swagger或OpenAPI文档
java ZXing生成二维码及条码实例分享
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
Laravel怎么使用Intervention Image库处理图片上传和缩放
如何在Windows 2008云服务器安全搭建网站?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?

