布爾盲注
布爾很明顯,它會(huì)根據(jù)你輸入的數(shù)據(jù)返回ture或者fales,也就沒有之前的報(bào)錯(cuò)信息了
這里我們需要引進(jìn)幾個(gè)變量:
length() 函數(shù) 返回字符串的長(zhǎng)度
substr() 截取字符串 (語法:SUBSTR(str,pos,len);)
ascii() 返回字符的ascii碼
比如我們?cè)趯?shí)戰(zhàn)中,當(dāng)頁面沒有回顯,而寫我們想要知道當(dāng)前數(shù)據(jù)庫的名字怎么辦呢,這時(shí)候我們可以先判斷數(shù)據(jù)庫名字的長(zhǎng)度。利用length函數(shù)
比如:我們可以利用比較符號(hào)判斷數(shù)據(jù)庫名稱長(zhǎng)度
id=1?And (length(database()))>9-- a
在得到長(zhǎng)度之后我們可以利用substr函數(shù)截取字符串然后判斷當(dāng)前字段的ascii碼與ascii碼表中的是否對(duì)應(yīng)
比如:
and (ascii(substr(database(),1,1)))=115--?a返回正常,說明數(shù)據(jù)庫名稱第一位是s
and (ascii(substr(database(),2,1)))=101-- a 返回正常,說明數(shù)據(jù)庫名稱第二位是e
這里所用的原理和判斷名稱長(zhǎng)度是一樣的,可以利用比較符號(hào)判斷出來對(duì)應(yīng)的字符,英文26為字母以及字符在ascii表中都有對(duì)應(yīng)的十進(jìn)制數(shù)值這里附上一張樣圖

時(shí)間盲注
時(shí)間盲注只會(huì)返回ture,無論輸入任何值,返回的結(jié)果都會(huì)安扎正常數(shù)值來執(zhí)行,加入特定的時(shí)間函數(shù),通過查看web頁面反應(yīng)的時(shí)間差來判斷注入的語句是否正確。
sleep() 將程序掛起一段時(shí)間n為n秒
if(expr1,expr2,expr3) 判斷語句 如果第一個(gè)語句正確就執(zhí)行第二個(gè)語句如果錯(cuò)誤執(zhí)行第三個(gè)語句
ascii() 返回字符的ascii碼
比如說在實(shí)戰(zhàn)過程中,當(dāng)你遇到無論輸入什么頁面就是沒有變化的情況,我們也不能通過判斷頁面變化來確定語句是否執(zhí)行成功,這時(shí)候我們就可以利用時(shí)間函數(shù)判斷語句是否成功執(zhí)行
比如:判斷頁面是否存在注入點(diǎn)
?id=1 and sleep(5) -- a
當(dāng)頁面刷新出現(xiàn)延遲的時(shí)候說明我們的語句成功執(zhí)行了,也就確定這個(gè)位置存在注入;
當(dāng)然單單利用時(shí)間函數(shù)并不能達(dá)到我們想要的效果,我們的目的是為了查詢數(shù)據(jù),這時(shí)候我們就可以用到
if(expr1,expr2,expr3)函數(shù),把if(expr1,expr2,expr3函數(shù)和時(shí)間函數(shù)結(jié)合,可以更好的執(zhí)行我們想要的效果,
比如:
and if(ascii(substr(database(),1,1))>120,0,sleep(10))-- a
這條語句表示當(dāng)前數(shù)據(jù)庫名稱的第一字符是否大于ascii表對(duì)應(yīng)的十進(jìn)制120,如果是頁面就會(huì)延遲刷新10秒,如果不是就沒變化。