SQL注入之布尔盲注

布尔盲注简介


简介及使用场景:

在刚开始接触一个概念时,我们很容易顾名思义,所以在学习盲注之前的一段时间,着实不清楚盲注到底是什么。

我的理解中盲注的本质就是,在页面无法给我提供回显的时候的一中继续注入的手段。那什么是布尔型盲注呢?在我们输入and 1或者and 0,浏览器返回给我们两个不同的页面,而我们就可以根据返回的页面来判断正确的数据信息。

相关函数


length()函数:

length()函数的作用是返回字符串str的长度,以字节为单位。一个多字节字符算作多字节。这意味着,对于包含四个两字节字符的字符串,length() 返回8,  而 char_length() 返回 4

实例:select length('text'),如下图

substr()函数:

substr()函数从特定位置开始的字符串返回一个给定长度的子字符串

substr()函数有三个参数,用法为:substr(str,pos,len)

str参数代表待截取的字符串

pos参数代表从什么位置开始截取

len参数表示字符串截取的长度

实例:select substr('hello',1,1),如下图

其他与substr()函数作用相似的函数有mid()和substring()函数,其用法和substr()函数一致

实例:select substring('hello',1,1)select mid('hello',1,1),则都返回“h”

ascii()函数:

 ascii()函数可以输出某个字符的ascii码值,ascii码共127个,此处注意ascii函数处理单个字符,如果是字符串则会处理第一个字符

实例:select ascii('h'),如下图

注入实现


布尔盲注用到的函数length()、substr()和ascii()函数。

这里直接用数据库阐述原理,在实际中,如下面的例子注入点为id=1,我们已经无法使用union来直接查询,此处我们需要用到关键字and,我们知道只有and前后的条件都为真的时候,数据库才会输出结果。

判断数据库名的长度:

 首先我们来判断一下数据库的是几个字符,用到length()函数,此处选取的数据库名称为test,如下图所示当判断条件为大于4时,输出为Empty,当判断条件等于四时,输出了我们查询的数据,所以数据库名的字符个数为4。

实例:select user from test where id=1 and length((select database()))=4,其中(select database())为子查询,需要加括号,如下图

猜解数据库名:

我们已经知道了数据库名是四个字符,接下来我们可以使用substr()函数对数据库名的字符一个个截取。在通过ascii()函数判断字符的ascii码值,第一个字符的ascii码值为116,第二个为101,同养的步骤,第三个为115,第四个为116,然后和ascii码表比对,发现数据库名为test

实例:select user from test where id=1 and ascii(substr((select database()),1,1))=116,如下图

猜解表名:

表名我们可以根据系统自带库information_schema进行查询,同理需要用到子查询,此处用到group_concat()函数拼接字符串,在这里可以把查到的数据表名通过逗号拼接起来,先猜解一下拼接的字符串长度,我们在把字符串一个个截取,最后得到一个数据表为test

实例: select user from test where id=1 and length(select group_concat(table_name) from information_schema.tables where table_schema=database())=4,如下图

猜解字段:

字段的猜解,我们也需要用到系统自带库的columns表,用到的函数和猜解数据库名一致,分别是:length()、substr()、ascii()函数,最后得出有三个字段分别为:id、user和pw

实例:select user from test where id=1 and length((select group_concat(column_name) from information_schema.columns where table_name='test' and table_schema=database()))=10,如下图

猜解数据:

表中数据的猜解,与上述方法类似,此处不再赘述

自动化工具


1、sqlmap注入工具

可以直接使用自动化工具进行注入,可以直接简单点,语句大概是 

sqlmap -u http://xxx.xxx.xx.xx/xx.php?id=xx

复杂一点的语句可以尝试如下,random随机给一个请求头,delay多少秒尝试一次,也可以使用--safe-freq(后面跟一个数字,代表每隔几次访问一次正常链接)和thread(线程),technique可选择注入类型,dbms选择数据库,如果有防火墙可以跟上 --tamper

sqlmap -u http://xxx.xxx.xx.xx/xx.php?id=xx --random-agent --delay 3 --thread=3 --technique=B --dbms=mysql

2、Burp中的爆破模块


直接抓取输入,and ascii(substr(database(),1,1))=1的数据包,放到爆破模块

然后进行如下设置

点击有上角start attact,开始爆破,得到结果如下

暂时写这些吧

扩展


如果有时候,过滤了and 1=1,但是and 1或者and 0可以得到想要的页面,可以尝试 and 1-1方式进行盲注

如果都没办法,传参id如果是where后面的条件,可以直接使用id=3-1方式进行盲注,如下图

扩展


二进制右位移盲注:https://www.cnblogs.com/iamstudy/articles/8bits_sql.html

  • 9
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值