什么是布尔盲注
上一篇文章介绍了union的注入攻击,这次来介绍一下布尔盲注。
在注入时,我们输入代码,期望能够让数据库中的数据被我们所查询到,但是,有的时候,网页返回的结果并不是如我们所愿,当我们尝试查询数据库中的信息的时候,页面总是只返回两个结果——语句执行或者没有执行。这时候,就需要使用到布尔盲注的方式了,通过穷举的方式一步步推测出正确的用户名,密码之类的关键信息
布尔盲注的攻击方法
首先,和union的方法相同,我们首先测试是否存在SQL注入的漏洞。
判断完了是否存在漏洞,那么如何确定需要使用布尔盲注的方法呢?我们在测试是否存在SQL注入漏洞的时候输入的代码
id=1 and 1=1 和 id = 1' and 1=1
id=1 and 1=1 和 id = 1' and 1= 2
如果返回的页面只有正确和错误的话(这里可以使用burpsuit 抓包看一下)那么就确定使用的是布尔盲注的方法了。
确定了攻击方式,接下来就来获取数据库的名称吧
and length(database())>=1--+
以上代码在1的位置是随意修改的,这里就要让大家自己测试了。
获得了数据库的名称位数,由于不能直接查询,所以手工注入的话使用以下语句进行猜测:
and substr(database(),1,1)='t'--+
以上语句中字母t是可以改变的,通过一个一个字母的猜测,最终可以确定数据库的名称。
接着查询字段名称:
and substr((select table_name from information_schema.tables where table_schema='sql' limit 0,1),1,1)='a'--+
以上语句中sql指的是之前注入出来的数据库名称,a指的是猜测的第一个字段名的第一个字母。有关于limit语句的用法详见上一篇博客。
通过以上语句可以对字段名进行一个一个的猜测。最终可以确定所有的表名和字段名。
使用工具爆破
从上文的手工注入的过程就可以知道布尔盲注的手工过程是非常复杂的,所以我们使用工具进行注入,这里还是建议使用我们的神器burpsuit,操作方式就不放上来了。