第101篇:一个绕过5层权限校验的0day漏洞的代码审计分析

bb126e565d290483205c9cf723c7bc5f.png

 Part1 前言 

大家好,我是ABC_123。这是我的第101篇原创技术文章,好久没有给大家分享代码审计类的分析了。前一阵子网友发来一个从流量设备中抓到的0day漏洞,不理解其绕过CAS单点登录及Shiro组件的权限校验的原理,我也好奇分析了一下,不禁感叹这位漏洞挖掘者的决心和毅力,各种因素结合完美绕过5层的权限校验。

建议大家把公众号“希潭实验室”设为星标,同时关注我的视频号"希水涵一讲堂"。

f0acb08374e90914836e48eb8fd064e2.jpeg

 Part2 技术研究过程 

这里给出这个POC的权限校验的关键部分,URL及参数都做了模糊化处理,大家可以先思考一下:

POST /file/changeUpload.png

VersionMetadata:clientCategory

Host: xxxxxxx

  • 第1关:URL后缀.png的路由映射问题

这个 POC 我一看就有疑问,.png 这个url能在 SpringMVC 中正常执行java应用吗?首先看一下web.xml配置文件,通过 mvc-dispatchcer 得知,该web应用是SpringMVC 应用。发现该 web 应用未对.png、.gif、.css等静态文件配置默认的 servlet 处理类。

8a2351abe66b0460f3cbd73189360710.png

所以当访问 /file/changeUpload.png 时,这个URL首先会被解析为 /changeUpload,然后是 .png 扩展名。@RequestMapping 注解用来定义控制器应该处理哪些URL,但是如果没有指定请求方法或扩展名,那么这个方法将处理所有以 /changeUpload 开头的 URL,无论它们是否有扩展名。由于.png没有被明确映射到其它servlet,且 /base64FileUpload 部分与根路径/匹配,因此由 mvc-dispatcher 将处理这个请求

  • 第2关:程序本身的权限校验绕过

接下来看下一个权限校验的 filter,这个filter是Web应用程序自己写的,注意看2个 <init-param> 标签定义的值,很明显有可能是白名单url关键字。

40718e659e8c2fef7c64d4aed9423e28.png

跟入相关的 filter 类,查看 doFilter 方法的实现,经过分析,isIgnoreUrl(httpRequest)方法是关键。

67e0fa0af77d9b41c86a83cff8c9b004.png

分析如下代码,在请求头中添加 VersionMetadata:clientCategory 可以使 isIgnoreUrl 条件判断返回true,则上述 fitler 代码会直接跳到 chain.doFilter(request, response); 这段代码,将请求和响应传递到下一个 filter 过滤器。

1a372293eacb4ebb5f19c2f291934a5e.png

  • 第3关:CAS权限校验绕过

接下来看一个filter类,来到了CAS单点登录的权限校验过程,跟进相关filter的类进行分析。

9ae92f4255805cb124f85665f43a54a4.png

经过分析,这一大串 if 条件非常复杂,将其复制出来放到本地idea中调试一下,发现只要http请求头包括 VersionMetadata:clientCategory 的时候,该 if 条件包裹的一堆权限校验代码直接全部跳过。

c6cb611a5962590a7672e4b46bf185e0.png

跳过 if 权限校验语句之后,程序会执行 filterChain.doFilter(request, response); 代码,从而传递请求去下一个filter类进行权限校验,至此就完美绕过了CAS的单点登录校验。

05efcd6f5f5b5af6d769915e5e0d0d09.png

  • 第4关:Shiro组件第一道权限校验

接下来 filterChain.doFilter 会将request对象及 response 对象传递到如下这个Shiro组件的 shiroFilter 过滤器。

8e3bc072a63d1d5ca08b39ae6dd27a51.png

接下来从applicationContext-shiro.xml中找到了shiro组件的关于权限方面的配置文件,里面配置了很多url路由及权限校验的实现类。

5cf03ef2fa58ce60f085144705f3203a.png

e2f4e94be56650bb4638fddfa574e841.png

查看shiro的安全过滤链配置项filterChainDefinitions,发现如下关键代码:/**表示匹配所有url路由,指定了两个自定义的过滤器来处理http请求,用作权限校验,这两个过滤器分别是 LoginAuthFilter、uapStatelessAuthcFilter。

adaad8352215a14bb0f986c751704938.png

首先分析第1个 LoginAuthFilter 过滤器,代码如下:

1ffc12448d5b03657ae81c8b283eb45c.png

经过一系列的 if 条件判断,发现上述EXP的上传数据包都不符合这些 if 条件判断,因而权限判断会走到最后一步,默认返回为true,表示通过了第一个过滤器的权限校验。

8b5788662beb789b7df5a6e65a0c55a2.png

  • 第5关:shiro组件的第2道权限校验

接下来看shiro组件的第二个权限校验过滤器 uapStatelessAuthcFilter,它的实现类是 com.xxx.shiro.filter.StatelessAuthcFilterNC。

6f186e3e22a9902153af80ca4d43fbd1.png

接下来查看这个类的具体实现,主要查看onAccessDenied方法,如果返回true,则表示当前用户被允许访问请求的资源。

9db5429cecb3ba69706d3e77b3aa505d.png

这个类代码特别繁杂,我跟了一晚上也没发现这个exp是怎么通过这个类的权限校验的。在即将放弃的时候,发现了这段代码 super.include(hReq),由于代码很短,我跟了好几次都没仔细看,后来才发现,这里才是权限校验绕过的关键点。这小段代码调用了父类的 include 方法,并传递一个 request 对象。

c8b666a39ad1b8d4647adbcc7ec647f2.png

如下代码通过遍历 this.esc 的方式实现了对 URL 扩展名的校验。

980e53462298c8e47efcba0cc85c3160.png

this.esc内容如下,定义了权限校验的白名单的扩展名:.jpg、.png、.gif、.css、.js、.jpeg,这几个扩展名都是用户登录校验的。跟到这里就非常明显了,/file/changeUpload.png的url请求中的.png符合权限校验的白名单,onAccessDenied返回为true,所以权限校验通过,无需用户名密码登录。至此,作者精心构造的EXP完全绕过5层权限校验。

b1417a84f4860fe72b48319a246a4b88.png

 Part3 总结 

1.  解决.png路由访问的问题:可以在 @RequestMapping 注解中指定请求方法和扩展名,或者在 web.xml 中添加更具体的 servlet-mapping 来处理特定的扩展名。例如,可以添加一个 servlet-mapping 来处理所有 .png 文件。这将确保所有 .png 文件由默认的 servlet 处理,而不是 mvc-dispatcher。

<servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>.png</url-pattern></servlet-mapping>

2.  权限校验方面,对于白名单要慎之又慎。

3.  后续ABC_123会继续给大家分享java代码审计的权限校验方案的安全问题。

402461d63d0dcb7b8f3eadd1fa343219.png

公众号专注于网络安全技术,包括安全咨询、APT事件分析、红队攻防、蓝队分析、渗透测试、代码审计等,99%原创,敬请关注。

Contact me: 0day123abc#gmail.com

(replace # with @)

  • 21
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的校园二手书交易平台,源码+数据库+毕业论文+视频演示 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的校园二手书交易平台实现了图书信息查询。系统用到了关系型数据库中MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让校园二手书交易平台更能从理念走到现实,确确实实的让人们提升信息处理效率。 关键字:信息管理,时效性,安全性,MySql;Spring Boot
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

希潭实验室

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

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

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

打赏作者

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

抵扣说明:

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

余额充值