CVE-2020-1957-Apache Shiro认证绕过漏洞

admin 2025年3月15日01:24:27评论14 views字数 957阅读3分11秒阅读模式

1.漏洞原理

在Apache Shiro 1.5.2以前的版本中,在使用Spring动态控制器时,攻击者通过构造”..;”这样的跳转,可以绕过Shiro中对目录的权限限制。

我们需要分析我们请求的URL在整个项目的传入传递过程。在使用了shiro的项目中,是我们请求的URL(URL1),进过shiro权限检验(URL2), 最后到springboot项目找到路由来处理(URL3)。

漏洞的出现就在URL1,URL2和URL3有可能不是同一个URL,这就导致我们能绕过shiro的校验,直接访问后端需要首选的URL。本例中的漏洞就是因为这个原因产生的。

以http://localhost:8080/xxxx/..;/admin/index为例,一步步分析整个流程中的请求过程。

CVE-2020-1957-Apache Shiro认证绕过漏洞

CVE-2020-1957-Apache Shiro认证绕过漏洞

此时的URL还是我们传入的原始URL:/xxxx/..;/admin/index

接着,程序会进入到decodeAndCleanUriString(),得到:

CVE-2020-1957-Apache Shiro认证绕过漏洞

decodeAndCleanUriString以“;”截断后面的请求,所以此时返回的就是/xxxx/...然后程序调用normalize()对decodeAndCleanUriString()处理得到的路径进行标准化处理。标准话的处理包括:

替换反斜线

替换 // 为 /

替换 /./ 为 /

替换 /../ 为 /

都是一些很常见的标准化方法。

经过getPathWithinApplication()函数的处理,最终shiro 需要校验的URL就是/xxxx/..,最终会进入到org.apache.shiro.web.filter.mgt.PathMatchingFilterChainResolver中的 getChain()方法会URL校验。关键的校验方法如下:

CVE-2020-1957-Apache Shiro认证绕过漏洞

由于/xxxx/..并不会匹配到/admin/**,所以shiro权限校验就会通过。

2.漏洞复现

CVE-2020-1957-Apache Shiro认证绕过漏洞

开启靶场

CVE-2020-1957-Apache Shiro认证绕过漏洞

进入靶场web界面,发现登录功能点。

CVE-2020-1957-Apache Shiro认证绕过漏洞

根据漏洞原理,使用kali中的ffuf对url进行模糊测试

CVE-2020-1957-Apache Shiro认证绕过漏洞

修改接口为admin,响应为302

CVE-2020-1957-Apache Shiro认证绕过漏洞

根据vulhub漏洞文档对请求包进行构造,发包后获取响应

CVE-2020-1957-Apache Shiro认证绕过漏洞

打开浏览器中,由Logout按钮可见当前是已登录状态,成功进入后台。

原文始发于微信公众号(智检安全):CVE-2020-1957-Apache Shiro认证绕过漏洞

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月15日01:24:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CVE-2020-1957-Apache Shiro认证绕过漏洞https://cn-sec.com/archives/3839428.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息