SQL注入(SQL注入(SQLi)攻击)攻击-布尔盲注
頁面沒有顯示位 , 沒有報錯信息 , 只有成功和不成功兩種情況時 , 可以使用布爾盲注
本次以 SQLi LABS 第9關為案例進行講解
?
布爾盲注常用的兩個函數(我覺得)
length('abc')? -- 判斷字符串長度 substr('abc',1,1) -- 截取字符串,從第1個字符開始截取,截取1個?
第一步,判斷注入類型
先正常輸入一個?id=1 , 正常登錄 you are in
我們再給一個不存在的id , ?id=-1 , id肯定不能為負數,數據庫查不到,肯定是登錄不成功
?
只有登錄成功和失敗兩種情況 ,??頁面沒有顯示位也沒有報錯 , 滿足布爾盲注的條件
接下來測試注入點 , 已知id=1時可以正常登錄 , 我們給它加個單引號' , 看會不會對結果造成影響
?
登錄失敗 , id=1正常登錄 , 但加了個單引號' 就登錄失敗 , 說明單引號' 會影響SQL的執行,即?存在注入
我們再加一個true , 使SQL恒成立 , 又登錄成功了
?
改成false , 使SQL恒不成立 , 又登錄失敗了
?
至此 , 我們可以確定 , 后端的SQL使用單引號' 來包裹參數 , 固 單引號字符串型注入
第二步,脫庫
我們使用 length() 判斷當前使用的數據庫的名字的長度
?id=1' and length(database())>1 -- a?如果數據庫名字的長度大于1 , 那上面的 length(database())>1 的結果就是 true , 也就是這樣
?id=1' and true -- a使SQL恒成立 , 從而登錄成功
?長度從1開始測試 , 每次加一個長度 , 當長度不滿足條件時 , 比如
?id=1' and length(database())>8 -- a如果長度不大于8 , 那 length(database())>8 的結果就是 false , 也就是這樣
?id=1' and false -- a使SQL恒不成立 , 從而登錄不成功 , 由此我們可知 , 數據庫名字的長度為 8
判斷完長度以后 , 我們再猜數據庫的名字?
?id=1' and substr(database(),1,1)='s' -- a使用substr() 截取數據庫名字的第1個字符,猜是不是 's' 這個字符 , 如果是 , 那 substr(database(),1,1)='s' 的返回結果就是 true , 變成下面這樣
?id=1' and true -- a使SQL恒成立 , 從而登錄成功
如果不是 's' 這個字符 , 則會登錄失敗
猜中第1個字符以后 , 再猜第2,3...個字符 , 直到猜出整個名字
而后根據此方法 , 可猜出整個數據庫的完整信息(可能時間會比較長...)。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的SQL注入(SQL注入(SQLi)攻击)攻击-布尔盲注的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SQL注入攻击(SQL注入(SQLi)攻
- 下一篇: SQL Server语句大全(增删改查数