Java反序列化:Shiro-550反序列化漏洞深入剖析
💡
原文中文,约27300字,阅读约需65分钟。
📝
内容提要
Shiro 1.2.4版本之前存在反序列化漏洞,攻击者可利用固定加密Key伪造rememberMe Cookie,通过构造恶意序列化对象并利用commons-collections依赖进行攻击。
🎯
关键要点
- Shiro 1.2.4版本之前存在反序列化漏洞,攻击者可伪造rememberMe Cookie。
- 漏洞成因是内置了一个默认且固定的加密Key,导致攻击者可以伪造任意的rememberMe Cookie。
- Shiro支持将持久化信息序列化并加密后保存在Cookie中。
- 攻击者可以通过构造恶意序列化对象并利用commons-collections依赖进行攻击。
- 环境搭建需要特定版本的jdk、Tomcat和相关依赖。
- Shiro认证流程中,生成Cookie时使用了固定的加密key,导致反序列化漏洞。
- 攻击者可以通过发送恶意Cookie来触发反序列化漏洞。
- 利用Shiro Web中的commons-collections依赖构造payload进行攻击。
- 成功弹计算机的攻击可以通过引入commons-beautils包实现。
- POC的编写需要注意与环境中依赖版本的一致性。
- 最终POC实现了通过优先队列和BeanComparator的组合来触发反序列化漏洞。
❓
延伸问答
Shiro反序列化漏洞的成因是什么?
Shiro反序列化漏洞的成因是内置了一个默认且固定的加密Key,导致攻击者可以伪造任意的rememberMe Cookie。
如何利用Shiro的反序列化漏洞进行攻击?
攻击者可以通过构造恶意序列化对象并利用commons-collections依赖,发送伪造的rememberMe Cookie来触发反序列化漏洞。
Shiro 1.2.4版本之前的rememberMe Cookie是如何生成的?
在Shiro 1.2.4版本之前,rememberMe Cookie的生成使用了固定的加密key,对持久化信息进行序列化和加密后保存到Cookie中。
POC编写时需要注意哪些环境依赖?
POC编写时需要注意与环境中依赖版本的一致性,特别是commons-collections和commons-beanutils的版本。
Shiro反序列化漏洞的影响是什么?
Shiro反序列化漏洞可能导致攻击者伪造用户身份,获取未授权的访问权限,甚至执行任意代码。
如何搭建测试环境以复现Shiro反序列化漏洞?
搭建测试环境需要特定版本的jdk、Tomcat和相关依赖,如commons-collections和shiro-web等。
➡️