Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【JAVA代码审计】从零开始的Mybatis框架SQL注入审计(上)

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JAVA审计班优秀作业 | 审计SQL注入漏洞
打开项目可能会发现源码文件加载不出来,这种情况只需要删除源码中的.idea文件夹即可:
Ms08067安全实验室
2021/09/28
1.5K0
【JAVA代码审计】从零开始的Mybatis框架SQL注入审计(下)
上期说到Mybatis的数据库执行操作都存在Mapper文件中,因此我们主要是在Mapper文件中进行漏洞挖掘。
一名白帽的成长史
2022/11/11
1.2K0
【JAVA代码审计】从零开始的Mybatis框架SQL注入审计(下)
Java代码审计初试
免杀是同所有的检测手段的对抗,目前免杀的思路比较多。本篇介绍了一个独特的思路,通过内存解密恶意代码执行,解决了内存中恶意代码特征的检测。同时提出了one click来反沙箱的思路,阐述了一些混淆反编译的想法。
亿人安全
2024/01/17
4220
Java代码审计初试
【JAVA代码审计】从零开始的JDBC下的SQL注入审计
JDBC是JAVA访问各种不同数据库的统一标准规范,该规范用于定义接口,具体的实现由各大数据库厂商各自实现。
一名白帽的成长史
2022/11/11
8670
【JAVA代码审计】从零开始的JDBC下的SQL注入审计
Mybatis框架下SQL注入审计分析
SQL注入漏洞作为WEB安全的最常见的漏洞之一,在java中随着预编译与各种ORM框架的使用,注入问题也越来越少。新手代码审计者往往对Java Web应用的多个框架组合而心生畏惧,不知如何下手,希望通过Mybatis框架使用不当导致的SQL注入问题为例,能够抛砖引玉给新手一些思路。
FB客服
2020/07/09
1.4K0
Mybatis框架下SQL注入审计分析
MyBatis框架教程「入门起步」
今天我们就踏上学习Mybatis框架的旅程,在SSM框架中Mybatis框架是dao层的一个解决方案。相当于传统Servlet+JavaBean开发模式中JDBC的作用。具体关于MVC架构的知识可以移步「从零学习Spring MVC框架「环境搭建和MVC架构」」文章,在这一篇文章的开篇我详细阐述了关于MVC架构的知识。
用户1093975
2018/08/03
4160
MyBatis框架教程「入门起步」
springboot系列学习(二十):springboot项目整合mybatis,springboot项目如何处理事务
在ssm框架里面整合mybatis . Spring框架(四)spring整合mybatis全部流程,附代码
一写代码就开心
2022/05/09
4460
springboot系列学习(二十):springboot项目整合mybatis,springboot项目如何处理事务
Java代码审计汇总系列(一)——SQL注入
相比黑盒渗透的漏洞挖掘方式,代码审计具有更高的可靠性和针对性,更多的是依靠对代码、架构的理解;使用的审计工具一般选择Eclipse或IDEA;审计工作过程主要有三步:风险点发现——>风险定位追踪——>漏洞利用,所以审计不出漏洞无非就是find:“找不到该看哪些代码”和judge:“定位到代码但判断不出有没有问题”。而风险点发现的重点则在于三个地方:用户输入(入参)处+检测绕过处+漏洞触发处,一般审计代码都是借助代码扫描工具(Fortify/Checkmarx)或从这三点着手。
Jayway
2019/11/07
4K0
Java代码审计汇总系列(一)——SQL注入
如何基于SSM框架,快速搭建maven后台项目?
写在前面:2020年面试必备的Java后端进阶面试题总结了一份复习指南在Github上,内容详细,图文并茂,有需要学习的朋友可以Star一下! GitHub地址:https://github.com/abel-max/Java-Study-Note/tree/master
用户5546570
2020/09/16
7990
如何基于SSM框架,快速搭建maven后台项目?
撒花 | SSM 完结
同样,整合之后,如果我们可以通过前台页面来执行查询方法,并且查询出的数据能够在页面中正确显示,那么我们也可以认为三大框架整合成功。
千羽
2021/12/29
2390
撒花 | SSM 完结
实战中的快速代码审计
js代码里面可能有些注释直接标注了username和password,或者账号密码配对是在前端验证而不是后端验证,也就是说直接能在js里看到if username=xxx, password=xxx:
Ms08067安全实验室
2022/02/10
4K0
实战中的快速代码审计
Java SSM框架简介[通俗易懂]
前言:在学习Java SSM框架前,我提前学习了反射、注解和MVC模式,因为它们频繁在SSM框架中被用到,建议大家先弄明白了这些基础知识,再学习SSM框架就很简单了。
全栈程序员站长
2022/09/14
3.4K0
Mybatis中SQL注入攻击的3种方式,真是防不胜防!
松哥最近正在录制 TienChin 项目视频~采用 Spring Boot+Vue3 技术栈,里边会涉及到各种好玩的技术,小伙伴们来和松哥一起做一个完成率超 90% 的项目,戳戳戳这里-->TienChin 项目配套视频来啦。 作者 :sunnyf 来源:www.freebuf.com/vuls/240578.html 前言 SQL注入漏洞作为WEB安全的最常见的漏洞之一,在java中随着预编译与各种ORM框架的使用,注入问题也越来越少。新手代码审计者往往对Java Web应用的多个框架组合而心生畏惧,不
江南一点雨
2022/10/08
9710
Mybatis中SQL注入攻击的3种方式,真是防不胜防!
JavaWeb——MyBatis框架之入门总结及案例实战,常见坑处理:Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.0.0
框架的概念在以前的博文中也有提到,此处简单说明下,框架实质是软件开发中的一套解决方案,不同的框架解决的是不同的问题。
Winter_world
2020/09/25
1.2K0
JavaWeb——MyBatis框架之入门总结及案例实战,常见坑处理:Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.0.0
SSM框架(九)整合SSM框架
本篇带来的是SSM框架整合,主要是常用配置文件的全部书写,以后要用直接复制建立项目即可。
HcodeBlogger
2020/07/14
2.7K0
SSM框架(九)整合SSM框架
细说Spring整合Mybatis
MapperScannerConfigurer类在Spring配置文件中可以配置以下属性:
千羽
2021/12/29
3650
细说Spring整合Mybatis
完整的Java学习路线
阶段一 (夯实基础) Java基础语法 学习目标: 1.熟悉Java等基本概念 2.掌握Eclipse/IDEA集成开发工具的安装、配置和应用 3.熟悉Java基本语法、基本类型、运算符和表达式 4.掌握分支、循环逻辑语句、数组等知识的应用 知识点列表: JDK、JRE、JVM基本概念 Java环境搭建和配置 安装和使用Eclipse/IDEA开发环境 Java基本数据类型 变量,运算符,表达式 分支语句,循环语句、
框架师
2021/03/08
1.6K0
SSM框架——Spring+SpringMVC+Mybatis的搭建教程
一:概述 SSM框架在项目开发中经常使用到,相比于SSH框架,它在仅几年的开发中运用的更加广泛。
全栈程序员站长
2022/02/27
7480
SSM框架——Spring+SpringMVC+Mybatis的搭建教程
IDEA 整合 SSM 框架学习
认识 Spring 框架 更多详情请点击这里:这里 Spring 框架是 Java 应用最广的框架,它的成功来源于理念,而不是技术本身,它的理念包括 IoC (Inversion of Control,控制反转) 和 AOP(Aspect Oriented Programming,面向切面编程)。 什么是 Spring: Spring 是一个轻量级的 DI / IoC 和 AOP 容器的开源框架,来源于 Rod Johnson 在其著作《Expert one on one J2EE design an
我没有三颗心脏
2018/04/26
2.3K2
IDEA 整合 SSM 框架学习
炼石计划之50套JavaWeb代码审计(一):某后台管理系统的探索之路
配置国内源下载一些依赖组件会非常快,但会有极个别情况,有些组件使用国内源无法下载,则需要再更改配置,大家留有印象就好。
用户1631416
2022/04/02
2.1K0
炼石计划之50套JavaWeb代码审计(一):某后台管理系统的探索之路
推荐阅读
相关推荐
JAVA审计班优秀作业 | 审计SQL注入漏洞
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档