一,五種常見的注入方式
-
基於Bool類型的注入方式
-
基於時間的盲注
' and (select * from (select(sleep(20)))a)--+
-
基於錯誤的檢測
服務器把錯誤信息反饋回來(少見)
-
基於UNION聯合查詢
聯合查詢的前提是通過for(while)循環直接輸出聯合查詢結果,否則我們只能查出第一條結果
-
基於堆疊查詢檢測
通過分號多條查詢 前提是可以加分號......
如果原先的注入代碼中有select,此時用分號堆疊查詢無效
二,常見命令解釋

-d表示主動連接數據庫,當然我們需要有賬號密碼,類似於我們是客戶端機器
-u 表示掃描的目標URL地址,但是url地址必須要有參數? a=XXX
-m 我們可寫多個url地址,將他們放入一個文件中,-m則可以逐個進行掃描
下面對以上幾個參數進行實驗測試
-
-u參數
先進入mutillidae測試環境,選擇sql注入

當我們輸入賬號密碼(錯誤)之后url地址欄就會有參數顯示

此時就可以利用-u方式進行sqlmap探測

-p表示對某個變量進行探測,-f表示指紋探測

紅圈表示已經探測出username字段有可能sql注入,后面疑問表示是否跳過其他的數據庫的掃描類型,這里已經判斷基本為MYSQL類型數據庫,最后的查詢結果:

存放的結果放在最后一行 root/.sqlmap/output/XXXXXXXX
剛剛設置的參數為-f 查詢數據庫的指紋信息,也可以設置其他參數
--users 查詢數據庫中用戶有哪些

--banner查詢對方數據庫版本信息
--dbs查詢目標數據庫管理系統有哪些庫
--schema查源數據庫
-a 查詢所有的信息 (all)
-
-d參數
連接數據庫語句:sqlmap -d "mysql://賬號:密碼@192.168.1.1:3306/dvwa" -f --users
-
-m參數
有多個url地址時候
sqlmap -m list.txt
如果使用POST方式就無法用url方式掃描
可以使用http請求文件,這里需要用burp去結合,將所有頭部信息保存至一個文件request.txt文件內,然后用sqlmap -r request.txt進行掃描
現在burp截斷一個我們需要的post請求

將他保存為txt文件,之后用sqlmap進行掃描
同樣的文件掃描我們可以利用burp里面的log文件

方式:sqlmap -l log.txt
對於HTTPS的掃描:
sqlmap -u "目標url:端口" --force-ssl