在firefox中启用插件Tamper Date for FF Quantum(原测试插件使用Tamper Date,而本博客撰写时已下架).
在DVWA的SQL injection模块中随意测试一个字符并提交,Tamper Date插件会抓取这个请求。
从这个抓取到的信息中获取URL和cookie。因为sqlmap扫描的时候会重定向要认证的页面,只有拿到当前的回话cookie,才能在这个漏洞页面进行持续扫描。
- 开始注入攻击
执行sqlmap -u '_url' --cookie='_cookie'
命令开始扫描。
参数:-u或者–url
格式:http(s://targeturl[:port]/[…]
HTTP cookie头
参数:–cookie,–load-cookies,–drop-set-cookie
这个参数在以下两个方面很有用:
1、web应用需要登陆的时候。
2、你想要在这些头参数中测试SQL注入时。
可以通过抓包把cookie获取到,复制出来,然后加到–cookie参数里。
在HTTP请求中,遇到Set-Cookie的话,sqlmap会自动获取并且在以后的请求中加入,并且会尝试SQL注入。
如果你不想接受Set-Cookie可以使用–drop-set-cookie参数来拒接。
当你使用–cookie参数时,当返回一个Set-Cookie头的时候,sqlmap会询问你用哪个cookie来继续接下来的请求。当–level的参数设定为2或者2以上的时候,sqlmap会尝试注入Cookie参数。
参考:https://www.cnblogs.com/hongfei/p/3872156.html
…扫描信息
出现两个询问信息:
第一个信息说明扫描到的后端数据库管理系统(DBMS)可能是MySql,询问是否要跳过测试其它的DBMS,这里选择y,跳过。
第二个询问在接下来的测试中是否要包含所有MySql扩展所提供的level 1和risk 1的测试,选择了y(写博客的时候认为应该选择n)。
Detection:
These options can be used to customize the detection phase
–level=LEVEL Level of tests to perform (1-5, default 1)
–risk=RISK Risk of tests to perform (1-3, default 1)参数:–level
共有五个等级,默认为1,sqlmap使用的payload可以在xml/payloads.xml中看到,你也可以根据相应的格式添加自己的payload。
这个参数不仅影响使用哪些payload同时也会影响测试的注入点,GET和POST的数据都会测试,HTTP
Cookie在level为2的时候就会测试,HTTP User-Agent/Referer头在level为3的时候就会测试。总之在你不确定哪个payload或者参数为注入点的时候,为了保证全面性,建议使用高的level值。 风险等级
参数:–risk
共有四个风险等级,默认是1会测试大部分的测试语句,2会增加基于事件的测试语句,3会增加OR语句的SQL注入测试。
在有些时候,例如在UPDATE的语句中,注入一个OR的测试语句,可能导致更新的整个表,可能造成很大的风险。
测试的语句同样可以在xml/payloads.xml中找到,你也可以自行添加payload。
参考:https://www.cnblogs.com/hongfei/p/3872156.html
从扫描信息中可以看到已经扫描出了一些可注入的漏洞。
出现一条询问信息,信息说明参数id存在sql注入点,是否继续测试,选y。
出现一条询问信息,大概就是建议不要继续测试了,询问是否跳过,选y。
最后得到扫描结果,包括注入点,后台数据库版本,服务器操作系统版本,使用的web技术,并将数据信息存放到/root/.sqlmap/output/www.dvssc.com文件中。
- 获取数据库名
执行命令sqlmap -u '_url' --cookie='_cookie' --dbs -v 0
获取数据库名
–dbs Enumerate DBMS databases
-v VERBOSE Verbosity level: 0-6 (default 1)
0:只显示python错误以及严重的信息。
1:同时显示基本信息和警告信息。(默认)
2:同时显示debug信息。 3:同时显示注入的payload。
4:同时显示HTTP请求。
5:同时显示HTTP响应头。
6:同时显示HTTP响应页面。
使用sqlmap的–dbs选项就可以根据所识别的不同数据库管理系统类型,来探测所包含的的数据名称,除了发现Mysql默认的系统数据库information_schema之外,在结果中显示了web应用的数据库,dvwa。
- 获得表名
执行命令sqlmap -u '_url' --cookie='_cookie' -D dvwa --tables
获取表名。
-D DB DBMS database to enumerate
–tables Enumerate DBMS database tables
从执行结果中可以看到数据库dvwa中的两个数据表,guestbook和users,且扫描结果已存入文件中。
- 获取表中的字段
执行命令sqlmap -u '_url' --cookie='_cookie' -D dvwa --tables -T users --columns
获取users表中的列名。
-T TBL DBMS database table(s) to enumerate
–columns Enumerate DBMS database table columns
执行结果成功获取了表users的字段,可以看到其中包含password字段。
- 导出password列的内容
执行命令sqlmap -u '_url' --cookie='_cookie' -D dvwa --tables -T users --columns --dump
获取users表中password列的数据。
–dump Dump DBMS database table entries
执行结果出现两个询问信息:
第一条询问是否要将hash存入一个临时的文件,选择y。
第二条信息询问是否要基于字典进行**,选择n(如果有好的字典可以选择y)。
执行结果成功的将数据保存到了本地文件,也就是所谓的“拖库”,但是这个数据库保存的密码进行了加密。(看字段形式可以判断是MD5?)
最后进行使用MD5彩虹表**密文形式的密码。
所有保存的文件都在/root/.sqlmap/output/www.dvssc.com目录下。