shiro反序列化漏洞的初级理解

本文深入探讨了Apache Shiro框架的rememberMe功能及其潜在的安全风险。当Shiro版本低于1.2.4时,由于AES加密key的硬编码以及使用readObject方法进行反序列化,攻击者可能利用此漏洞构造恶意数据,执行任意命令。漏洞利用过程包括获取AES key、序列化恶意数据、AES加密和Base64编码,最后伪造cookie来触发命令执行。判断网站是否使用Shiro的方法是检查响应头中的rememberMe=deleteMe字段。

shiro反序列化原理

rememberMe功能:
shiro框架提供了rememberMe功能,这个功能大概是用户登录成功后会生成一个凭证组,shiro将它经过序列化->AES加密->Base64加密得到一串数据流传回给cookie,下次登录时,shiro通过Base64解码->AES解密->反序列化验证cookie中的rememberMe包含的凭证组是否正确,从而实现“下次登录记住我”的功能。

漏洞原理:
造成shiro反序列化漏洞的关键点,一个是Shiro<1.2.4中,AES-CBC加解密时key默认为硬编码,只要能获取到这个key就可以构造恶意数据让shiro识别为正常数据;另一个点是shiro在验证rememberMe时使用了readObject方法,readObject用来执行反序列化后需要执行的代码片段,从而造成恶意命令可以被执行。

漏洞利用:

  1. 首先需要获取正确的key值,利用shiro接收错误rememberMe会抛出异常返回Set-Cookie的特性,可以通过爆破,直到响应头中不包含Set-Cookie,说明key成功匹配。
  2. 接着需要对恶意数据进行序列化,shiro序列化对象只有继承PrincipalCollection时,类型转换才正常,不然会抛出异常,这里可以借助ysoserial生成序列化数据:
    利用ysoserial中的JRMP监听模块进行反弹shell,需使用Java Runtime 配合 bash 编码 java -cp
  3. ysoserial-0.0.6-SNAPSHOT-all.jar ysoserial.exploit.JRMPListener 监听端口
    CommonsCollections4 ‘bash编码’ 利用ysoserial生成.ser文件 java -jar
    ysoserial-0.0.6-SNAPSHOT-all.jar CommonsBeanutils1 “命令” > x.ser
  4. 然后进行AES加密、Base64加密,伪造cookie,执行命令

如何判断一个网站是否使用了shiro框架

在请求包中的cookie字段添加rememberMe=xxx,查看响应头中是否包含rememberMe=deleteMe值
例如:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Redredredfish

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

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

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

打赏作者

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

抵扣说明:

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

余额充值