Shiro-721—漏洞分析(CVE-2019-12422)
本文基于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
Shiro-721—漏洞分析(CVE-2019-12422)的更多相关文章
- 【JavaWeb】CVE-2016-4437 Shiro反序列化漏洞分析及代码审计
Shiro反序列化漏洞分析及代码审计 漏洞简介 Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理. Apache Shiro默认使用了CookieRe ...
- Apache Shiro 反序列化漏洞分析
Shiro550 环境搭建 参考:https://www.cnblogs.com/twosmi1e/p/14279403.html 使用Docker vulhub中的环境 docker cp 将容器内 ...
- Apache Shiro Java反序列化漏洞分析
1. 前言 最近工作上刚好碰到了这个漏洞,当时的漏洞环境是: shiro-core 1.2.4 commons-beanutils 1.9.1 最终利用ysoserial的CommonsBeanuti ...
- Java安全之Shiro 550反序列化漏洞分析
Java安全之Shiro 550反序列化漏洞分析 首发自安全客:Java安全之Shiro 550反序列化漏洞分析 0x00 前言 在近些时间基本都能在一些渗透或者是攻防演练中看到Shiro的身影,也是 ...
- 漏洞分析:CVE 2021-3156
漏洞分析:CVE 2021-3156 漏洞简述 漏洞名称:sudo堆溢出本地提权 漏洞编号:CVE-2021-3156 漏洞类型:堆溢出 漏洞影响:本地提权 利用难度:较高 基础权限:需要普通用户权限 ...
- CVE-2020-17523:Apache Shiro身份认证绕过漏洞分析
0x01 Apache Shiro Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理. 0x02 漏洞简介 2021年2月1日,Apache Shiro官 ...
- Shiro 550反序列化漏洞分析
Shiro 550反序列化漏洞分析 一.漏洞简介 影响版本:Apache Shiro < 1.2.4 特征判断:返回包中包含rememberMe=deleteMe字段. Apache Shiro ...
- Java反序列化漏洞分析
相关学习资料 http://www.freebuf.com/vuls/90840.html https://security.tencent.com/index.php/blog/msg/97 htt ...
- 学习笔记 | java反序列化漏洞分析
java反序列化漏洞是与java相关的漏洞中最常见的一种,也是网络安全工作者关注的重点.在cve中搜索关键字serialized共有174条记录,其中83条与java有关:搜索deserialized ...
- FFmpeg任意文件读取漏洞分析
这次的漏洞实际上与之前曝出的一个 CVE 非常之类似,可以说是旧瓶装新酒,老树开新花. 之前漏洞的一篇分析文章: SSRF 和本地文件泄露(CVE-2016-1897/8)http://static. ...
随机推荐
- oeasy教您玩转vim - 40 - # 复制粘贴
复制粘贴 回忆上节课内容 我们上次的内容是粘贴 小写p意味着在光标下面或者后面粘贴 大写P意味着在光标上面或者前面粘贴 p的意思是放上去,就是put 把什么放上去呢? 把 reg 中 " ...
- Linux中&&、&、|、||等特殊符号
&& 和 & & 表示任务后台执行,与nohup命令功能差不多. # 运行jar包,并且置于后台执行,执行的日志重定向到当前默认的log.txt文件中 [root@lo ...
- SSL/TLS 深入浅出
SSL,https(HTTP over SSL), X.509, SSL 证书 ,证书申请 /导入/签发, 等名词,想必有一定工作经验的小伙伴,一定都会略有耳闻,或者至少也听神边大神念叨过.虽然司空见 ...
- C#/.NET/.NET Core优秀项目和框架2024年7月简报
前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍.功能特点.使用方式以及部分功能截图 ...
- 趣谈n++与++n的differences
前言:今天小白在学习时无意发现一组有趣的孪生兄弟** n++ 与 ++n** 探索:二者不同之处 工具:VS2022 过程: 前者是++n,输出11,12,13,14 后者是n++,输出10,11,1 ...
- 【Java】在树结构中给节点追加数据
一.功能需求 有个树状组件,展示区域层级,每个区域节点需要展示该地区下的统计信息 从来没做过,给我整不会了属实是 二.功能分析 原型有功能和老系统代码,查看源码后发现的结构框架 1.树组件是自己用ul ...
- 【C3】06 选择器概述
CSS中,选择器用来指定网页上我们想要样式化的HTML元素. CSS选择器有很多种可供使用,所以在选择要样式化的元素时,我们可以做到很精细的地步. 本文和本文的子篇中,我们将会很详细地讲授选择器不同的 ...
- Http、Https简介和Session、token的请求流程
Http Http (超文本输出协议) 是一种分布式.协作式和超媒体信息系统的应用层协议,它通常运行在TCP之上,因特网应用最广泛的便是Http协议,所有www都遵循这个标准.主要用于Web 浏览器与 ...
- 再探 游戏 《 2048 》 —— AI方法—— 缘起、缘灭(1) —— Firefox浏览器下自动运行游戏篇
四年前曾经写过一过博客: 对 游戏 < 2048 > 的一些思考 虽然过去几年了,但是这个游戏一直没有搞懂该怎么使用AI算法来进行求解,这里再次对这个问题进行一些探索. ========= ...
- WSL启动nvidia-docker镜像:报错libnvidia-ml.so.1- file exists- unknown
参考: https://blog.csdn.net/xujiamin0022016/article/details/124782913 https://zhuanlan.zhihu.com/p/361 ...