目录
本博客内容仅供学习探讨,请勿滥用乱用
1 概述
当改变浏览器带入给后台SQL的参数后,浏览器没有显示对应内容也没有显示报错信息时,无法使用union联合查询注入与报错注入,这时候可以试试看能否使用布尔注入。
布尔盲注:一般情况下,当带入参数为真和假时,页面会有不同的反映,比如有无显示也是一种不同,布尔盲注就是根据这种不同来反推我们输入的条件是真还是假。
2 布尔盲注的半自动化注入案例
2.1 实验平台
(1)靶机:——虚拟机(IP为172.16.1.1):本节实验靶场是在win2008系统上基于phpstudy搭建的一个sqli-labs漏洞靶场,win2008及phpstudy的安装过程可以参考《【语言环境】WAMP环境部署及优化—以win2008R2SP1为操作系统》,sqli-labs漏洞靶场的搭建可以参考《【环境搭建】基于WAMP环境的sqli-labs漏洞靶场的搭建》
。
(2)注入机:——kali虚拟机,为了方便发送Cookie,本实验利用BurpSuite来进行注入实验,BurpSuite的安装过程可以参考文章《【Burp Suite工具-1】BurpSuite简介及安装过程详解(含please supply the following JVM argument错误提示原因)》。
(3)靶机与kali虚拟机桥接到同一局域网中。
2.2 实验过程
2.2.1 注入前准备
(1)打开靶机虚拟机,并打开phpstudy,并启动。
(2)kali虚拟机上打开火狐浏览器,并使用火狐浏览器的访问靶机sqli-labs的Less8,打开页面如下。
(3)kali虚拟机,设置火狐浏览器的使用代理功能。设置步骤如下:单击浏览器右上角“菜单图标”,依次单击“Settings”→“Settings”→“设置网络代理”→“设置”→“手动配置代理”,示, 设置HTTP代理为127.0.0.1 , 端口为8080 ,与Burp Proxy 中的代理一致。
(4)kali虚拟机打开BurpSuite,进入Proxy工具,在BurpSuite工具的intercept界面开启 intercept is off.
2.2.2 判断注入点及注入类型
(1)判断页面是否回显数据库信息。在浏览器搜索栏URL后面输入参数?id=1
,仅有一句you are in没有显示其他具体信息。修改为?id=2
,也是同样结果。网页没有随id变化而动态显示不同的内容,所以无法使用union联合查询的注入手法。
(2)判断是否有报错提示,及注入属于数值型还是字符型。
- 1)修改参数为
?id=1'
,程序运行出错,没有给出错误提示。<fontcolor=Blue>无法判断是数值型注入还是字符型注入,也无法使用报错注入手法。
- 2)修改参数为
?id=1"
,网页显示正常。说明双引号必定不是闭合方式
- 3)修改参数为
?id=1'--+
,网页显示正常。说明该注入点为字符型注入,且为单引号闭合。
(3)判断是否有布尔类型状态。结合上述步骤2和3,无法使用union联合查询注入和报错注入,因此需要继续判断是否有布尔类型状态。
- 1)修改参数为
?id=1' and 1=1--+
,网页显示正常。
- 2)修改参数为
?id=1' and 1=2--+
,网页显示错误。
说明网页有布尔类型状态。因此可考虑布尔盲注。
综上所述,注入点为字符型注入,闭合方式为’,闭合采用–+,采用布尔盲注。
2.2.3 爆库名长度及库名
(1)在BurpSuite工具的intercept界面开启 intercept is on,重新加载浏览器中的的页面,让BurpSuite拦截到请求。
(2)将请求参数修改为?id=1%27%20and%20length(database())=10--+
,然后将请求右键发送到intruder模块(入侵模块),采用该工具对布尔盲注的参数进行爆破,能较大程度降低手工爆破的工作量。注意,url参数中单引号及空格都需要为url编码格式
(3)在intruder模块中的Target界面,确认目标主机及目标端口号。
(4)切换到intruder模块的posions界面,我们将需要爆破的参数用特殊符号**$**括起来(表示该参数为变量),像此处我们需要爆破的是库名长度的数字。
(5)切换至intruder模块的payloads界面,为步骤2的爆破对象选择一个待选集合,此处选择1~10即可,因为我们知道一般名字不会太长,如果不行后续再扩大范围也可以。选择后我们点击右上角的start attacks。
(6)对爆破结果进行排序,得到以下界面。这些结果中只要一个结果为真,其他都为假,因此可以得出库名的字符长度为8。
(7)在浏览器中的HackBar中输入参数?id=1' and ascii(substr(database(),1,1))=100 --+
。
(8)BurpSuite拦截到请求,将请求右键发送到intruder模块(入侵模块)。
(9)切换到intruder模块中的posions界面,将substr()函数的第二位参数和等号后面的数字添加特殊符号$,作为爆破对象,并将 attack type 选择为 cluster bomb。
(10)切换到intruder模块中的payload界面,分别为两个爆破对象设置待选集合。如下所示,设置后点击start attack。
注意,为了加快爆破的速度,可在options选项中设置多线程,如将线程设置为500.
(10)对爆破结果进行排序,对ascii码进行解码后可得库名为security。
2.2.4 爆表名、字段名以及账户及密码
与爆库名同理,我们先爆表名长度。再爆表名。
与爆库名同理,我们先字段名长度。再爆字段名。
与爆库名同理,我们先账户及密码长度。再账户及密码。
sql语句的构造可以具体参考《布尔盲注案例》,而利用BurpSuite工具进行半自动化注入的步骤与上述爆库名类似。
3 总结
(1)理解布尔注入的逻辑和原理。
(2)利用BurpSuite代替人工进行试错以减少工作量。
(3)爆破时建议使用ascii值来判断以区分大小写。
参考文章
[1] 《【SQL注入14】布尔盲注的半自动化实现(基于BurpSuite工具和sqli-labs-less8靶机平台)》