基于布尔的盲注
Web的页面的仅仅会返回True和False。那么布尔盲注就是进行SQL注入之后然后根据页面返回的True或者是False来得到数据库中的相关信息。
由于本次是布尔注入,手注无法完整地进行脱裤。所以在本节需要编写大量的代码来帮助我们进行SQL注入,得到数据。所以在这章里面会有很多的Python代码。
本次的示例就是Less-8。
通过进行下面的语句的注入测试
http://localhost/sqlilabs/Less-8/?id=2'
http://localhost/sqlilabs/Less-8/?id=2"
http://localhost/sqlilabs/Less-8/?id=2\
进行测试的时候,只有在id=2'的时候页面无法显示内容。输入的语句如果符合要求,页面就会显示内容,但是显示的内容都是一样的。这种情况下页面上的输出对于我们来说是完全没有用的,包括SQL执行出错的信息都不会在页面上显示。这种情况下之前的通过执行SQL语句然后在页面上显示SQL执行之后返回的信息完全是不可能的啦。这种情况下就是一个典型的SQL盲注了。
我们通过页面是否显示内容来判断我们的SQL语句是否正确,进而猜解数据库的信息。
通过上面的注入测试,我们知道后台的SQL的注入语句的写法是:
select field from table where id='userinput'
id参数是被单引号包括的。其他的信息我们就无法得到了。
得到数据库的名称
在得到数据库的名称之前,首先需要得到数据库的长度
http://localhost/sqlilabs/Less-8/?id=2' and length(database())>1 %23
http://localhost/sqlilabs/Less-8/?id=2' and length(database())>2 %23
以此类推
.....
发现当值为8的时候,页面就没有显示。那么说明database()的长度是8。
得到了datbase()的长度之后,接下来就是得到database()的名称了。
这个时候就不能完全靠手注了,必须编写Python代码来完成。其中最主要就是进行大量的注入测试来判断程序执行正确和出错的时机,然后断定当前的值可能就是正确的值。
下面就是一个简单的使用Python来进行布尔盲注获取数据