盲注
有時候,開發人員不會把資料庫報錯資訊顯示在前端頁面,這樣就使我們想要通過union注入或報錯注入的攻擊方式難以實作,
當不顯示報錯資訊的時候,我們還可以通過盲注的方式來對資料庫進行注入攻擊,
盲注,顧名思義,就是在頁面沒有提供明顯資訊的情況執行的注入方式,
盲注又分為兩種,布爾型盲注和時間型盲注,
布爾型盲注,以sqli-lab第8關為例:
1、輸入id=1正常顯示,輸入id=123456顯示與正常不同,顯示為空,輸入id=1'不報錯,但是顯示也是為空
這里輸入id=1' 的時候,可能是兩種情況,一種就是1’被當做字串處理,資料庫查詢的就是id="1'",這樣資料庫中沒有這個值,所以查詢為空,跟id=123456相同,
另一種就是單引號被拼接進資料庫陳述句中,形成注入,然后前端沒有報錯資訊顯示,所以回傳為空,
2、通過構造sql注入語法來嘗試,發現這里就是存在sql注入,
我們已知的是1=1和1=2顯示不同,沒有其他任何資訊,這種情況下就稱為布爾型盲注,
3、布爾型盲注會利用到資料庫中的一些運算式:
length() :字串長度
substr():截取字串
ascii():字串的ascii編碼
4、布爾型盲注的要點就是通過不停發送資料包,對結果進行真偽判斷,從而得到正確結果,
a.1' and length(database())=1--+ 對當前資料庫名的字串長度進行確認,只有當最后的長度為正確長度時候,頁面就會回傳id=1時候的正確頁面,類似于1' and 1=1--+
通過burpsuite的fuzz方式得到資料庫長度為8
5、知道長度之后,就需要對字符進行確認,實際上原理都一樣
1' and substr(database(),1,1)='a'--+
通過database()這個運算式表現資料庫名,然后從左起第1位開始截取1個字符,以此類推,直到得到所有結果為止,
6、通過burpsuite的手工方式可以讓大家明白盲注的原理,但是盲注一般不推薦手工,但原理必需明白,只有明白了原理才能寫出盲注的自動化利用腳本,除了自己寫腳本外,也可以使用sqlmap之類的工具幫助你盲注,
時間型盲注
當不管我們如何輸入,頁面資訊都沒有任何變化的時候,不提供給攻擊者任何有用的資訊,這時候就只能嘗試時間型盲注,
時間型盲注就是在布爾型盲注的基礎上增加了時間的判斷,
時間盲注的關鍵函式是if(),sleep(),通過對布爾型注入的判斷,輔以時間延遲的方法,來最侄訓得注入結果,
以第9關為例:
1' and if(length(database())=1,sleep(5),1)%23
if(length(database())>1,sleep(5),1) 如果資料庫名字符長度大于1為真,則mysql休眠5秒,否則查詢1,
判定的方法就是根據請求回應的時間來判定,其他操作跟布爾型雷同,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/5089.html
標籤:其他
下一篇:SQL注入中的檔案讀寫
