Shiro 权限绕过漏洞复现(CVE-2020-11989)


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

  • 添加本地镜像:

    
      alimaven
      central
      aliyun maven
      http://maven.aliyun.com/nexus/content/repositories/central/
    
    
    
    
      repo1
      central
      Human Readable Name for this Mirror.
      http://repo1.maven.org/maven2/
    
    
    
      repo2
      central
      Human Readable Name for this Mirror.
      http://repo2.maven.org/maven2/
    

  • 更改 IDEA 中的 Maven home directoryUser settings file 配置:

  • 生成 war 包:

  • 将打包好的 war 包部署于 Tomcat 。该漏洞成功利用存在下面两个条件
    • 应用不能部署在根目录,也就是需要 context-pathserver.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 路由中的信息


文章作者: Geekby
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Geekby !
 上一篇
Apache Dubbo Provider反序列化漏洞(CVE-2020-1948) Apache Dubbo Provider反序列化漏洞(CVE-2020-1948)
Apache Dubbo Provider反序列化漏洞(CVE-2020-1948)Apache Dubbo Provider 存在反序列化漏洞,攻击者可以通过 RPC 请求发送无法识别的服务名称或方法名称以及一些恶意参数有效载荷,当恶意参
下一篇 
Flask SSTI 利用方式探索 Flask SSTI 利用方式探索
Flask SSTI 利用方式探索SSTI 简介 & 环境搭建模板一个统一风格的站点,其大多数页面样式都是一致的,只是每个页面显示的内容各不相同。要是所有的逻辑都放在前端进行,无疑会影响响应效果和效率,很不现实。把所有的逻辑放在后端
2020-06-22
  目录