概述
LOW等級
1、首先嚐試正常操作,輸入1
可是這裏web應用通過查詢數據庫,獲取了id爲1的用戶的信息,猜測SQL語句爲:
2、接下來檢測是否存在SQL注入漏洞,輸入1’
報錯,則說明單引號注入到SQL語句中報錯,存在SQL注入漏洞
嘗試數字型,查詢結果與id=1時的結果一樣
嘗試第二種情況,成功執行
嘗試雙引號,也沒有成功
所以可知這裏的變量是用單引號來進行閉合的
3、接下來使用order by 確定查詢的字段數
通過嘗試可得出字段數是2
4、用union select確定回顯點
5、嘗試利用回顯點來查詢數據庫的版本和數據庫的目錄
同樣可以查詢數據庫的用戶名和名稱
查詢表名
查詢列名
查詢用戶名密碼(密碼可通過md5解密):
同時也可以讀取文件(這裏用MySQL的load_file函數)
6、寫入webshell
PHP一句話木馬,執行cmd參數的值
我們要將該webshell寫入物理路徑,這裏通過引發異常爆出web目錄
利用select...into outfile...寫入,
嘗試訪問,寫入成功
嘗試執行代碼system(dir) , system(dir)在PHP中代表用系統命令去執行dir
7、利用sqlmap
當前用戶和數據庫名
執行結果
查表名:
查字段名:
用戶名和密碼
獲取webshell
輸入物理路徑:
執行dir
Medium等級
1、在medium等級中,id號不用我們輸入,而是選擇,是post請求
Tamper date改包
發現失效了,我們輸入的1'被轉義了
嘗試輸入1"和1'發現都被轉義了,嘗試沒有引號,發現可以成功執行
2、手工利用方法:獲取用戶名密碼
3、medium等級注入技巧
在查詢表名時,DVWA的單引號會被轉義,可通過HEX編碼繞過
4、sqlmap檢測
利用
High等級
1、嘗試單引號,成功執行,和low等級相同是字符型注入
2、手工利用方法,猜用戶名密碼
成功讀取
3、sqlmap利用
這一等級,注入的點和返回的點不在同一個頁面,要用--second -order這個參數來指定返回的頁面
sql注入預防
Impossible等級檢測了id數據類型,使用預編譯綁定id變量,有效防止SQL注入
參數化SQL語句
也可使用存儲過程和白名單。