SQL注入

2021-09-26 18:46:42 字數 1731 閱讀 2818

1、什麼是sql注入

sql注入就是指web應用程式對使用者輸入資料沒有做合法性判斷,導致前端傳入的引數可控,從而被攻擊者通過構造引數進行對資料庫執行任意操作。

2、sql注入的原理

前提條件:

* 引數使用者可控:前端傳給後端的引數內容是使用者可以控制的。

* 引數帶入資料庫查詢:傳入的引數拼接到sql語句,並帶入資料庫進行查詢。

3、與mysql注入相關的知識點

mysql 5.0版本之後,預設存放乙個information_schema資料庫,該庫中必須記住的三個表名為:schemata、tables、columns

schemata表儲存所有資料庫的庫名,該表中記錄資料庫庫名的欄位名為schema_name

tables表儲存所有資料庫的的庫名和表名,該表中記錄資料庫庫名和表名的欄位名分別為table_schema和tbale_name

columns表儲存所有資料庫的庫名、表名和列名,該表中記錄資料庫庫名和表名的欄位名分別為table_schema、tbale_name和column_name

4、基本知識點(必須記住的)

(1)需要記住的幾個函式

database() 當前**使用的資料庫

version() 當前mysql的版本

user() 當前mysql的使用者

(2)注釋符#、-- 、或/**/

(3)內聯注釋內聯注釋的形式:/! code/。內聯注釋可以用於整個sql語句中,用來執行sql語句,比如index.php?id=-15 /!union/ /!select/1,2,3

5、sql注入的分類

(1)、常見的sql注入按照引數型別可分為兩種:數字型字元型

當發生注入點的引數為整數時,比如 id,num,page等,這種形式的就屬於數字型注入漏洞。同樣,當注入點是字串時,則稱為字元型注入,字元型注入需要引號來閉合。

(2)、也可以根據從伺服器接收到的響應,分為基於錯誤的sql注入、盲注(布林、時間和報錯)、聯合查詢注入、堆查詢注入、寬位元組注入等。

回顯注入:可以直接在存在注入點的當前頁面中獲取返回結果。

報錯注入:程式將資料庫的返回錯誤資訊直接顯示在頁面中,雖然沒有返回資料庫的查詢結果,但是可以構造一些報錯語句從錯誤資訊中獲取想要的結果。

盲注:程式後端遮蔽了資料庫的錯誤資訊,沒有直接顯示結果也沒有報錯資訊,只能通過資料庫的邏輯和延時函式來判斷注入的結果。根據表現形式的不同,盲注又分為based boolean和based time兩種型別。

布林盲注: 布林型盲注出現在進行查詢時伺服器不會返回具體內容,只會返回查詢操作執行的結果是否成功的狀態,如果查詢成功,則返回true,反之返回false。

時間盲注: 根據判斷返回的結果所花費的時間來判斷是否存在注入,如果存在注入(即資料庫查詢失敗),則延時一定時間頁面才會返回內容,不存在注入瀏覽器則直接返回頁面內容。

(3)、按照資料提交方式分為:使用者輸入的表單域注入,cookie注入,http頭部注入。

6、利用方式

(1)獲取資料庫資料,比如使用者名稱和密碼

(2)如果有寫許可權,可以寫一句話木馬getshell

7、防禦方式

(1)嚴格檢查輸入變數的型別。

(2)過濾和轉義特殊字元。

(3)mysql的pdo預編譯機制。

SQL注入(三) sql注入 bugku

原理 mysql 在使用 gbk 編碼的時候,會認為兩個字元為乙個漢字,例如 aa 5c 就是乙個 漢字 前乙個 ascii碼大於 128 才能到漢字的範圍 我們在過濾 的時候,往往利用的思 路是將 轉換為 換的函式或者思路會在每一關遇到的時候介紹 因此我們在此想辦法將 前面新增的 除掉,一般有兩種...

SQL注入 報錯注入

乙個帶get引數的 並且不從資料庫返回資料,但存在報錯資訊 檢視字段情況 報錯注入語句格式 and 1 2 union select1,2,3 from select count concat floor rand 0 2 sql語句 a from information schema.tables...

SQL注入 報錯注入

sql注入基礎 盲注 用於注入結果無回顯但錯誤資訊有輸出的情況 floor函式 返回小於等於某值的整數,例如floor 1 則返回1,floor 1.9 也返回1 rand函式 生成隨機數.可指定seed,指定後每次生成的數都一樣即偽隨機,不指定seed則每次生成的隨機數都不一樣.通過floor和r...