盲注就是在SQL注入过程中,SQL语句执行后,查询到的数据不能 回显到前端页面。此时,我们需要利用一些方法进行判断或者尝 试,这个过程称之为盲注。而布尔盲注就是SQL语句执行后,页面 不返回具体数据,数据库只返回0或者1(真or假)。类似于无法开口说话的人,只能通过点头和摇头来告诉你答案的正确与否。
布尔盲注的特性
在页面中,如果正确执行了用户构造的 SQL 语句,则返回一种页面,如果 SQL 语句执行错误,则执行另一种页面。基于两种页面, 来判断 SQL 语句正确与否,达到获取数据的目的。
正常的页面
查询不到的页面
布尔盲注的基本流程
1>判断是否存在注入
2>获取数据库长度
3>逐字猜解数据库名
4>猜解表名数量
5>猜解某个表名长度
6>逐字猜解表名
7>猜解列名数量
8>猜解某个列名长度
9>逐字猜解列名
10>判断数据数量
11>猜解某条数据长度
12>逐位猜解数据
攻击过程
判断是否存在注入
第一步:正常查询,返回True(语句执行成功)或者返回False(语 句执行成功没有查询到内容)
第二步:输入引号进行看页面变化,页面返回False,可能存在漏 洞,也可能没有查询到内容
第三步:利用and进行判断,比如:1 and 1=1和1 and 1=2,1’ and 1=1#和1’ and 1=2#,如果前者执行的结果不一样,说明是数字型的 布尔盲注,如果后者执行的结果不一样,说明是字符型的布尔盲注。
select * from users where id=1 and 1=1;
select * from users where id=1 and 1=2;
select * from users where id='1' and 1=1#';
select * from users where id='1' and 1=2#';
获取数据库长度
因为无法通过页面数据回显获取数据,所以只能靠判断对错的方式来获取数据,可以使用MySQL中内置的length()函数获取长度
length() 是一个用来获取字符串长度的内置函数。
char_length():在mysql内置函数里面查看字符串长度的还有一个函数是char_length()。
这两个函数的区别是:
a)、length(): 单位是字节,utf8编码下,一个汉字三个字节,一个数字或字母一个字节。gbk编码下,一个汉字两个字节,一个数字或字母一个字节。
b)、char_length():单位为字符,不管汉字还是数字或者是字母都算是一个字符。
这里我们先输入1,可以看到显示You are in.......
接下来输入2,还是一样的页面
接下来传入a,发现没有回显了
通过这两种状态,我们就可以进行判断
正常的页面
查询不到的页面