shiro反序列化漏洞简述

在一些面试以及攻防对抗中,总会碰到shiro反序列化的命令执行,于是给大家简单的科普一下。

Apache Shiro是一款开源企业常见JAVA安全框架,此框架提供了RememberMe的功能,这是很多网站都具备的,例如你登录了一个网站,关掉浏览器再次打开网站时,网站会保留你的登录信息情况。

首先,shiro处理cookie的流程是先得到rememberMe的cookie值,然后Base64解码,AES加密,最后反序列化。但是AES的密钥是硬编码的,攻击者可以通过构造payload造成反序列化的命令执行。

硬编码:硬编码是将数据直接嵌入到程序或其他可执行对象的源代码中的软件开发实践,与从外部获取数据或在运行时生成数据不同。 硬编码数据通常只能通过编辑源代码和重新编译可执行文件来修改,尽管可以使用调试器或十六进制编辑器在内存或磁盘上进行更改。

shiro反序列化的影响范围是1.2.4及以下版本,同时特征十分明显,使用burp抓包后响应包中会有一条set-cookie

Set-Cookie:rememberMe=deleteMe;

看到这行语句后直接扔到ShiroScan里跑一下

下载地址:https://github.com/sv3nbeast/ShiroScan

结合dnslog.cn即可确定是否存在shiro反序列化漏洞

漏洞修复建议:此处参考https://blog.csdn.net/weixin_44578334/article/details/105821240

先说结论:无论是否升级shiro到1.2.5及以上,如果shiro的rememberMe功能的AES密钥一旦泄露,就会导致反序列化漏洞。
升级shiro到1.2.5及以上如果在配置里配置了密钥,那么请一定不要使用网上的密钥,一定不要!!请自己base64一个AES的密钥,或者利用官方提供的方法生成
总结
标准的AES的加解密只跟私钥key和加密模式有关,和IV无关。
为了证明反序列化漏洞确实存在,可以利用ysoserial的URLDNS gadget进行验证,但是默认会有TTL缓存机制,默认10s。
反序列化导致的命令执行需要两个点:
readObject()反序列化的内容可控。
应用引用的jar包中存在可命令执行的Gadget Chain。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值