sqlmap自动化漏洞利用(DVWA初、中、高) 前两篇文章我们安装了kali并在我们物理机中安装靶场DVWA今天我们来看看如何用kali自带的工具sqlmap进行SQL注入漏洞利用。一、环境配备1.我们先在我们kali中打开DVWA打开方式为http://[DVWA所在主机IP]/DVWA例如DVWA所在主机IP为192.168.10.10则打开链接为http://192.168.10.10/DVWA。windows系统IP查询命令ipconfigLinux系统IP查询命令ifconfig。2.输入账号密码默认admin/password登录DVWA后点击DVWA Security首先将难度调整为Low。后续对中、高级测试时逐渐修改难度等级3.现在点击SQL Injection可以看到这里有输入接口同时我们也可以知道不同页面显示的访问地址不一样。我们在查询接口进行输入查询这时候生成的这个地址也就是我们的目标注入点如你的DVWA所在IP地址为192.168.10.10输入1进行查询则下面我们所提到的目标注入点就是http://192.168.10.10/DVWA/vulnerabilities/sqli/?id1SubmitSubmit#二、sqlmap使用###一DVWA初级1.打开Kali的sqlmap输入sqlmap -v可以看到它已经kali自带安装有了。2.注入探测测试指令sqlmap-u[目标注入点]我们可以看到它爆出了有SQL注入漏洞而且可以探测到数据库是mysql所在操作系统为windows。而当我们想探测它的数据库内容的时候则会要求我们做验证因为我们的DVWA是需要登录的。3.登录探测这时候我们知道DVWA账户密码并且已经登录了那我们就要把我们已经登录授权给到sqlmap。1在浏览器登录DVWA并转到我们的测试界面后打开火狐的开发者模式找到Network。2点击重新加载页面选择第一个数据包找到cookie值。3将cookie值复制下来进行登录探测检测指令sqlmap-u[目标注入点]--cookie[站点cookie]4.获取所有数据库名探测出有注入点又有了登录授权我们可以开始探测数据库里面的内容了。获取数据库名sqlmap-u[目标注入点]--cookie[站点cookie]--dbs可以看到列出了5个数据库的名称。5.获取指定数据库中表名我们可以看看dvwa数据库里面有哪些表。获取指定数据库表名sqlmap-u[目标注入点]--cookie[站点cookie]-D[数据库名]--tables可以看到有一个电子书表、一个用户表。6.获取指定表中的所有数据看到用户列表我们自然是要看一下的。可以直接查看用户表所有数据sqlmap-u[目标注入点]--cookie[站点cookie]-D[数据库名]-T[表名]--dump我们可以看到它列出了dvwa数据库users表里所有的数据包括账户名和加密存储的账户密码。7.获取指定表中列名如果遇到数据比较多的表全部列举出来会显示很乱我们可以先获取表中的列名。sqlmap-u[目标注入点]--cookie[站点cookie]-D[数据库名]-T[表名]--columns8.获取指定列数据我们知道列名之后就可以查询指定列的数据命令sqlmap-u[目标注入点]--cookie[站点cookie]-D[数据库名]-T[表名]-C[列名],[列名]--dump我们这里查询账户名和密码由于mysql数据库对密码字段做了哈希命令执行过程中会询问你是否进行解析我这里选了yes。这样我们就完成了一次使用sqlmap对dvwa简单级别的的sql注入测试成功拿到了dvwa的所有账户名和密码。###二DVWA中级上面我们对初级做了测试现在我们试一下对中级难度的DVWA是否同样可以进行注入呢。1.调整靶场难度等级为中级。2.确定注入点我们可以看到难度调整为中级之后数据请求方式由初级使用的get方式变成了post查询输入接口由手动输入变成了选择方式且在url不会直接显示我们的查询请求。3.这时候我们如果依然采用像初级一样的执行语句无法查询到任何注入点。它会告诉我们缺少请求输入字段数据。4.我们可以发现相比于初级网站查询时所给出的url缺少了“id1SubmitSubmit”字段这一字段不显示在url里而是包含在请求数据包里。5.我们将request字段加入我们的测试语句中sqlmap-u[目标注入点]--data[request]--cookie[站点cookie]6.查询账户名、密码测试语句sqlmap-u[目标注入点]--data[request]--cookie[站点cookie]-D[数据库名]-T[表名]-C[列名],[列名]--dump这时候我们就拿到了数据库的数据了。###三DVWA高级1.将DVWA难度调整为high之后我们可以看到high等级的输入查询在弹窗进行输入而数据显示确在原窗口进行显示。原窗口数据包请求方式为get弹出的输入窗口请求方式为post。2.这时候我们需要用到联合查询命令‘second-url’。测试语句sqlmap-u[数据提交页面url]--data[request]--second-u[数据显示页面url]--cookie[站点cookie]3.获取账户名、密码测试命令sqlmap-u[数据提交页面url]--data[request]--second-u[数据显示页面url]--cookie[站点cookie]-D[数据库名]-T[表名]-C[列名],[列名]--dump###三DVWA(Impossible)前面的初、中、高级其实都是通过限制数据输入来起到防护作用而我们在手工注入的时候通过使用burpsuit等抓包工具篡改数据包都是可以绕过它的限制的。Impossible等级则是在数据传到后端之后先进行了格式验证然后还使用了PDO预处理。人家都说了Impossible我们就等有能力了再挣扎吧目前是无法进行注入的。