SQL注入從注入的手法或者工具上分類的話可以分為:
· 手工注入(手工來構造調試輸入payload)
· 工具注入(使用工具,如sqlmap)
今天就給大家說一下手工注入:
手工注入流程
判斷注入點
注入的第一步是得判斷該處是否是一個注入點。或者說判斷此處是否有SQL注入漏洞。最簡單的判斷方法就是在正常的參數后加單引號 '。 id=1'

以看到數據庫報錯了,最重要的就是能夠看懂數據庫的錯誤信息,從錯誤信息中我們可以知道是單引號的匹配出了問題,也就是說我們添加的單引號成功被數據庫解析,那么我們就可以通過閉合這個id這個參數,然后插入自己構造的sql語句實施攻擊。我們按照步驟來,一般可以使用聯合表的方式來提取自己感興趣的信息(union),但是使用union語句有個前提就是union 后面的語句必須與前面的語句字段數以及類型必須一直,否則數據庫會報錯
如果頁面顯示了SQL的錯誤信息,進一步測試: id=1' or 1=1--+
再測試: id=de' and 1=2--+ ,基本確定注入存在
判斷查詢的字段數,使用order by number
輸入 order by 5
order by 4 均會報錯

可以看到order by 3的時候頁面顯示正常

確定回顯位
確定了查詢數據的位數,然后開始確定網頁的回顯位。回顯位就是確定查詢出來的數據是在網頁上面的哪個位置顯示出來。使用Union聯合查詢來確定回顯位。

獲取信息函數:
user() 獲取當前用戶用戶
database() 獲取當前數據庫
version() 獲取數據庫版本
@@version_compile_os 獲取操作系統版本
舉個例子(就不和大家一一解釋啦):

獲取數據庫里的數據
獲取所有的數據庫名:

獲取所有的表名:

獲取所有的列名:
我們就拿users這個表舉個例子吧

獲取數據:
單個數據取出

全部數據取出

總結:
一個手工的sql注入接班就是這樣,上面有什么錯誤,歡迎大家指出.
