前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【JAVA代码审计】从零开始的Mybatis框架SQL注入审计(上)

【JAVA代码审计】从零开始的Mybatis框架SQL注入审计(上)

作者头像
一名白帽的成长史
发布2022-11-11 15:35:18
1.1K0
发布2022-11-11 15:35:18
举报

hello,各位小伙伴大家好~

这里是小编Monster~

今天继续分享JAVA代码审计相关内容:

(1)JDBC下的SQL注入审计(已完结)

(2)Mybatis下的SQL注入审计

(3)Hibernate下的SQL注入审计

上期分享了JDBC下的注入审计,今天开始分享mybatis框架下的SQL注入审计。

由于内容较多,本次分享分为上下两期,本期先来看看Mybatis环境搭建和路由讲解吧~

Part.1

SSM框架概述

Mybatis概述

MyBatis是一个优秀的持久层框架,它的作用和上期的JDBC一样,用于网站与数据库之间的连接和访问。

它对JDBC操作数据库的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。

因此它的底层也是jdbc,是对jdbc的封装,最终也是生成jdbc代码访问数据库。

Mybatis一般是放在框架组合中使用的,数据库常见的框架组合包括SSM和SSH组合,即:

因此,学习Mybatis我们就需要知道SSM框架是怎么运作的。

本次从零开始系列分享依然是从环境搭建开始,我们先来搭建一个使用SSM框架的线上教育系统,再通过这个系统来具体学习。

Part.2

SSM环境搭建

Idea项目导入

首先通过idea创建一个新项目,并打开我们下载好的cms:

此时会弹出提示窗,因为我们通过Maven创建项目,所以选择Maven project:

打开项目可能会发现源码文件加载不出来,这种情况只需要删除源码中的.idea文件夹即可:

删除.idea文件后,重新打开项目,即可加载出源文件,如下图:

项目加载成功后,我们还需要配置运行环境,使项目运作起来,首先将JDK修改为1.8(或1.7)版本:

因为是Maven项目,修改Maven配置,选择我们本机的Maven工具地址:

接下来,还需要配置一下tomcat环境来运行这套代码,选择local通过本地调试方式进行搭建:

//选择tomcat版本,我本机安装的是8.5.31;

注意:如果端口8080和本机其他服务冲突,这里可修改为其他端口运行:

最后添加运行环境,点击Fix并选择inxedu.war即可:

数据库相关配置

运行环境配置完毕后,还需要连接本地数据库,找到project.properties文件,修改jdbc.host为本机(即数据库)ip地址,这里设置为环回口地址;

然后将jdbc.username、password修改为本机数据库的用户名、口令即可。

注意:上图还需要将项目路径(contextpath)改为和tomcat中的url一致,即下图的url:

最后连接本地数据库,可以使用DBeaver或navicat:

连接成功后,导入cms文件包中的sql脚本:

执行后,成功创建我们需要的数据库:

运行项目

最后,返回idea,通过tomcat运行cms:

项目运行成功,浏览器自动访问首页:

环境搭建完毕~

Part.3

SSM路由分析

框架判断

在代码审计之前,我们需要先判断一下该cms使用什么框架进行运作。

首先查看web.xml文件,可以看到加载了Spring核心配置文件applicationContext.xml:

可以在资源目录中找到applicationContext.xml文件:

同时,web.xml文件还加载了Spring-mvc的配置文件spring-mvc.xml:

spring-mvc.xml配置如下:

查看spring核心配置文件applicationContext.xml,发现通过Spring整合Mybatis配置:

找到Mybatis配置文件SqlMapConfig.xml:

因此判断该cms通过ssm框架搭建,即Spring+Spring-mvc+Mybatis。

路由分析

判断为SSM框架后,来分析一下路由。

首先和JDBC一样,需要创建实体pojo类,类中的各个参数与数据库中目标表的列名需要一一对应,包括参数名、参数类型。

//在entity目录中可以找到这些类。

如果不一致,应该是在mapper文件中配置了别名,别名则和数据库一致:

//mapper文件则是mybatis记录数据库相关语句的地方,后面会讲到。

通过动态代理的方式,Mybatis将Dao层接口直接作为数据库映射文件。

//可以直接理解为:将各种数据库操作方法记录在Dao接口中,因此我们控制数据库,直接调用dao接口中具体的方法即可。

但是可以发现,上图只是创建了方法,但方法没有写具体的操作内容,那么真正的SQL语句在哪里呢?答案是在mapper文件中。

Mapper文件,与Dao层文件一一对应,记录Dao文件中各方法相应的SQL语句:

//文件名也是对应的,xxxDao对应xxxMapper

mapper文件格式说明如下:

回到我们的源码,可以看到mapper中的sql语句,确实和dao层文件一一对应:

因此,当我们确定mapper中一条sql语句存在注入后,就可以直接去找对应的dao层相关类,并找到对应的相关方法,再往上追溯那些地方调用了这个类的相关方法即可。

此外,SSM框架通过Spring-MVC控制器(Controller)确定访问url:

例如上图,想要访问Teacher的getTeacherById查询方法对应的url为:

http://127.0.0.1/front/teacher/{teacherId}

综上,当我们输入url访问SSM框架服务时,服务端先根据url找到对应的Controller类中的方法;再根据方法中调用的具体对象与方法,一步步追溯到dao层,再根据dao层找到mapper文件 ,最终就能确定执行的sql语句的具体内容。

如果没能理解也不用急,下期将通过本cms具体漏洞挖掘案例,带大家一起过一遍这个路由流程。

Part.4

结语

以上就是今天的全部内容了~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一名白帽的成长史 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档