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

admin 2022年6月4日12:05:43评论41 views字数 2439阅读8分7秒阅读模式

前言

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

文末获取配套练习环境


上期回顾


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


进入正题


五、漏洞挖掘之代码审计

5.1、信息收集

  • pom.xml漏洞挖掘

基本上所有项目都会根据项目所需引入第三方依赖库来使用,毕竟好用又方便。但如果引入带有漏洞的版本就会出现问题。

通过上面也了解到了,pom.xml统一管理第三方依赖。通过groupIdartifactIdversion 三个标识,我们可以了解到使用了哪个依赖库以及版本,从而可以确定是否存在漏洞。

使用Fastjson 1.2.56版本,该版本存在漏洞,如下图所示:

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

在发现了第三依赖库存在漏洞版本时,可以进一步利用。

但有时,尽管使用了带有漏洞版本的组件,但并没有使用存在漏洞的相关函数。

比如Fastjson反序列化漏洞,该项目实际并没有使用到parseObject

注意:

通过组件及版本寻找漏洞,最起码需要知道什么组件时干什么的,然后对于常见的组件看多了,也就知道什么版本有什么漏洞了,熟能生巧。

自动化检测第三方依赖包漏洞可使用dependency-check

官方地址:
https://owasp.org/www-project-dependency-check/
Github地址:
https://github.com/jeremylong/DependencyCheck


  • 查看配置文件

配置文件都在src/main/resources下面,名字通常为application.yml或者application.properties。配置文件中可能会存在数据库或其他组件的连接信息。

数据库连接信息账号密码:

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

其他配置信息:

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

5.2、SQL注入漏洞挖掘

本项目基于Mybatis操作数据库。通过前面的学习,我们了解到Mybatis错误的配置会导致SQL注入漏洞的存在,这是我们挖掘SQL注入漏洞的入口点。

我们先来回顾下:

Mybatis拼接sql有下面两种方式:

#{}告诉 MyBatis 创建一个预编译语句(PreparedStatement)参数,在 JDBC 中,这样的一个参数在 SQL 中会由一个“?”来标识,并被传递到一个新的预处理语句中,

${} 仅仅是纯粹的 string 替换,在动态 SQL 解析阶段将会进行变量替换,直接替换字符串,会导致SQL注入产生。

一些不能使用#{}的场景:

表名/字段名
order by/group by
like模糊查询
in


因此,我们在代码审计阶段进行SQL注入漏洞挖掘,应关注xxxxMapper.xml中使用${}拼接SQL的地方,全局搜索关键字符。Windows快捷键CTRL+SHIFT+F(如果快捷键冲突,需自己更改)。

调出Find in path,File mask选择文件类型为*.xml,键入关键字符${,如下图所示:

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

通过上述搜索,发现了SQL语句使用了like语句并使用$进行拼接参数,这种情况下无疑是存在SQL注入的。

我们逆向追踪所拼接的参数,看看是从前端哪个地方输入进来的。

首先在IDEA中安装Free Mybatis Plugin,该插件方便mapper.xml与mapper接口之间跳转。需在左上角File -> Settings -> Plugin中安装。

逆向追踪参数流程,举例说明

①、通过搜索还发现src/main/resources/mybatis-mappers/DictMapper.xml文件,第17行,存在使用like语句以及$拼接SQL。安装了Free Mybatis Plugin插件后,左侧会有绿色箭头,点击即可跳转到mapper接口处,也就是DAO层文件,如下图所示:

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

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

②、我们继续向前找到谁调用了DictDao.java中的getFuzzyDictByPage,Windows系统按住ctrl键,鼠标左击getFuzzyDictByPage进入该方法,或者说查看谁用了这个方法。如下图所示:

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

③、点击进入DICTServiceImpl.java文件,发现getDictPage函数中使用了`getFuzzyDictByPage,如下图所示:

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

④、继续按住ctrl键,鼠标左击getDictPage方法,点击后,直接进入到了DictController文件中第43行,如下图所示:

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

找到Controller层后,发现并没有dictname参数,因为Controller中以实体类接收表单数据。进入MyDict发现该类为实体类,其中定义多个参数,如下图所示:

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

⑥、经过上述参数逆向追踪,确定了dictName为字典名称位于查询字典功能处,接下来我们访问该功能,配合渗透测试进一步挖掘验证SQL注入漏洞。


环境领取

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


前八套练习环境

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

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


炼石计划@Java代码审计


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


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


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

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


炼石计划@PHP代码审计

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


PHP代码审计学习路线


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


原文始发于微信公众号(闪石星曜CyberSecurity):【JavaWeb系统代码审计实战】某RBAC管理系统(二)信息收集与SQL注入代码审计

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年6月4日12:05:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【JavaWeb系统代码审计实战】某RBAC管理系统(二)信息收集与SQL注入代码审计http://cn-sec.com/archives/1085478.html

发表评论

匿名网友 填写信息