shiro反序列化漏洞原理分析

admin 2025年6月23日22:41:49评论10 views字数 1059阅读3分31秒阅读模式

前言:

本文不包含CB链分析,只是单纯的漏洞序列化和反序列化的超详细分析。

漏洞分析:

序列化过程:

1.调用convertPrincipalsToBytes方法并传递数组类型的实例accountPrincipals

shiro反序列化漏洞原理分析

2.调用serialize实现方法进行序列化

shiro反序列化漏洞原理分析
shiro反序列化漏洞原理分析
shiro反序列化漏洞原理分析

3.调用encrypt方法传递实例对象并进行AES加密

shiro反序列化漏洞原理分析

4.调用get方法获取key

shiro反序列化漏洞原理分析

5.Get方法返回encryptionCipherKey

shiro反序列化漏洞原理分析

6.encryptionCipherKey通过set方法初始化成员变量

shiro反序列化漏洞原理分析

7.获取默认key传递给setEncryptionCipherKey再赋值给成员方法,最后由get方法返回key

shiro反序列化漏洞原理分析
shiro反序列化漏洞原理分析
shiro反序列化漏洞原理分析
shiro反序列化漏洞原理分析

8.调用子类中的rememberSerializedIdentit获取EAS加密后的数据

shiro反序列化漏洞原理分析

9.最后进行base64编码

shiro反序列化漏洞原理分析

反序列化过程:

1. getRememberedPrincipals调用getRememberedSerializedIdentity传递SubjectContext实例

shiro反序列化漏洞原理分析

2.getRememberedSerializedIdentity调用decode方法进行base64解码返回decode

shiro反序列化漏洞原理分析

3.返回一个byte[]类型实例

shiro反序列化漏洞原理分析

4.调用convertBytesToPrincipals方法传递bytes

shiro反序列化漏洞原理分析

5.convertBytesToPrincipals先调用decrypt方法传递bytes

shiro反序列化漏洞原理分析

6.通过decrypt方法进行AES解密

shiro反序列化漏洞原理分析

7.获取key

shiro反序列化漏洞原理分析
shiro反序列化漏洞原理分析

8.convertBytesToPrincipals调用deserialize方法传递bytes

shiro反序列化漏洞原理分析

9.最后调用readObject方法进行反序列化

shiro反序列化漏洞原理分析

结论:

1.根本原因是AES加密的过程中使用了默认的密钥

2.序列化过程为:序列化 ->  AES加密 -> Base64解密

3.反序列化过程为:Base64解密 ->  AES解密 -> 反序列化

漏洞利用:

URLDNS链:

  1. urldns链测试漏洞是否存在shiro反序列化漏洞原理分析
  2. 断点调试之后可以看到在此处进行反序列化调用readObject方法实际上是调用hashmap里边的readObject发起dns请求
  3. -84 -19 0 5 → 十六进制为AC ED 00 05,这是Java序列化流的魔数标识
  4. 106 97 118 97 46 117 116 105 108 46 72 97 115 104 77 97 112 → "java.util.HashMapshiro反序列化漏洞原理分析5.利用成功:shiro反序列化漏洞原理分析
转自:https://www.freebuf.com/articles/vuls/435798.html

原文始发于微信公众号(船山信安):shiro反序列化漏洞原理分析

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年6月23日22:41:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   shiro反序列化漏洞原理分析https://cn-sec.com/archives/4193114.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息