漏洞原理
核心点就是shiro和spring对uri进行配合匹配的时候有缺陷导致的,shiro中很轻易就能绕过,其次spring中对;分号好像情有独钟,被大牛们发现后也就一下子绕过了。
主流payload:/xxx/..;/admin/
具体后台路由不一定是admin,得看情况而定,但是下面的分析都由admin为后台路由进行分析。
源码分析与复现
环境说明:后台路由为admin
下面我用vulhub开启对应的靶场
接着访问uri:/xxx/..;/admin/
xxx是随便填,而最重要的认证绕过的是..;
能够让你走到admin后台,复现成功了。
在该漏洞中,认证过程需要走两个框架,一个是shiro另一个是spring,uri第一个进入的是shiro接着判断完了才交给spring,这个交给spring的时候也出了问题,下面开始讲解过程。
1.shiro中可能会有这样的过滤器对uri进行匹配,分支判断是否需要认证
这里是配置map.put会出现问题,所以是否出现认证绕过还得看匹配的规则写的如何,这不重要,我们约定配置为:/admin/** 然后该规则下需要authc,表示需要进行身份认证,这看起来很正常,admin路由确实要求身份认证。
2.接着我们下面开始分析当请求http://xxx.xxxx.com/xxx/..;/admin在后台是如何走的:
首先经过shiro处理,直接看最重要的部分,shiro对;
分号的处理。
作用:直接匹配59,即;的ascii码值,发现有分号就返回分号前的字段,否则返回整个uri。
那么这里就拿到uri:xxx/..
3.接下去的函数都是规范化,比如//
处理成/
这些就不说了,直接看最后给到拦截器判断的requestURI值为/xx/..
,pathMatches就会根据拦截器判断是否为/admin/**,那么很显然不是,现在就相当于你bypass掉了shiro的认证。
4.shiro认证完了就到spring对uri进行认证了
如何拿到uri的这部分就跳过了,交到spring的uri是完整的,即/xxx/..;/admin/
, 所以说这就是交给spring的时候没有同步好uri的处理结果,那么在spring中主要分析他怎么处理;
的即可
最主要跟进removeSemicolonContentInternal(requestUri)方法,他的作用就是:移除uri中/与/之间的;分号以及;分号后面的内容
根据这句话可以得知最后的uri应该是:/xxx/../admin/ == /admin/
。
../
为回到上一层目录,就到admin了,认证绕过结束,收工。
影响版本
Shiro
SpringBoot 的版本
参考文章:
https://www.freebuf.com/articles/web/362350.html
https://blog.spoock.com/2020/05/09/cve-2020-1957/
https://cn-sec.com/archives/1312489.html
1.本站内容仅供参考,不作为任何法律依据。用户在使用本站内容时,应自行判断其真实性、准确性和完整性,并承担相应风险。
2.本站部分内容来源于互联网,仅用于交流学习研究知识,若侵犯了您的合法权益,请及时邮件或站内私信与本站联系,我们将尽快予以处理。
3.本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
4.根据《计算机软件保护条例》第十七条规定“为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。”您需知晓本站所有内容资源均来源于网络,仅供用户交流学习与研究使用,版权归属原版权方所有,版权争议与本站无关,用户本人下载后不能用作商业或非法用途,需在24个小时之内从您的电脑中彻底删除上述内容,否则后果均由用户承担责任;如果您访问和下载此文件,表示您同意只将此文件用于参考、学习而非其他用途,否则一切后果请您自行承担,如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。
5.本站是非经营性个人站点,所有软件信息均来自网络,所有资源仅供学习参考研究目的,并不贩卖软件,不存在任何商业目的及用途
暂无评论内容