概述

概述

💡 原文中文,约7200字,阅读约需18分钟。
📝

内容提要

本文介绍Apache Shiro反序列化漏洞(Shiro-550与Shiro-721)的原理与利用。Shiro-550通过已知密钥碰撞触发,Shiro-721需登录后爆破key。攻击流程为生成恶意Payload,经AES加密、Base64编码后放入rememberMe cookie,服务器解密并反序列化执行命令。文章还涵盖环境搭建、密钥爆破方法、工具推荐及踩坑记录。

🔎

延伸解读

漏洞利用条件对比

Shiro-550与Shiro-721的利用条件差异明显。Shiro-550只需已知密钥即可触发,门槛较低;而Shiro-721需先登录获取rememberMe值,再通过Padding Oracle Attack爆破密钥,条件苛刻,实用性受限。理解这一区别有助于评估不同场景下的风险等级。

加密模式变化的影响

Apache Shiro 1.4.2版本起默认加密模式由AES/CBC改为AES/GCM,这直接影响漏洞利用方式。GCM模式引入认证标签,可能增加Padding Oracle攻击的难度,但工具如shiro_attack已支持GCM爆破。升级版本虽不能完全消除风险,但可提高攻击门槛。

密钥爆破的检测思路

文章提到的检测方法利用SimplePrincipalCollection序列化数据,通过对比正确与错误密钥加密后发送请求的响应差异来判断密钥。这种方法无需依赖特定漏洞利用链,可快速验证目标是否使用默认密钥,为安全测试提供了一种高效的前期探测手段。

编码问题与工具选择

在Windows环境下,cmd编码差异可能导致payload读取错误,建议将payload写入文件再读取二进制数据。此外,推荐使用shiro_attack和BurpShiroPassiveScan等工具,它们支持多种加密方式和回显,能提升利用效率。注意工具维护状态,确保兼容性。

Q&A

Shiro-550和Shiro-721漏洞有什么区别?

Shiro-550影响Apache Shiro < 1.2.5,利用已知密钥碰撞触发;Shiro-721影响Apache Shiro < 1.4.2,需要登录后通过爆破rememberMe值获取正确key。Shiro-550条件较低,Shiro-721需要登录,条件较高。

Shiro反序列化漏洞的攻击流程是怎样的?

攻击流程为:生成恶意Payload,使用AES加密,Base64编码,放入rememberMe cookie发送给服务器;服务器Base64解码,AES解密,然后反序列化执行命令。

Shiro-550漏洞如何利用已知密钥进行检测?

利用SimplePrincipalCollection序列化数据,使用候选密钥加密生成rememberMe cookie,发送请求,根据响应中是否包含rememberMe=deleteMe判断密钥是否正确。

Shiro-721漏洞的利用条件是什么?

Shiro-721需要先登录系统,获取登录后服务器生成的rememberMe值,然后通过Padding Oracle Attack爆破出正确的key,再进行反序列化攻击。

Apache Shiro不同版本默认使用的加密模式是什么?

Apache Shiro < 1.4.2默认使用AES/CBC/PKCS5Padding模式,Apache Shiro >= 1.4.2默认使用AES/GCM/PKCS5Padding模式。

有哪些推荐的Shiro漏洞利用工具?

推荐shiro_attack(JavaFX UI,支持Tomcat和Spring Boot回显,支持CBC/GCM爆破)和BurpShiroPassiveScan(Burp插件,被动扫描,自动识别Shiro框架,支持CBC/GCM)。

在Shiro漏洞利用过程中,Windows编码问题会导致什么错误?如何解决?

Windows cmd默认编码为GBK,可能导致读取的序列化数据出现乱码(如aced0005变成efbfbdefbfbd),无法反序列化。解决办法是将生成的payload导入文件,然后读取二进制数据。

🏷️

标签

➡️

继续阅读