现在一般情况下,大多数的网站都不会将错误回显出来,这时候我们是不知道有注入点,以及得到相关信息的。这个时候就需要我们判断是否存在注入,若存在注入那么这时候就需要采取盲注的方式来获得数据。
盲注又分为Boolean盲注和时间型盲注,本关要讲的是Boolean盲注。
Boolean盲注是基于真假的判断,它有几种判断方式:
通过长度判断:length():length(database())>=x
通过字符判断:substr():substr(database(),1,1)=’s’
通过ascll码判断:ascii():ascii(substr(database(),1,1))=x
由于我们直接在浏览器上不容易观察到结果,而且需要用跑字典的方式来破解,因此我们需要使用代理。我这里用burp-suite来演示。
下载安装很简单就不说了,直接进入正题!!
首先在浏览器上配置代理,以火狐浏览器来讲,进入设置选项,找到网络设置,界面如下:
勾选手动配置代理,只需要将本机环回地址填入第一行就OK了,然后点击下面确定。
然后便是设置burp-suit,点代理,点选项,确定接口是127.0.0.1:8080与浏览器配置的一样,代理就设置完毕了。
接下来开始着手第五关,同样滴,先判断存不存在SQL注入,以及注入类型。
http://127.0.0.1/sqli-labs-master/Less-5/?id=1 显示如下
http://127.0.0.1/sqli-labs-master/Less-5/?id=1’
报错了,进一步判断
http://127.0.0.1/sqli-labs-master/Less-5/?id=1’ --+
通过这几步,我们可以知道它是字符型注入,但是与前面几关的区别在于,它有报错信息,但是没有正确的回显信息,我们只能从浏览器上知道我们输入的注入语句是否是正确的。
接下来我们就用字符判断来爆数据
第一步,爆数据库
http://192.168.222.138/sqli-labs-master/Less-5/?id=1’ and substr(database() ,1,1)=‘s’ --+
Substr(database(),1,1)=’s’表示从database()的第1个字符开始取1个字符,如果取出的这个字符等于s,那么这个语句就会返回为真,否则为假。
点击运行之前,我们要打开burp-suit点击代理,然后点击拦截,这时再点击运行,浏览器的请求就会被拦截下来,如图:
由浏览器发送的get请求就被拦截了,(这个get请求包大家需要了解一下,第一行就是我们在浏览器输入的URL,只不过有些符号编码成其它形式了)然后单击右键选发送给intruder(即发送给测试器),然后切换到测试器,点击下方的位置按钮,出现如下界面:
我们可以看到上面有很多§这个符号,§s§表示s为一个变量,我们需要自己来控制变量,所以点击右边圈起来的将§清除。然后我们设置自己的变量,通过分析URL可以知道需要设置为变量的有两个,看图:
第一个变量表示取数据库的第几个字符,第二个变量则是去跟这个字符匹配,相等则会返回真。因此通过给两个变量设置相应的字典,就能够将数据库名一个字符一个字符的爆出来。具体操作如下:
设置了两个变量,需要将攻击类型变为集束炸弹
有效负载集表示的是第几个变量,1就表示我们设置的第一个变量,下面有效载荷选项就是为变量赋值,由于我们第一个变量只是整数,而且我们已经知道数据库长度就只选0-9,也可以自己添加更多,第二个变量是字符类型,我们就添加a-z,也可以添加更多。
载荷设置好之后我们就可以点击右上角的开始攻击了,最终结果我们通过长度排列一下,就可以明显的看出结果了,database()=security
第二步,爆表名
http://192.168.222.138/sqli-labs-master/Less-5/?id=1’ and substr((select table_name from information_schema.tables where table_schema=‘security’ limit 0,1) ,1,1)=‘s’ --+
同前几关一样,将database()换成SELECT语句就行,唯一的区别就是后面需要添加一个limit 0,1,因为一个数据库包含若干表,通过代理跑字典,只能一个表名一个表名的爆,因此它的作用就是控制输出表名的。每次攻击完后我们都需要自己去改limit0,1的值,limit 1,1,limit 2,1 …
跑字典方式就没啥说的了,跟上面一样。
第三步,爆字段
http://192.168.222.138/sqli-labs-master/Less-5/?id=1’ and substr((select columns from information_schema.columns where table_schema=‘security’ and table_name=’users’ limit 0,1) ,1,1)=‘s’ --+
第四步,爆数据
http://192.168.222.138/sqli-labs-master/Less-5/?id=1’ and substr((select username from users limit 0,1) ,1,1)=‘s’ --+
每个字段的数据爆一次,再爆password
Password里面由于有特殊字符,所以在加有效载荷的时候要注意一下!!!
这一关好像还可以用报错注入,大家可以自己尝试一下