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 1.2.4版本之前的反序列化漏洞主要源于内置的固定加密Key。这使得攻击者能够伪造rememberMe Cookie,进而利用反序列化漏洞进行攻击。了解这一成因有助于开发者在设计系统时避免类似的安全隐患。

环境搭建的重要性

在进行漏洞测试时,确保环境中使用的依赖版本与POC一致至关重要。不同版本的commons-beanutils或commons-collections可能导致POC无法正常工作,因此在测试前需仔细检查依赖版本。

攻击链的构建

利用Shiro中的commons-collections依赖构造payload时,需注意攻击链的设计。通过优先队列和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等。

🏷️

标签

➡️

继续阅读