SQL注入之布尔盲注

注入过程

1.判断注入类型

利用语句1 and 1=1和1 and 1=2以及1' and 1=1%23和1' and 1=2%23进行判断

数字型:1 and 1=1和1 and 1=2返回值不同

字符型:1' and 1=1%23和1' and 1=2%23返回值不同

由试验可知1' and 1=1%23和1' and 1=2%23返回值不同,故本题为字符型盲注

 2.获取数据库长度

使用 length( ) 函数获取数据库长度

当等于8的时候页面有返回,等于其他数字的时候页面没有返回,因此,我们可以确定此数据库长度等于8

3.获取数据库名

使用substr()函数

substr(string,start,length)string是要截取的字符串,start是从哪开始,length是截取的长度

注:MySQL中start从1开始

由上一步可知,数据库长度为8,所以需要逐字解析

因已知该数据名为security,故第一位尝试s正确,第二位尝试e正确,而在正常SQL注入中,我们需要逐字解析,需要注意的是数据库名的命名规则,通常由26个英文字母(区分大小写)和0-9的自然数加上下划线组成,多个单词用下划线隔开,除此之外,还可以把要猜解的内容转换为ASCII码值,然后使用ASCII函数,ASCII码对照表https://tool.oschina.net/commons?type=4,但一个个进行尝试过于麻烦,此时,可以用bp进行爆破,从33到126进行枚举,使用集束炸弹模式,如本题对string处和ASCII码值处添加§,前者添加0-9,后者添加33-126. 

如图,s对应的ASCII码值为115,故有返回

对请求包进行抓包

使用集束炸弹模式进行爆破

由爆破结果并对应ASCII表可知,数据库名为security

4.获取表名

(1)获取表的数量

使用count函数,具体语法格式如下图

由页面回显可知表数为4

(2)获取表的长度

获取数据库长度

可知表长为6

(3)获取表名

大致过程同获取数据库名,但需要注意的是若直接执行无返回,这是因为返回了多行会出现错误,此时需要加入limit来控制输出

想要让其一行一行输出,只需在后面添加limit 0,1即可,如果要获取第二个表,则把limit后的0换成1,第三个表则改为2

然后依次改变substr函数中的start即可,本题中对应的则是第一个1.

5.获取列名

具体方法参考获取表名

(1)获取表中列数

可知列数为2

(2)获取列名长度

可知列长为2

(3)获取列名

由爆破结果并对照ASCII码表可知列名为id

6.获取记录

(1)获取记录数

记录数为8

(2)获取记录长度

记录长度为1

(3)  获取记录具体内容

若要获取其他表记录,改变limit后的值即可,如获取第二个记录

对照ASCII表可知,记录为3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值