Shiro 权限绕过漏洞复现 CVE-2020-11989
影响范围
- Apache Shiro < 1.5.3
- Spring 框架中只使用 Shiro 鉴权
环境搭建
git clone https://github.com/l3yx/springboot-shiro.git
将项目导入
IDEA
中,本地演示环境为Mac OS
,配置Maven
:/usr/local/Cellar/maven/3.6.3_1/libexec/conf/settings.xml
添加本地镜像:
<mirror>
<id>alimaven</id>
<mirrorOf>central</mirrorOf>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>
<!-- 下面的两个中央仓库都是 maven 软件内置的,服务于整个互联网,由 Maven 团队自己维护,里面存储了非常全的 jar 包,包含了世界上大部分流行的开源项目构件 -->
<!-- 中央仓库 1 -->
<mirror>
<id>repo1</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo1.maven.org/maven2/</url>
</mirror>
<!-- 中央仓库 2 -->
<mirror>
<id>repo2</id>
<mirrorOf>central</mirrorOf>
<name>Human Readable Name for this Mirror.</name>
<url>http://repo2.maven.org/maven2/</url>
</mirror>
- 更改
IDEA
中的Maven home directory
和User settings file
配置:
- 生成
war
包:
- 将打包好的
war
包部署于Tomcat
。该漏洞成功利用存在下面两个条件- 应用不能部署在根目录,也就是需要
context-path
,server.servlet.context-path=/shiro
,如果为根目录则context-path
为空,就会被CVE-2020-1957
的 patch 将 URL 格式化,值得注意的是若 Shiro 版本小于1.5.2
的话那么该条件就不需要。 - Spring 控制器中没有另外的权限校验代码
- 应用不能部署在根目录,也就是需要
漏洞环境的权限配置如下,其中 /admin
下的路由需要登录才能访问:
@Bean
ShiroFilterFactoryBean shiroFilterFactoryBean(){
ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
bean.setSecurityManager(securityManager());
bean.setLoginUrl("/login");
bean.setSuccessUrl("/index");
bean.setUnauthorizedUrl("/unauthorizedurl");
Map<String, String> map = new LinkedHashMap<>();
map.put("/doLogin", "anon");
map.put("/admin/*", "authc");
bean.setFilterChainDefinitionMap(map);
return bean;
}
---
@GetMapping("/admin/page")
public String admin() {
return "admin page";
}
漏洞复现
如果直接访问 /shiro/admin/page
,会返回 302
跳转要求登录
直接访问 /;/test/admin/page
, 就能直接绕过 Shiro 权限验证,访问到 /admin
路由中的信息
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论