【JavaWeb系统代码审计实战】某RBAC管理系统(三)越权,未授权,XSS代码审计

admin 2022年6月7日02:05:50代码审计评论15 views3300字阅读11分0秒阅读模式

前言

本系列为【炼石计划@Java代码审计】知识星球实战50套开源系统删减版,也就是每一套分享部分内容给大家学习。如果觉得写得还不错,并且想要从实践中学习JavaWeb代码审计的朋友,欢迎了解加入【炼石计划@Java代码审计】知识星球,与500位志同道合的朋友共同学习成长。

文末获取配套练习环境


上期回顾


【JavaWeb系统代码审计实战】某RBAC管理系统(一)SpringBoot介绍与项目安装

【JavaWeb系统代码审计实战】某RBAC管理系统(二)信息收集与SQL注入代码审计


进入正题


5.3、越权漏洞挖掘

在渗透测试阶段挖掘漏洞时发现了越权漏洞,我们现在从代码审计角度跟踪一下删除流程。

通过URL路径api/user查看相关Controller,搜索发现为UserController,位于src/main/java/com/codermy/myspringsecurity/plus/admin/controller/UserControlle。进一步查找关于删除用户的的方法,发现在该文件的第115行~123行,通过userId删除用户,如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(三)越权,未授权,XSS代码审计

跟踪一下删除用户逻辑流程。

①、通过上述代码,发现UserController从前端接收userId参数,调用userService.deleteUser(userId)进行删除,此处无任何权限关联。

②、通过userService找到userServiceImpl实现类,位于src/main/java/codermy/myspringsecurity/admin/service/impl/UserServiceImpl。从中找到deleteUser()方法,如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(三)越权,未授权,XSS代码审计

③、从中可以看到,该方法首先使用了checkUserAllowed()方法根据userId校验用户是否允许操作。然后分别调用了roleUserDao.deleteRoleUserByUserId(userId);userJobDao.deleteUserJobByUserId(userId);userDao.deleteUserById(userId);通过userId删除用户,并且通过用户ID删除用户和岗位关联。按住CTRL键左击deleteUserxxx调用的方法,可以跳转到DAO层文件。如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(三)越权,未授权,XSS代码审计

【JavaWeb系统代码审计实战】某RBAC管理系统(三)越权,未授权,XSS代码审计

【JavaWeb系统代码审计实战】某RBAC管理系统(三)越权,未授权,XSS代码审计

跟着删除用户整体流程逻辑走下来,发现userId是从用户侧获取的,也没有将userId与所删除的数据做关联,而且userId也不是从session中获取的,从而导致任意用户都可以调用该接口进行删除。

并且用户ID值极易进行遍历,从而进行批量任意用户删除。


5.4、XSS漏洞挖掘

在开发一个网站项目时,开发人员不可能将所有的参数分别做过滤或转义。最好的办法是统一写个过滤/转义XSS的Filter。

在本项目中全局搜索,没发现XSS相关过滤器(Filter)或拦截器(Interceptor)。初步判断存在XSS漏洞。

对后端简单分析后,初步判断存在XSS漏洞,然后我们对前端进行分析,是否有转义机制。

在了解了整个项目之后,发现前端使用了Thymeleaf模板引擎Layui框架

Thymeleaf中th:text标签进行渲染的时候,默认对特殊字符进行了转义,th:utext不会将字符转义。也就是说使用了th:utext标签会出现XSS漏洞。经过全局搜索,发现只有两处使用了th:text标签。没有地方使用th:utext标签。

其经过分析src/resouces/templates/下的html文件。发现本项目前端还使用了Layui框架

全局搜索Layui关键字,得到layui使用版本为2.5.6

通过翻阅Layui的github中ISSUES发现该版本存在XSS漏洞。链接https://github.com/sentsin/layui/issues/711


Layui.table:

https://www.layuion.com/doc/modules/table.html#use

table 模块是我们的又一走心之作,在 layui 2.0 的版本中全新推出,是 layui 最核心的组成之一。它用于对表格进行一些列功能和动态化数据操作,涵盖了日常业务所涉及的几乎全部需求。

Layui.table有三种渲染方式,本项目中使用了了方法渲染,使用了table.render

