Shiro反序列化漏洞综合

本文揭示了Apache Shiro框架中的RememberMe功能所面临的AES密钥泄露风险,详细介绍了攻击原理、影响范围、验证手法,以及如何通过shiro-exploit工具进行版本检测和密钥爆破。重点讨论了固定密钥带来的安全隐患和不同版本的加密模式变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原因:Apache Shiro框架提供了记住我的功能(RememberMe),用户登陆成功后会生成经过加密并编码的cookie,在服务端接收cookie值后,Base64解码–>AES解密–>反序列化。攻击者只要找到AES加密的密钥,就可以构造一个恶意对象,对其进行序列化–>AES加密–>Base64编码,然后将其作为cookie的rememberMe字段发送,Shiro将rememberMe进行解密并且反序列化,最终造成反序列化漏洞。
在这里插入图片描述

影响范围:Shiro框架
验证手法:
验证是否存在shiro框架
1.返回包中存在 rememberMe=deleteMe
2.请求中cookie中加入 rememberMe=deleteMe 返回rememberMe=deleteMe
在这里插入图片描述
在这里插入图片描述

在反序列化时,不会对其进行过滤,所以如果传入恶意代码将会造成安全问题
在 1.2.4 版本前,是默认ASE秘钥,Key: kPH+bIxk5D2deZiIxcaaaA==,可以直接反序列化执行恶意代码
而在1.2.4之后,ASE秘钥就不为默认了,需要获取到Key才可以进行渗透

key获取方法:shiro高版本要求开发者自己设置,如果开发者没有设置,则默认动态生成,降低了固定密钥泄漏的风险。
但有可能存在代码复用的可能,可以在github上搜索"securityManager.setRememberMeManager(rememberMeManager); Base64.decode(“或"setCipherKey(Base64.decode(”)
在这里插入图片描述
Guns框架内部集成了shiro并进行二次开发,作者自定义密钥并固定,此时用户若不对密钥进行再次修改,即使升级shiro版本,也依旧存在固定密钥的风险。

脚本跑(shiro-exploit )
旧版本(1.2.4之前)使用AES-CBC加密模式,新版是使用AES-GCM加密模式。
shiro-exploit
-v CBC加密版本 Version 为1 ,GCM加密版本 Version 为2
-u 参数可将payload发送至指定url,如不指定url将输出base64编码后的payload用于手工利用
-k 参数可指定shiro加密所用的key,如不指定将使用默认key kPH+bIxk5D2deZiIxcaaaA== 可修改文件头部的key来更换默认key
python shiro-exploit.py check -u http://10.xxx.xxx.72 脚本爆破key
在这里插入图片描述
shiro-exploit
内置6条tomcat回显链,
[CommonsCollectionsK1/CommonsCollectionsK2/CommonsBeanutils1/CommonsBeanutils2/Jdk7u21/Jdk8u20]

python3 shiro-exploit.py echo -g CommonsCollectionsK1 ##不指定,默认为whoami
python3 shiro-exploit.py echo -g CommonsCollectionsK1 -c ipconfig
在这里插入图片描述
Shiro反序列化注入内存马
通过TemplatesImpl去加载恶意类,然后把动态注册Filter的代码写在反序列化的类的static方法中。
不同利用链有不同的内存马,不同点利用不同方式获取到standardContext
详情请看p牛的项目(https://github.com/phith0n/JavaThings。) CommonsBeanutils1Shiro内存马
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FODKING

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

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

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

打赏作者

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

抵扣说明:

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

余额充值