shiro权限绕过漏洞分析-CVE_2020_1957/CVE-2020-13933

前情提要:

说起shiro来,在攻防中最常见的就是两种漏洞,一种就是固定密钥爆破导致shiro反序列化漏洞rce,另一种就是shiro的权限绕过漏洞,通过构造特定的url链接来导致未授权访问

漏洞成因:

shiro和spring对同一个url的不同解析方式导致了漏洞的产生

Shiro的URL路径表达式为Ant格式,路径通配符*表示匹配零个或多个字符串,/*可以匹配/hello,但是匹配不到/hello/,因为*通配符无法匹配路径。假设/hello接口设置了authc拦截器,访问/hello会进行权限判断,但如果访问的是/hello/,那么将无法正确匹配URL,直接放行,进入到spring拦截器。spring中的/hello和/hello/形式的URL访问的资源是一样的,从而实现了权限绕过。

漏洞复现:

咱们这里就拿vulfocus直接搭建环境复现就好

cve_2020_1957

shiro1.4.2版本绕过权限

我们访问/hello/1.发现会跳转到登陆页面

image

但是当我们访问/hello/1/的时候,去发现可以直接访问

image

漏洞分析

主要原因就是在这个函数里shiro.util.AntPathMatcher#doMatch

image

当Shiro 的Ant格式的pathPattern 中的的*通配符是不支持匹配路径的,所以/hello/* 不能成功匹配/hello/1/ ,也就不会触发authc拦截器进行权限拦截。从而成功绕过了Shiro拦截器,而后再进入到spring拦截器中,/hello/1/与/hello/1能获取到相同的资源。

Shiro≤1.5.1版本绕过

xxxx/..;/hello/1,成功绕过

或者/fdsf;/../hello/1都可以

image

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

漏洞分析:

可以定位到getChain函数

image

从代码中我们可以看到getPathWithinApplication(request)获取的requestURI为/fdsf ,而不是/fdsf;/../hello/1,从而导致后面的URI路径模式匹配返回False,从而再次绕过了shiro拦截器

如果URI中存在;号的话,则会删除其后面的所有字符。/fdsf;/../hello/1/最终也就变成了/fdsf

漏洞修复

shiro1.4.2版本出现漏洞后为删除requestURI后面的/号进行URL路径匹配,算是简单的修复了添加/号绕过的方式,而后在1.5.2版本中通过requestURI自主拼接的方式修复了/fdsf;/../hello/1/等使用了;号方式的绕过

CVE-2020-13933

访问/admin就会跳转,但是使用上面的方法都已经失效了

payload:

http://xxxxx/admin/%3b
注意这里必须要url编码;,不然是没法绕过的

image

  1. 客户端请求URL:/admin/;
  2. Shrio 内部处理得到校验URL为/admin/,校验通过
  3. SpringBoot最终请求 /admin/;, 成功访问了后台请求

 

posted @ 2025-07-25 14:37  Zephyr07  阅读(44)  评论(0)    收藏  举报