0x00 SQLmap介绍

Sqlmap 是一种开源的渗透测试工具,可以自动检测和利用 Sql 注入漏洞以及接入该资料库的伺服器。它拥有非常强大的检测引擎、具有多种特性的渗透测试器、通过资料库指纹提取访问底层文件系统并通过外带连接执行命令,使用 Sqlmap 工具将极大的简化我们的测试工作量。

Sqlmap 是一个自动化的 SQL 注入工具,其主要功能是扫描、发现并利用给定的 Url 的 Sql 注入漏洞,目前支持 MySQL、 Oracle、 PostgreSQL、 Microsoft SQL Server、 Microsoft Access 等主流资料库。 Sqlmap 使用 5 种 SQL 注入技术(不加参数默认测试所有注入技术):

基于布尔的盲注,即可以根据返回页面判断条件真假的注入。

基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断。

基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。

联合查询注入,可以使用union的情况下的注入。

堆查询注入,可以同时执行多条语句的执行时的注入。

我们依然使用之前phpstudy搭建的web伺服器进行测试,进入 Firefox 浏览器,输入网址 : localhost/dvwasql , 点击create/Reset Database创建资料库

0x01 SQLmap常见命令

-u

指定Sql注入测试的url

-b

获取DBMSbanner

-m

从文本中载入目标请求

-g

从google的搜索结果中测试

--data

把数据以post方式提交

--cookie

设置cookie的值

-–current-db

获取当前资料库

-–current-user

获取当前用户

--string

匹配页面中的字元串

–-users

枚举DBMS用户

–-password

枚举DBMS用户密码hash

–-dbs

枚举DBMS中的资料库

-D

要枚举的DBMS资料库

–-tables

枚举DBMS资料库中的数据表(和-D组合使用)

-T

要枚举的DBMS资料库表

–-columns

枚举DBMS资料库表中的所有列(和-D-T组合使用)

-C

要枚举的DBMS数据表中的列(和-D-T-C组合使用)

–-dump

获取DBMS数据表项

–-privileges

查看许可权

–-privileges-Uroot

查看指定用户许可权

–-os-cmd=whoami

执行系统命令

–-os-shell

系统交互shell

–-os-pwn

反弹shell

–-reg-read

读取win系统注册表

–-dbs-o「sqlmap.log」

#保存进度

当使用 Sqlmap 检测一个指定 Url 时,它会执行一下操作:

  • 判断是否有可注入的参数
  • 判断可以用哪种 Sql 注入技术来注入
  • 识别出目标使用哪种资料库
  • 按照用户选择,读取目标数据

0x02 SQLmap使用实战

开始测试

按Fn+F12打开firebug,输入122,查看friebug数据包cookie,也可以通过burpsuite挂代理获取cookie

cookie 是网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的加密数据,每个浏览器分配到的都不相同

使用如下命令进行初步检测:sqlmap.py -u localhost/dvwasql/vulne --cookie 「security=low,PHPSESSID=1bsvnknp0he5jo5r4pr1sitnk7」 --batch

--batch 自动检测

从上图可以看到 Sqlmap 已经获取到了如下信息:

  • DBMS 使用的是Mysql
  • Web 伺服器操作系统是 Ubuntu 15.10
  • Web 容器是 Apache 2.4.12
  • Mysql 版本大于等于 5.0

当使用 Sqlmap 检测一个指定的 Url 后,它会将结果保存在本地,这样我们下次在检车这个 Url 的时候就可以立刻返回信息,节约大量时间。

0x03 进一步获取信息

使用-b --current-db --current-user 命令来分别获取伺服器 banner 信息、当前资料库和当前用户:

python sqlmap.py -u "localhost/html/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low;PHPSESSID=ckrut2fabboullumpfq8kuo561" -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=ckrut2fabboullumpfq8kuo561"--users --password

从上图可以看到 Sqlmap 已经成功枚举出 DBMS 的所有注册用户和对应密码 hash 值,知道了hash值用解密工具破解就可以了

0x04 使用SQLmap枚举资料库

使用 --dbs 命令枚举 DBMS 中的所有资料库名:

python sqlmap.py -u "localhost/html/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie "security=low;PHPSESSID=ckrut2fabboullumpfq8kuo561"--dbs

从上图可以看到该 DBMS 有以下资料库

dvwa

information_schema

mysql

performance_schema

我们可以选择感兴趣的资料库进一步获取信息,这里我们选择 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,password" --dump

从上图可以看到,Sqlmap 会以表格的形式显示对应栏位的数据,非常直观。

Sqlmap 最常用的基础命令就是这些了,有兴趣的同学可以再试试其他命令看看能获取到什么信息。


推荐阅读:
相关文章