盲注仍然要判断字符类型注入,可以根据页面的反应。
1 and 1=2 如果页面显示正常,那么就是字符型注入,因为如果是数字,不成立,会有异常。所以第一步仍是判断注入类型
盲注就是存在注入但是页面上没有任何回显 。
盲注分为布尔盲注和时间盲注。
布尔盲注
根据你注入的信息返回ture和false
首先我们要了解两个函数。
length() 判断字符串长度
例如
length((database()))>10
意思就是数据库的字符长度是否大于10
substr() 截取字符串
从第一位截取一个
例如
substr(database(),1,1)='k'
第一个1是截取的第一位值
第二个1是需要提取的字符数量
意思就是数据库的第一个字符是否是k
返回的是ascii码。
因为一个一个的判断过于繁琐,需要判断A-z和阿拉伯数字。
所以我们用了一个函数,Ascii()用来把所需要的字符转换成数字。
然后根据数字来判断字符。
例如
ascii(substr(database(),1,1))>10
意思就是截取库名的第一个字符,转换成ASCII后的数值是否大于10
然后用burp进行抓包,用炸弹,将第一个1和ASCII的值设为变量,进行跑包,这样一个一个的尝试,burp返回的length就不会相同
我们这里所用的都是判断条件
判断字符串的长度是否为10,因为盲注的页面是没有回显点的,所以我们只能通过TRUE和FALSE 来根据界面是否报错或正长运行来判断我们所注入的数据是否正确。
查表的时候要注意两点
1.子查询
什么是子查询,我的理解是嵌套查询
意思就是比如说
length()这是一个判读字符串长度的函数。
length(select 列 from 表)
此时,我们要判断的是(select 列 from 表)这个语句后的结果的字符串长度。
所以,我们在其中要加一对括号,让它查询完(select 列 from 表)再输出字符串长度。
所以我们输出他的字段长度的正确方式是。
length((select 列 from 表))
2.limit 0,1
再者,这个已经用过很多次了,用来限制子查询的输出。
因为一个数据库不可能只有一个表,如果不加limit限制的话,查询的是哪一个表?后则的length函数该去判断哪一个表的字符长度?
故要加上limit限制子查询的输出
时间盲注
有的页面使用布尔盲注页面也无法改变。让人无法判断是否有注入点或则是否注入成功。
所以我们使用了一个函数sleep()
来让页面休眠。
还有一个函数是if
if(条件,条件成立执行,条件不成立执行)
and if(语句,sleep(5),1)
和布尔盲注一样设置变量,
column中有个receive respond 点开。
就可以看他的反应时间,也就是休眠时间来判断是否真确
大概流程
1.查库的字符长度
2.用burp查出库的ASCii值然后得出库名字
3.然后查表的数量
查表的数量要注意,因为是布尔盲注,所以查表的整个语句需要括起来,因为是整个表的查询结果去判断
4.查第一个表的长度
查表名字的时候也要注意
需要用到函数length和substr和limit
因为length()查的是整个表的长度,所以查出的长度是几个加起来表的长度。所以要用substr(要从中提取的字符串,起始位置,要提取的字符数)。如果省略了要提取的字符数,那么就是提取全部。再加上limit的限制是查询的第一张表
好,整个意思就是提取出所查询第一张表的所有字符串,来判断长度是否为多少。
注意子查询和括号
5.查第一个表的名字(第二个表名改limit就行了)
跟查表名一样。burp跑一下。
6.查列数量
where 限制条件加上数据库名字和表名字。
7.查第一列的长度
8.查列名