SpringBoot集成Mybatis實現簡單的SQL注入(攻擊)案例

一、項目演示

 

(1)主演示就是一張t_user表,利用常見的用戶登錄來模擬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)數據庫表結構

 

 

 

(4)代碼中,體現防sql注入和sql注入的地方如下:

 

 

(5)先來註冊個用戶

 

 

 

(6) 先來個帶有侵入性的正常登錄

 

傳入參數:

 

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

 

 

由於這個演示掉的後臺接口些的sql是防注入的,所以,我們調用接口的時候,可以看到myabtis輸出的sql語句如下:

 

 

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

 

數據庫執行效果,那還用說嘛,肯定找不到啦!

 

 

 

(7) 再來個帶有侵入性的"非"正常登錄

 

 

我們看下後臺輸入的sql日誌:

 

 

我們去數據庫查看一下,發下,t_user_info表已經不存在了!!!!

 

 

 

 

二、總結

 

   (1)檢查sql語句,慎用$,請選擇用#

   (2)如果非要用$,請在自己的業務層,實現對可能會發生SQL注入的參數進行手動過濾處理,不要希望mybaits會對你的$參數進行攔截處理!

 

 

三、項目地址

 

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章