什么是盲注
在有些情况下,后台使用了错误消息屏蔽方法(比如@)屏蔽了报错,此时无法在根据报错信息来进行注入的判断。
这种情况下的注入,称为“盲注”。
根据表现形式的不同,盲注又分为based boolean和based time两种类型。
基于boolian的盲注主要表现症状
没有报错信息
不管是正确的输入,还是错误的输入,都只显示两种情况(我们可以认为是0或者1)
在正确的输入下,编入and 1=1/and 1=2发现可以判断
练习部分
打开pikachu靶场的基于boolian的盲注部分。输入人员名字allen查询。
看起来和之前的字符型注入有些类似。
试试之前在字符型注入使用过的攻击代码
name' or 1=1#
显示输入的username不存在,攻击代码失效了。
猜想是不是网页利用算法,检测到后面的or等关键字符时就显示失败。
输入
allen' and 1=1#
尝试一下
成功输出了结果,说明网页并没有屏蔽掉and 1=1#的代码,这段代码进入了sql数据库进行了运算菜能输出的allen结果。
可是这个网页不像之前的题目一样会输出别的信息,或者有别的按钮和接口给我们植入sql语句代码,遇到这种情况就要使用到盲注。
举例
allen' and ascii(substr(database(),1,1))<113#
这段sql语句的意思是有两个条件,一个是allen字符条件,一个在数据库名称中提取第2个字符,长度为1,如果这个字符的ascii码值低于113就满足此条件,两个条件都满足时,输出allen值。最后的#号消掉后面的单引号。我们输入到网页测试一下。
成功输出结果,说明第一个字符的ascii码值是小于113的。
根据此我们可以构建代码
allen' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))<113#
在表中提取选项的第一个字符。看他的ascii值是不是小于113。
成功。依据此我们多次构建sql代码就可以确定每一个字符的ascii码值。这里只做原理的示意不做完整作答了太繁琐。