当前位置:   article > 正文

SQLMap 从入门到入狱详细指南

sqlmap要学多久

SQLMap 是一个开源的渗透测试工具,可以用来进行自动化检测,利用 SQL 注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。

本场 Chat 主要内容,SQLMap 支持五种不同的注入模式:

  • 基于布尔的盲注,即可以根据返回页面判断条件真假的注入;
  • 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断;
  • 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中;
  • 联合查询注入,可以使用 Union 的情况下的注入;
  • 堆查询注入。

通过本场学习,您将了解到 SQLMap 这款工具的高级使用技巧,您将熟练掌握 SQLMap 工具的使用来进行 SQL 注入漏洞检测。

SQLMap 是什么

SQLMap 是一个开源的渗透测试工具,可以用来进行自动化检测,利用 SQL 注入漏洞,获取数据库服务器的权限。它具有功能强大的检测引擎,针对各种不同类型数据库的渗透测试的功能选项,包括获取数据库中存储的数据,访问操作系统文件甚至可以通过外带数据连接的方式执行操作系统命令。

同时它也支持五种注入模式:

  1. 基于布尔的盲注,即可以根据返回页面判断条件真假的注入;
  2. 基于报错注入,即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中;
  3. 基于时间的盲注,即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加)来判断;
  4. 联合查询注入,可以使用 union 的情况下的注入;
  5. 堆查询注入,可以同时执行多条语句的执行时的注入。

通过本课的学习,您将熟练掌握 SQLMap 工具的使用来进行 SQL 注入漏洞的检测。

SQLMap 的安装

因为我本机 Windows10 已经安装过 SQLMap 了,所以用 Windows8 的虚拟机进行演示安装。

SQLMap 官网地址:http://sqlmap.org/

因 为SQLMap 是一款跨平台的工具,基于 Python,所以电脑里要先安装 Python 环境。

下载版本我推荐下载 2.7.15 版本,32 还是 64 根据自己的电脑实际配置选择:

https://www.python.org/downloads/release/python-2715/

enter image description here

enter image description here

在 Python 环境安装完后可以直接进行 SQLMap 的安装了,地址已经附上,直接下载软件包。

enter image description here

安装完后直接在软件包里打开一个 CMD 窗口,命令:sqlmap.py -h,看是否返回了信息,如图所示即正常运行。

SQLMap 在 Linux 平台安装

SQLMap 在 Kali 平台已经是包含在内了。

Git clone:https://github.com/sqlmapproject/sqlmap.git

SQLMap 常用命令

SQLMap 算是比较好学的一个工具,因为实际的日常使用里,用不到的的还是占比较多的...

enter image description here

通过 SQLMap 的 hh 命令你可以看到 SQLMap 里面的各种命令的介绍,下面我将介绍常用的命令。

1. 输出等级 V

V 这个命令,在 SQLMap 里可以理解成是一共输出的信息,他的测试等级是非常多的,一共分了七个等级出来,这七个等级在测试的时候会在界面里返回不同的内容。

默认是 1,也可以在命令后指定 -v 3 就是等级 3 的输出。

0:只显示 Python 的 tracebacks 信息、错误信息 [ERROR] 和关键信息 [CRITICAL];1:同时显示普通信息 [INFO] 和警告信息 [WARNING];2:同时显示调试信息 [DEBUG];3:同时显示注入使用的攻击荷载;4:同时显示 HTTP 请求;5:同时显示 HTTP 响应头;6:同时显示 HTTP 响应体。

推荐大家在初学的时候指定为 3 等级,这样会给出 payload,方便于学习。

2. 指定目标 U

使用参数 -u–url 指定一个 URL 作为目标,该参数后跟一个表示 URL 的字符串,还可以指定端口,如:

sqlmap.py -u "www.baidu.com/user.php?id=7"sqlmap.py -url "www.baidu.com:8080/user.php?id=7"
3. 列库 dbs

在检测出了存在注入后,就要进行对数据库的列举,命令是 --dbs

4. 列表 tables

在列出了 Web 程序的库后,要根据这个库来列出表,命令是 -D ‘库名’ --tables

5. 列出表中字段 columns

得到了库和表之后,可以根据这个库表来列出表里的字段进行数据的读取,命令是 -D ‘数据库名字’ -T ‘表的名字’ --columns

这样直接讲命令未免有些枯燥,我用一个 SQL 注入实例来进行讲解。

SQLMap 使用实例

1. 指定目标 URL 进行测试

enter image description here

首先使用 sqlmap -u 进行把你怀疑存在注入的 URL 放进 SQLMap 里让他进行自动化的测试。

enter image description here

SQLMap 识别后端数据库为“MySQL”是否要继续进行测试,我这里输入了 3,意味着提高测试等级为 3 级,测试等级 level 并不是我们前面所说的输出信息等级,后面会详细的讲。

enter image description here

后面 SQLMap 开始测试数据库的版本号,并且问我需不需要进行联合字符的注入测试,我这里选了 yes。

enter image description here

