初學Web安全之sql注入(四)—— 盲注(1)
盲注
當你的輸入沒有回顯,也沒有報錯的時候,但是輸入正確和錯誤的值時,頁面有不同表現時,這時候我們可以嘗試使用布林盲注
布林盲注
拿sqli-labs第八關來舉列
首先輸入id=1,頁面顯示如下:
輸入id=1’,頁面出現不同結果,判斷有閉合:
再次輸入id=1",頁面結果顯示正常,初步判斷語句閉合為單引號閉合:
接下來,我們就可以先嚐試判斷當前資料庫的長度,然後再拆解表名,但是這裡省略這一步,直接判斷當前資料庫有多少個表,構造語句開始嘗試:
PS:因為手工注入非常的耗費時間,所以我這裡採用半自動化,也就是利用burpsuit的爆破功能,如果採用純手工的話,語句建議採用>號,然後使用二分法縮減數字,這樣效率較高
這裡開啟burpsuit,啟用攔截功能,注意瀏覽器要切換到8080埠,這裡我是用了火狐自帶的外掛切換埠,將攔截到的包傳送到如下板塊,開始暴力破解:
得出結果為4:
在頁面中測試,結果正確:
得出了表的數量,接下來開始猜測每個表長度,同樣藉助burpsuit:
構造語句:
burpsuit暴力破解:
得出了有多少個表,表的長度為多少,接下來,我們就可以開始猜解表名了,這裡需要用到兩個函式,詳細解釋可以自行百度:
ascii:返回字元的ascii值
substr:擷取字元作用
先構造語句:
藉助burpsuit逐步猜解每個表名:
第一個表,前面已經得知長度為6,接下來就是猜測每個資料,因為這裡是在靶場,所以我的範圍只設置為小寫字母,也就是97~122,實戰中,有可能會出現某些字元和大小寫,這裡為了節約時間,就只假設為小寫字母,利用burp破解得出,對照ascii碼錶,得出結果為:emails
第二個表,長度為8:
得出結果:referers
第三個表,長度為7,利用burpsuit得出結果:uagents
第四個表,長度為5,得出結果為:users
猜解完表名,可以發現,關鍵表應該是users,那麼接下來應該就是猜解關鍵欄位了,先判斷欄位數:
構造語句:
藉助burpsuit,得出欄位數為3:
接下來,判斷每個欄位的長度:
構造語句:
藉助burpsuit得出結果,第一個欄位長度為2,第二個和第三個長度為8:
接下來,就是猜解每個欄位數了,步驟和前面都差不多:
構造語句:
藉助burpsuit得出結果為id:
第二個欄位:
結果為username:
第三個欄位,結果為password
判斷出關鍵列為username和password,接下來就是獲取賬號密碼了,通常管理員賬號密碼都是在第一個:
構造語句,獲取第一個username的長度:
猜解名字:
PS:注意,實戰中賬號密碼可能是數字大小寫字母和符號組成,因為這裡是在靶場,所以使用的還是數字破解,得出結果為Dumb:
接下來就是對password的猜解了,這裡就直接上圖片演示:
長度為4:
破解出密碼也為Dumb:
到這裡,布林盲注就完成了,上面的步驟是藉助了工具,純手工的話,可以用>號,再借助二分法縮減數字,這樣效率較高,也可以慢慢猜解出來。