shiro反序列化漏洞原理分析以及漏洞复现
字数 1834 2025-08-10 08:28:00
Apache Shiro反序列化漏洞深度分析与复现指南
一、漏洞概述
1.1 Shiro框架简介
Apache Shiro是一个强大易用的Java安全框架,提供认证、授权、加密和会话管理等功能。在身份验证过程中,Shiro提供了"Remember Me"功能,允许用户在关闭浏览器后仍保持登录状态。
1.2 漏洞分类
Shiro反序列化漏洞主要分为两类:
- Shiro-550 (CVE-2016-4437):硬编码密钥导致的漏洞
- Shiro-721 (CVE-2019-12422):Padding Oracle攻击漏洞
二、Shiro-550漏洞分析
2.1 漏洞原理
- 根本原因:Shiro <=1.2.4版本中AES加密使用的密钥硬编码在源码中
- 攻击流程:
- 攻击者构造恶意对象并序列化
- 使用已知密钥进行AES加密
- Base64编码后作为rememberMe cookie发送
- 服务器解码、解密并反序列化,执行恶意代码
2.2 漏洞特征
- Cookie中含有rememberMe字段
- 返回包中包含rememberMe=deleteMe字样
2.3 加密流程分析
- 用户登录并勾选"Remember Me"
- Shiro验证通过后序列化用户身份
- 序列化内容进行AES加密
- Base64编码后放入cookie的rememberMe字段
2.4 解密流程分析
- 服务端从cookie获取rememberMe字段
- Base64解码
- AES解密
- 反序列化获取用户身份
三、Shiro-721漏洞分析
3.1 与Shiro-550的区别
| 特性 | Shiro-550 | Shiro-721 |
|---|---|---|
| 密钥 | 硬编码已知 | 随机生成 |
| 前提 | 无需登录 | 需要有效用户凭证 |
| 攻击方式 | 直接利用 | Padding Oracle攻击 |
3.2 漏洞原理
- 使用AES-128-CBC模式加密rememberMe字段
- 通过Padding Oracle Attack构造恶意rememberMe
- 利用有效的RememberMe cookie作为攻击前缀
3.3 攻击流程
- 登录网站获取合法RememberMe cookie
- 使用该cookie作为Padding Oracle Attack前缀
- 加密序列化payload构造恶意RememberMe
- 发送新cookie执行反序列化攻击
3.4 Padding Oracle Attack原理
- 利用加密算法填充错误的响应信息
- 无需知道加密密钥即可解密或加密数据
- 通过不同填充方式的响应时间推断密钥信息
四、漏洞复现指南
4.1 Shiro-550复现(CVE-2016-4437)
环境准备
- 操作系统:Kali Linux
- 靶场环境:vulhub/shiro/CVE-2016-4437
复现步骤
- 访问目标URL并抓包
- 检查返回包中是否存在rememberMe=deleteMe
- 使用工具检测确认:
- 输入目标URL
- 根据关键字爆破密钥
- 爆破利用链及回显方式
- 命令执行:
whoami - 反弹shell:
- 设置监听端口
- Windows:
nc -lvp 4444 - Linux:
nc -lvvp 4444 - 使用工具生成反弹shell payload
工具推荐
- ShiroExploit
- ysoserial (使用JRMP监听模块反弹shell)
4.2 Shiro-721复现(CVE-2019-12422)
环境搭建
git clone https://github.com/3ndz/Shiro-721.git
cd Shiro-721/Docker
docker build -t shiro-721 .
docker run -p 8080:8080 -d shiro-721
复现步骤
- 访问目标URL
- 使用正确账号密码登录(勾选Remember Me)
- 抓包获取合法Cookie中的rememberMe值
- 将值复制到工具中
- 选择Shiro721攻击模式
- 输入目标URL和rememberMe值
- 等待攻击完成
- 执行系统命令
五、修复建议
5.1 Shiro-550修复方案
- 升级Shiro到1.2.4以上版本
- 不使用默认加密密钥,改为随机生成
- 定期更换加密密钥
5.2 Shiro-721修复方案
- 升级到最新安全版本
- 使用安全的加密算法和密钥管理策略
- 禁用不安全的加密模式
六、总结
Shiro反序列化漏洞由于利用简单、危害大,成为Java Web应用的重要安全隐患。理解其原理和复现方法有助于更好地防御此类攻击。管理员应及时更新Shiro版本,开发者应避免使用不安全的安全配置,安全人员可通过复现加深理解漏洞本质。