布尔盲注
布尔很明显,它会根据你输入的数据返回ture或者fales,也就没有之前的报错信息了
这里我们需要引进几个变量:
length() 函数 返回字符串的长度
substr() 截取字符串 (语法:SUBSTR(str,pos,len);)
ascii() 返回字符的ascii码
比如我们在实战中,当页面没有回显,而写我们想要知道当前数据库的名字怎么办呢,这时候我们可以先判断数据库名字的长度。利用length函数
比如:我们可以利用比较符号判断数据库名称长度
id=1?And (length(database()))>9-- a
在得到长度之后我们可以利用substr函数截取字符串然后判断当前字段的ascii码与ascii码表中的是否对应
比如:
and (ascii(substr(database(),1,1)))=115-- a返回正常,说明数据库名称第一位是s
and (ascii(substr(database(),2,1)))=101-- a 返回正常,说明数据库名称第二位是e
这里所用的原理和判断名称长度是一样的,可以利用比较符号判断出来对应的字符,英文26为字母以及字符在ascii表中都有对应的十进制数值这里附上一张样图
时间盲注
时间盲注只会返回ture,无论输入任何值,返回的结果都会安扎正常数值来执行,加入特定的时间函数,通过查看web页面反应的时间差来判断注入的语句是否正确。
sleep() 将程序挂起一段时间n为n秒
if(expr1,expr2,expr3) 判断语句 如果第一个语句正确就执行第二个语句如果错误执行第三个语句
ascii() 返回字符的ascii码
比如说在实战过程中,当你遇到无论输入什么页面就是没有变化的情况,我们也不能通过判断页面变化来确定语句是否执行成功,这时候我们就可以利用时间函数判断语句是否成功执行
比如:判断页面是否存在注入点
?id=1 and sleep(5) -- a
当页面刷新出现延迟的时候说明我们的语句成功执行了,也就确定这个位置存在注入;
当然单单利用时间函数并不能达到我们想要的效果,我们的目的是为了查询数据,这时候我们就可以用到
if(expr1,expr2,expr3)函数,把if(expr1,expr2,expr3函数和时间函数结合,可以更好的执行我们想要的效果,
比如:
and if(ascii(substr(database(),1,1))>120,0,sleep(10))-- a
这条语句表示当前数据库名称的第一字符是否大于ascii表对应的十进制120,如果是页面就会延迟刷新10秒,如果不是就没变化。