欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringBoot集成Mybatis实现简单的SQL注入(攻击)案例

程序员文章站 2022-05-15 09:17:52
...

一、项目演示

 

(1)主演示就是一张t_user表,利用常见的用户登录来模拟sql注入对后台数据的侵入

 

SpringBoot集成Mybatis实现简单的SQL注入(攻击)案例

 

(2)数据库脚本 -- postgresql

 

DROP TABLE IF EXISTS "public"."t_user";
CREATE TABLE "public"."t_user" (
  "id" int8 NOT NULL,
  "name" varchar(255) COLLATE "pg_catalog"."default",
  "password" varchar(255) COLLATE "pg_catalog"."default"
)
;

DROP TABLE IF EXISTS "public"."t_user_info";
CREATE TABLE "public"."t_user_info" (
  "id" int8 NOT NULL,
  "uid" int8,
  "name" varchar(255) COLLATE "pg_catalog"."default",
  "gender" int2,
  "age" int2,
  "address" varchar(255) COLLATE "pg_catalog"."default"
)
;

ALTER TABLE "public"."t_user" ADD CONSTRAINT "t_user_pkey" PRIMARY KEY ("id");
ALTER TABLE "public"."t_user_info" ADD CONSTRAINT "t_user_info_pkey" PRIMARY KEY ("id");

 

(3)数据库表结构

 

SpringBoot集成Mybatis实现简单的SQL注入(攻击)案例

 

 

(4)代码中,体现防sql注入和sql注入的地方如下:

 

SpringBoot集成Mybatis实现简单的SQL注入(攻击)案例

 

(5)先来注册个用户

 

SpringBoot集成Mybatis实现简单的SQL注入(攻击)案例

 

 

(6) 先来个带有侵入性的正常登录

 

传入参数:

 

{
	"name":"appelyk",
	"password":"'';drop table if exists t_user_info;"
}

 

SpringBoot集成Mybatis实现简单的SQL注入(攻击)案例

 

由于这个演示掉的后台接口些的sql是防注入的,所以,我们调用接口的时候,可以看到myabtis输出的sql语句如下:

 

SpringBoot集成Mybatis实现简单的SQL注入(攻击)案例

 

SELECT ID
	,
	NAME,
PASSWORD 
FROM
	t_user 
WHERE
	NAME = 'appleyk' 
	AND PASSWORD = ''';drop table if exists t_user_info;'

 

数据库执行效果,那还用说嘛,肯定找不到啦!

 

SpringBoot集成Mybatis实现简单的SQL注入(攻击)案例

 

 

(7) 再来个带有侵入性的"非"正常登录

 

SpringBoot集成Mybatis实现简单的SQL注入(攻击)案例

 

我们看下后台输入的sql日志:

 

SpringBoot集成Mybatis实现简单的SQL注入(攻击)案例

 

我们去数据库查看一下,发下,t_user_info表已经不存在了!!!!

 

SpringBoot集成Mybatis实现简单的SQL注入(攻击)案例

 

 

 

二、总结

 

   (1)检查sql语句,慎用$,请选择用#

   (2)如果非要用$,请在自己的业务层,实现对可能会发生SQL注入的参数进行手动过滤处理,不要希望mybaits会对你的$参数进行拦截处理!

 

 

三、项目地址

 

GitHub地址:https://github.com/kobeyk/springboot-myabtis-injection-sample

 

 

SpringBoot集成Mybatis实现简单的SQL注入(攻击)案例