栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

复现 CVE-2020-1957( Apache Shiro 认证绕过漏洞)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

复现 CVE-2020-1957( Apache Shiro 认证绕过漏洞)

一、漏洞描述

Apache Shiro 1.5.2之前版本中存在安全漏洞。攻击者可借助特制的请求利用该漏洞绕过身份验证。

Shiro框架通过拦截器功能来对用户访问权限进行控制,如anon, authc等拦截器。anon为匿名拦截器,不需要登录即可访问;authc为登录拦截器,需要登录才可以访问。Shiro的URL路径表达式为Ant格式,路径通配符*表示匹配零个或多个字符串,比如:/*可以匹配/hello,但是匹配不到/hello/,因为*通配符无法匹配路径。假设/hello接口设置了authc拦截器,访问/hello会进行权限判断,但如果访问的是/hello/,那么将无法正确匹配URL,直接放行,进入到spring拦截器。spring中的/hello和/hello/形式的URL访问的资源是一样的,从而实现了权限绕过。

知识点补充:

Apache Shiro 是一款开源安全框架,提供身份验证、授权、密码学和会话管理。Shiro框架直观、易用,同时也能提供健壮的安全性。
CVE-2020-1957,Spring Boot中使用 Apache Shiro 进行身份验证、权限控制时,可以精心构造恶意的URL,利用 Apache Shiro 和 Spring Boot 对URL的处理的差异化,可以绕过 Apache Shiro 对 Spring Boot 中的 Servlet 的权限控制,越权并实现未授权访问。


二、环境部署——(本次环境的shiro版本是1.4.2)

在ShiroConfig配置文件中,添加authc拦截器的拦截正则:

@Bean
    ShiroFilterFactoryBean shiroFilterFactoryBean() {
        ShiroFilterFactoryBean bean = new ShiroFilterFactoryBean();
        ...
        ...
        //map.put("/*", "authc");
        map.put("/hello/*", "authc"); 
        bean.setFilterChainDefinitionMap(map);
        return bean;
    }

然后再在路由控制器里面修改:

@GetMapping("/hello/{currentPage}")
    public String hello(@PathVariable Integer currentPage) {
        return "hello";
}

部署好,查看环境:
 


三、漏洞复现——(根据之前部署的环境进制绕过) 

 开始抓包

 访问/hello/1接口,可以看到被authc拦截器拦截了,将会跳转到登录接口进行登录。

进行绕过,访问/hello/1/,成功绕过authc拦截器,获取到了资源。 


四、漏洞分析

Shiro1.4.2版本绕过漏洞分析

漏洞初始成因可以定位到 PathMatchingFilterChainResolver的getChain函数下,该函数作用根据URL路径匹配中配置的url路径表达式来匹配输入的URL,判断是否匹配拦截器,匹配成功将会返回响应的拦截器执行链,让ShiroFither执行权限操作的。其对于URL路径表达式和输入URL的匹配主要通过pathMathches函数进行匹配。

Shiro≤1.5.1版本绕过其他方式绕过:

 

其中以上处理过程:

    客户端请求URL: /xxxx/..;/hello/1shrio 内部处理得到校验URL为 /xxxx/..,校验通过springboot 处理 /xxxx/..;/hello/1 , 最终请求 /hello, 成功访问了后台请求.
 复现成功!

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/708208.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号