测试完毕后,SQLMap 提示 get 方式的 ID 参数存在注入,并且有两种注入方式。

基于布尔的盲注和基于时间的注入,最后得到了信息:

URL存在SQL注入,并且有两种,基于布尔和时间。数据库后端为:MySQL 5.0.12或者更小。服务器信息为:Windows 2003软件环境为:PHP 5.4.45,ASP.NET,IIS6.0环境。

获得了注入点之后,就可以进行对敏感数据的读取,命令在先前已经说过了。

enter image description here

因为是基于盲注的,所以读库的时候并不会很快速,而且一个个的慢慢去列。这里一共列出来四个库,查看一下该 Web 程序使用的什么库。

使用命令: --current-db

enter image description here

得到了这个应用程序使用的是 ztbase 库,接下来只要针对这个库进行操作就可以了。

enter image description here

这里我使用的 -D tables 参数。

但是是用了字典的方式去尝试暴力列举他的表名。

enter image description here

得出了五个表,对里面的随机一个进行读数据操作。

enter image description here

这个表是的数据比较多的,然后为了方便演示过程就直接取了一共 ID 进行读取,从图中可以看到,ID 的内容均已被读出来,在这行命令的后面还可以加上 --dump 将结果保存下来。

另外还有几个常用的命令可以了解一下。

--users 列出所有的用户--passwords 列出数据库用户账号和密码

enter image description here

enter image description here

这里并没有列出用户的密码,只列出了账号,可以推断用户的密码经过了加盐处理。

enter image description here

在另一个站里存在的注入类型有基于布尔,基于时间,联合注入。

enter image description here

通过对 admin 表进行读取,得到了 MD5 加密后的密码。

但是这个 MD5 码暂时解不开,只能进行读库。

SQLMap 的其他命令

1. level

刚开始在前面说了,level 算是一共注入测试等级,一共是五级,级别越高,检测的内容也就越多,检测级别大于等于 2 时会检测 cookie 是否有注入,检测级别大于等于 3 时会检测 User-Agent 和 Referer 是否有注入。比较推荐使用 3 等级进行测试。

2. os

OS 是检测数据库版本信息的一个命令,但是 SQLMap 默认会自动去检测。

3. *指定注入点

SQLMap 可以区分一个 URL 里面的参数来进行注入点测试,但在遇到了一些做了伪静态的网页就无法自动识别了。

/admin/1/ 类似于这种,SQLMap 便无法进行注入测试,但它实际上可能是这样的: /admin.php?id=1

它只是把参数隐藏在了 URL 中,对于这种网页,直接在参数后加上一个星号即可。

sqlmap.py -u "www.baidu.com/admin/1*"

星号之后,众生平等。

4. POST 数据

使用参数:-dota

在 URL 后跟上你要提交的 POST 数据,SQLMap 也会去自动测试。

sqlmap.py -u "http://baidu.com/admin.php" --data="id=1&name=admin"
5. cookie

使用参数:-cookie

这种方式多半来进行 cookie 的注入检测,设置比较繁琐,也可以像我之前所说的直接设置测试等级为 3,会自动测试是否存在 cookie 注入。

sqlmap.py -u "http://baidu.com/admin.php" --cookie "customerId=591edabaab5b52292042df8a"
6. 从文件载入 HTTP 请求测试

使用参数:-r

可以可以理解抓个包下来,获取 HTTP 请求然后保存在文件里,然后让 SQLMap 自己去解析请求来进行注入测试。

可以从 burp suite 上抓包下来配合 SQLMap 进行联合使用。

7. Google 搜索进行测试

使用参数:-g

SQLMap 会自动爬取谷歌上的搜索结果来进行注入,对带有 GET 参数的 URL 进行挨个测试,前提是你能够科学上网。

8. 超时延迟

使用参数:-timeout

默认的超时时间是 30 秒,可以使用命令 -timeout 31 来进行修改,比如修改为 31 秒超时。

9. 注入测试的脚本

使用参数:-tamper

SQLMap 是自带了一个脚本库的,内置的脚本库对 payload 进行了混淆,可能有些可以有效的规避防火墙规则。

enter image description here

在 SQLMap 的安装目录 tamper 文件夹内,脚本文件可以自己编写的。

SQLMap 用户手册

网上有一份根据官方提供的用户手册推荐初学者过一遍:

http://www.91ri.org/6775.html

工欲善其事必先利其器,用熟一款工具是先决条件。

这篇算是个很快速的入门过程,更加详细的内容请期待我针对 SQLMap 这款工具出的达人课内容。


本文首发于GitChat,未经授权不得转载,转载需与GitChat联系。

阅读全文: http://gitbook.cn/gitchat/activity/5b8df757916f654e2f9fd708

您还可以下载 CSDN 旗下精品原创内容社区 GitChat App ,阅读更多 GitChat 专享技术内容哦。

FtooAtPSkEJwnW-9xkCLqSTRpBKX

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/975895
推荐阅读
相关标签
  

闽ICP备14008679号