内容提要
本文介绍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导入文件,然后读取二进制数据。