在渗透测试阶段挖掘到了XSS漏洞。经过从代码层分析,该漏洞的出现主要分为两点:

  • 一是:后端没有对用户输入的字符进行转义或过滤。

  • 二是:使用的前端框架存在XSS漏洞版本,也没有对返回到前端的参数进行过滤或转义。


5.5、SpringSecurity框架下未授权漏洞挖掘

本项目SprintSecurity配置代码位于src/main/java/codermy/myspringsecurityplus/security/config/SpringSecurityConfig

SpringSecurity会配置一些放行的静态资源,有时错误的配置会将一些关键资源放行,造成未授权访问。这有可能是开发人员便于调试,有可能是粗心导致的。比如本项目中直接放行了spring acatutor监控页面,按理说这个页面需要登录才可以访问。不登录就可以未授权访问这个页面是存在很大风险的。如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(三)越权,未授权,XSS代码审计

SpringSecurity配置是链式结构,可以同时配置多项过滤。

5.6、图形验证码绕过

搜索关键字captcha等,找到相关代码。如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(三)越权,未授权,XSS代码审计

经搜索,图形验证码代码位于src/main/java/com/codemy/mysringsecurityplus/security/filter/VerifyCoderFilter.java

让我们分析代码逻辑。

首先,判断了请求方法和请求路径。两者都为True进入验证码逻辑部分。如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(三)越权,未授权,XSS代码审计

然后获取属性值。使用request.getSession()获取cookie的session值,使用request.getParameter("captcha")获取请求body中captcha参数值,使用request.getSession().getAttribute("captcha")获取cookie中captcha值。如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(三)越权,未授权,XSS代码审计

接下来,仅判断了从请求参数中获取的captcha值是否为空,为空的话先删除缓存里的验证码信息,然后报错。如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(三)越权,未授权,XSS代码审计

仅判断从参数中获取的值是否为空逻辑是不严谨的。但在代码下方是有完整的验证逻辑。我们继续分析下。

判断从Cookie中获取captcha属性值是否为空。为空报错。

最后使用StrUtil.equalsIgnoreCase()函数忽略大小写判断,从cookie中获取的captcha值和从请求中获取的captcha值是否相同。如果不同的话就会报错。如下图所示:

【JavaWeb系统代码审计实战】某RBAC管理系统(三)越权,未授权,XSS代码审计

开发人员有时为了便于调试程序,可能会暂时关闭繁琐的验证逻辑。到了最后程序正式上线忘记了将注释删除掉,粗心的举动导致问题的发生。

当然,不同的程序会存在不同的问题。需要我们细心分析。



环境领取

欢迎点击下方链接获取配套练习环境。


前八套练习环境

【备注,后台回复关键字前八套环境

即可获取不限速下载链接】


炼石计划@Java代码审计


欢迎点击下方链接了解加入【炼石计划@Java代码审计】知识星球,在这里我们专注Java代码审计技术的提升。现阶段正在进行的为50套JavaWeb系统代码审计实战。赶紧和500位志同道合的朋友卷起来吧!


JavaWeb代码审计实战开源系统学习心得,赶紧进来看


[加入后请务必查看指定文章使用手册]

【JavaWeb系统代码审计实战】某RBAC管理系统(三)越权,未授权,XSS代码审计


炼石计划@PHP代码审计

欢迎点击下方链接了解加入【炼石计划@PHP代码审计】知识星球,在这里我们专注PHP代码审计技术的提升。七大阶段学习,让你最终掌握PHP代码审计。抱团学习取暖,避免走弯路,实现弯道超车。


PHP代码审计学习路线


【JavaWeb系统代码审计实战】某RBAC管理系统(三)越权,未授权,XSS代码审计


原文始发于微信公众号(闪石星曜CyberSecurity):【JavaWeb系统代码审计实战】某RBAC管理系统(三)越权,未授权,XSS代码审计

特别标注: 本站(CN-SEC.COM)所有文章仅供技术研究,若将其信息做其他用途,由用户承担全部法律及连带责任,本站不承担任何法律及连带责任,请遵守中华人民共和国安全法.
  • 我的微信
  • 微信扫一扫
  • weinxin
  • 我的微信公众号
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月7日02:05:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                  【JavaWeb系统代码审计实战】某RBAC管理系统(三)越权,未授权,XSS代码审计 http://cn-sec.com/archives/1089683.html

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: