「技术分享」Shiro 权限绕过的历史线(下)

本文深入分析了Apache Shiro的多个权限绕过漏洞,包括CVE-2020-13933、CVE-2020-17510和CVE-2020-17523,详细阐述了漏洞成因、配置、演示和修复方案。漏洞主要源于URL解码差异和路径匹配算法的问题,导致权限校验失效。修复措施涉及URL特殊字符处理和匹配算法优化,确保了安全性。

0×5 CVE-2020-13933

0x5.1 漏洞简介

影响版本: shiro<1.6.0

类型: 权限绕过

其他信息:

这个洞跟CVE-2020-11989有点相似的地方就是就是利用URL解码的差异性来实现绕过。

CVE-2020-13933:Apache Shiro 权限绕过漏洞分析

0x5.2 漏洞配置

这个洞是不会受到Spring的版本限制的。

<dependency>

            <groupId>org.apache.shiro</groupId>

            <artifactId>shiro-web</artifactId>

            <version>1.5.3</version>

        </dependency>

        <dependency>

            <groupId>org.apache.shiro</groupId>

            <artifactId>shiro-spring</artifactId>

            <version>1.5.3</version>

        </dependency>

Shiro配置,这个洞也是有限制的只能是ant的风格为单*号才可以:

map.put("/hello/*", "authc");


    @ResponseBody
    @RequestMapping(value="/hello" +
            "" +
            "/{index}", method= RequestMethod.GET)
    public  String hello1(@PathVariable String index){
        return "Hello World"+ index.toString() + "!";
    }

0x5.3 漏洞演示

 

 

访问302,然后poc:

/hello/%3bluanxie

 

看到这个POC的时候,我当时就觉得我前面分析两个洞的时候,是不是漏了什么关键点没去分析。

然后最让我头疼的的是,为什么需要对;要编码才能利用成功,下面我们通过分析来复盘我们前两次学习过程出现的问题。

0x5.4 漏洞分析

断点依然是在上一次的修补点:

org.apache.shiro.web.util.WebUtils#getPathWithinApplication

 

这里我们逐步跟进去,上一次我没跟removeSemicolon, 因为从函数名这个其实就是Shiro一直以来的操作,就是去除;号后面的内容,然后normalize,这个并没有很大问题。

然后函数返回的结果是这个:

 

本来应该获取到uri的是/hello/,然后因为最早的那个shiro-682的洞,所以会执行去掉末尾的斜杆。

if (requestURI != null && !"/".equals(requestURI) && requestURI.endsWith("/")) {

                requestURI = requestURI.substring(0, requestURI.length() - 1);

            }

变成了:/h

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI小模型

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值