首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【JAVA代码审计】从零开始的Mybatis框架SQL注入审计(上)

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

作者头像
一名白帽的成长史
发布于 2022-11-11 07:35:18
发布于 2022-11-11 07:35:18
1.5K02
代码可运行
举报
运行总次数:2
代码可运行

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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
NumPy学的还不错?来试试这20题!
NumPy大家应该不陌生了,看了太多的原理讲解之后,用刷题来学习是最有效的方法,本文将带来20个NumPy经典问题,附赠20段实用代码,拿走就用,建议打开Jupyter Notebook边敲边看!
刘早起
2020/07/22
1K0
NumPy学的还不错?来试试这20题!
numpy总结
df = pd.DataFrame({‘A’:[1,2,3],‘B’:[4,5,6],‘C’:[7,8,9]})
北山啦
2022/11/27
2.4K0
numpy总结
NumPy进阶修炼80题|41-60
大家好,又到了NumPy进阶修炼专题,其实已经断更很久了,那么在本文正式发布题目之前,先说下改动的地方,在以前的Pandas120题和NumPy热身20题中,我都是将我的答案附在每一题的后面? 这种形
刘早起
2020/07/17
5140
NumPy进阶修炼80题|41-60
NumPy进阶修炼|热身20题
大家好,NumPy系列讲解已经更新了两期,今天将整理一些相关的题目来实际操作一下,因为在Pandas系列中有涉及到部分NumPy操作因此我也不确定最终会有多少题,暂且先来个20题热热身吧!
刘早起
2020/05/11
5340
一份 Numpy 小抄请查收
在numpy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank)。如3D空间中一个点的坐标[1,2,3]是一个秩为1的数组,因为它只有一个轴,这个轴长度为3,在下面的例子中数组的秩为2(它有两个维度),第一个维度为2,第二个维度为3。
syy
2020/04/07
4690
Pandas进阶修炼120题|完整版
『Pandas进阶修炼120题』系列现已完结,我们对Pandas中常用的操作以习题的形式发布。从读取数据到高级操作全部包含,希望可以通过刷题的方式来完整学习pandas中数据处理的各种方法,当然如果你是高手,也欢迎尝试给出与答案不同的解法。
刘早起
2020/04/15
13.2K1
Pandas进阶修炼120题|完整版
50个常用的 Numpy 函数详解
来源:CDA数据分析师 本文约7500字,建议阅读15分钟 在本文中,将介绍NumPy在数据科学中最重要和最有用的一些函数。 Numpy是python中最有用的工具之一。它可以有效地处理大容量数据。使用NumPy的最大原因之一是它有很多处理数组的函数。在本文中,将介绍NumPy在数据科学中最重要和最有用的一些函数。 创建数组 1、Array 它用于创建一维或多维数组 numpy.array(object, dtype=None, *, copy=True, order='K'
数据派THU
2023/05/18
1K0
50个常用的 Numpy 函数详解
Python:numpy模块最详细的教程
一、numpy简介 numpy官方文档:https://docs.scipy.org/doc/numpy/reference/?v=20190307135750 numpy是Python的一种开源的数
Python学习者
2023/01/04
1.3K0
数据清洗、合并、转化和重构
1、数据清洗是数据分析关键的一步,直接影响之后的处理工作 2、数据需要修改吗?有什么需要修改的吗?数据应该怎么调整才能适用于接下来的分析和挖掘? 3、是一个迭代的过程,实际项目中可能需要不止一次地执行这些清洗操作 4、处理缺失数据:pd.fillna(),pd.dropna() 1、数据连接(pd.merge) 1、pd.merge 2、根据单个或多个键将不同DataFrame的行连接起来 3、类似数据库的连接操作 示例代码: import pandas as pd import numpy as np
用户1332428
2018/03/08
9820
NumPy 中级教程——数组操作
NumPy 是 Python 中用于科学计算的核心库之一,提供了强大的数组操作功能。本篇博客将深入介绍 NumPy 中的数组操作,包括数组的切片、索引、形状操作、合并与分割等,通过实例演示如何应用这些功能。
Echo_Wish
2023/12/30
2290
Numpy库
NumPy是一个功能强大的Python库,主要用于对多维数组执行计算。NumPy这个词来源于两个单词-- Numerical和Python。NumPy提供了大量的库函数和操作,可以帮助程序员轻松地进行数值计算。在数据分析和机器学习领域被广泛使用。他有以下几个特点:
用户9615083
2022/12/25
3.9K0
Numpy库
AI基础:Numpy简易入门
NumPy(Numeric Python)提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。多为很多大型金融公司使用,以及核心的科学计算组织如:Lawrence Livermore,NASA 用其处理一些本来使用 C++,Fortran 或 Matlab 等所做的任务。
Ai学习的老章
2019/12/05
7390
【Python数据分析】NumPy基础,看这一篇就够了!
NumPy是Python的一种开源的数值计算扩展库,包含很多功能,如创建n维数组(矩阵)、对数组进行函数计算、数学计算等等。
Skrrapper
2025/05/09
2070
【Python数据分析】NumPy基础,看这一篇就够了!
Numpy
numpy(numerical Python) 是 Python 数值计算最重要的基础包,大多数提供科学计算的包都是用 NumPy 的数组为构建基础。 NumPy 可以用于数值计算的一个重要原因是因为他能处理大数组的数据:
爱编程的小明
2022/09/05
1.3K0
Numpy
Numpy基础知识点汇总
1、概述 Numpy是高性能科学计算和数据分析的基础包,它的部分功能如下: 1)ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。 2)对整组数据进行快速运算的标准数学函数 3)用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 2、ndarray的创建 这一节,我们主要关注ndarray数组的创建,我们主要有以下几种方式: 数组转换 创建数组的最简单的方法就是使用array函数,将Python下的list转换为ndarray。 #通过数组创建一个ndarray data1
石晓文
2018/04/11
1.6K0
Python 数据处理:NumPy库
✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的博客 🍊个人信条:为天地立心,为生民立命,为往圣继绝学,为万世开太平。 🥭本文内容:Python 数据处理:NumPy库 ---- Python 数据处理:NumPy库 1.NumPy简介 2.NumPy的ndarray:一种多维数组对象 2.1 创建ndarray 2.2 ndarray的数据类型 2.3 NumPy数组的运算 2.4 基本的索引和切片 2.5 切片索引 2.6 布尔型索引 2
小嗷犬
2022/11/15
5.9K0
Python 数据处理:NumPy库
我的机器学习numpy篇何为ndarray?ndarry创建生成正态分布ndarry属性修改形状ndarry运算ndarry切片矩阵转置聚合函数
前言: numpy是以矩阵为基础的数学计算模块,其基础为多维数组为ndarray 官方文档:(https://docs.scipy.org/doc/numpy/user/index.html) 何为ndarray? 一种由相同类型的元素组成的固定的多维数组。(注意黑体字) ndarry创建 代码如下 import numpy as np np.array([[1,2,3],[4,5,6]]) np.zeros((4,5)) np.ones((2,3,4)) np.random.randin
DC童生
2018/04/27
1.1K0
我的机器学习numpy篇何为ndarray?ndarry创建生成正态分布ndarry属性修改形状ndarry运算ndarry切片矩阵转置聚合函数
numpy科学计算包的使用1
Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数。
听城
2018/04/27
1.3K0
numpy科学计算包的使用1
这8个NumPy函数可以解决90%的常见问题
NumPy是一个用于科学计算和数据分析的Python库,也是机器学习的支柱。可以说NumPy奠定了Python在机器学习中的地位。NumPy提供了一个强大的多维数组对象,以及广泛的数学函数,可以对大型数据集进行有效的操作。这里的“大”是指数百万行。
deephub
2023/08/29
2850
这8个NumPy函数可以解决90%的常见问题
NumPy从入门到放弃
公众号本文地址:https://mp.weixin.qq.com/s/EocThNWhQlI2zeLcUApsQQ
愷龍
2024/08/09
3010
NumPy从入门到放弃
相关推荐
NumPy学的还不错?来试试这20题!
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档