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

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

被折叠的 条评论
为什么被折叠?



