sqlmap的安装与使用

sqlmap 简介

sqlmap 是一个自动化的 SQL 注入工具,主要功能是扫描、发现并利用给定 url 的 sql 注入漏洞,内置了很多绕过插件,支持的数据库是 MySQL、Oracle、PostgreSQL、Microsoft SQL server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase 和 SAP MaxDB。

sqlmap 采用的 sql 注入技术

  • 基于布尔类型的盲注。可以工具返回页面判断条件真假的注入。
  • 基于时间的盲注。不能工具页面返回内容判断任何信息,要用条件语句查看时间延迟语句是否被执行来判断。
  • 基于报错注入。页面会返回错误信息,或者把注入的语句结果直接返回到页面中。
  • 联合查询注入。可以使用 union 的情况下的注入。
  • 堆查询注入。可以执行多条语句时的注入。

——
——

sqlmap 的安装

sqlmap 的安装需要 python 的环境,并且不支持 python3 ,python2 可直接到搜索下载安装。
如果已经装了 python3 不想卸载,可以有两者兼容的方法:https://blog.csdn.net/Goodric/article/details/115646211?spm=1001.2014.3001.5501

sqlmap官网下载 :http://sqlmap.org/
点击下载压缩包。
在这里插入图片描述
将文件解压在 python 的安装路径下。
如我的是在 E 盘的 Python27 文件夹下。
在这里插入图片描述
然后在 cmd 命令行里先进入这个目录,再执行语句。
为了方便,我们可以在桌面右键创建一个快捷方式。
对象位置填写 cmd 。
在这里插入图片描述
名称根据自己来定。
在这里插入图片描述
创建好后,打开这个快捷方式的属性,修改起始位置为 sqlmap 的文件路径。
在这里插入图片描述
这样点击快捷方式就已经在路径下了,不用每次 cd 进入文件路径。
然后输入命令:

sqlmap.py

可以看到 sqlmap 成功运行了。
我这里因为同时装了 python2 和python3 ,所以需要在语句前加上 python2 ,不然系统无法自己识别。
所以后面的命令测试都在前面加了 python2 ;如果只装了一个 python2 而没有装 python3 ,就可以不用加,直接 sqlmap.py 后面接命令。
在这里插入图片描述
——
——

sqlmap 入门

判断是否存在注入

这里用本地的 sqli-labs 靶场测试:http://sqli-labs/Less-1/?id=1
构造语句:

python2 sqlmap.py -u http://sqli-labs/Less-1/?id=1

如果注入点后面的参数大于等于两个时,需要加双引号,如:

python2 sqlmap.py -u http://sqli-labs/Less-1/?id=1&uid=2 "

可以看到显示存在注入。
在这里插入图片描述

紧跟着上图,可以看到底下会有选择,会出现三个输入 [Y/n] ,一般默认按回车键即可。
第一处意为检测数据库可能是 MySQL ,是否需要跳过检测其他数据库
第二处意为在“ level 、riskl ”的情况下,是否使用 MySQL 对应的所有 payload 进行检测;
第三处意为参数 id 存在漏洞,是否继续检测其他参数。
在这里插入图片描述
——

判断文本中的请求是否存在注入

sqlmap 可以从一个文本文件中获取 HTTP 请求,这样就可以不设置其他参数(如 cookie 、post 数据等),
txt 文本中的内容为 web 数据包。
在这里插入图片描述
判断是否存在注入,构造命令( -r 一般在存在 cookie 注入时使用 ):
python2 sqlmap.py -r C:\Users\Goodric\Desktop/1.txt
在这里插入图片描述
——

查询当前用户下的所有数据库

用前面的命令确定网址存在注入点后,接下来可以利用确定了的注入点查询当前用户下的所有数据库
(前提:当前用户有权限读取包含所有数据库列表学习的表)
构造命令:

python2 sqlmap.py -u http://sqli-labs/Less-1/?id=1 --dbs

得到所有数据库
在这里插入图片描述
——

获取数据库中的表名

查询出数据库名后,再查询指定数据库中的所有表名。
命令中 -D 参数用来指定某一个具体的数据库,如果不使用,就会列出所有数据库中的所有表。
构造命令:

python2 sqlmap.py -u http://sqli-labs/Less-1/?id=1 -D sys --tables

得到 sys 数据库中的 101 个表名。
在这里插入图片描述
——

获取表中的字段名

查询完表名后,查询某个指定表中的字段名。
构造命令:

python2 sqlmap.py -u http://sqli-labs/Less-1/?id=1 -D sys -T
host_summary --columns

命令中的 -T 时 --tables 的缩写。
得到 host_summary 表中的所有字段名。
在这里插入图片描述

后续的注入中,–columns 缩写成 -C ,就像前面的 --tables 缩写成 -T 。

——

获取字段内容

查询完字段名后,再进行获取字段中的具体数据信息。
构造命令:
python2 sqlmap.py -u http://sqli-labs/Less-1/?id=1 -D sys -T host_summary -C host,statements -dump

得到字段 host 和 statements 的具体数据。
在这里插入图片描述
——

获取数据库的所有用户

前提:当前用户有权限读取包含所有用户的表的权限。
使用该命令可以列出所有管理用户。
构造命令:

python2 sqlmap.py -u http://sqli-labs/Less-1/?id=1 --users

得到数据库中的所有用户 。
在这里插入图片描述
——

获取数据库用户的密码

如果当前用户有读取包含用户密码的权限,会先列举出用户,然后列出 Hash。
该命令的作用是列出数据库用户的密码。
构造命令:

python2 sqlmap.py -u http://sqli-labs/Less-1/?id=1 --passwords

这里出现了几个选项。
第一个意为是否将哈希存储到临时文件,以便最终使用其他根据进行进一步处理。
第二个意为是否要对检索到的密码哈希执行基于字典的攻击。
第三处是选择用哪本字典:

[1]自带的字典(点击回车即可)
[2]自定义字典
[3]包含字典文件列表的文件
第四处意为是否使用通用密码后缀。

我这里是一直回车下去,即最终选择了自带的字典。
前两个用户名密码显示这不是可以在自带字典里使用的有效密码
得到第三个用户 root 的密码为 root 。
在这里插入图片描述
——

获取当前网址数据库的名称

该命令可以列出当前网址使用的数据库
构造命令:

python2 sqlmap.py -u http://sqli-labs/Less-1/?id=1 --current-db

得到当前网址数据库为 security 。
在这里插入图片描述
——

获取当前网址数据库的用户名称

该命令可以列出当前网址使用的数据库用户。
构造命令:

python2 sqlmap.py -u http://sqli-labs/Less-1/?id=1 --current-user

得到用户为 root 。
在这里插入图片描述

——
——

sqlmap 参数举例

- -level 5 :探测等级

参数 --level 5 指需要执行的测试等级,一共有 5 个等级(1~5),可不加 level ,则默认为 1 .

level 2 :cookie 注入
level 3:user-agent 、referer
level 5:host

5 级包含的 payload 最多,会自动破解出 cookie 、XFF 等头部注入,不过运行的速度也最慢。

——

- -is-dba : 当前用户是否为管理权限

该参数用于查看当前账户是否为数据库管理员账户。
构造命令:

python2 sqlmap.py -u http://sqli-labs/Less-1/?id=1 --is-dba

可以看到结果为 True 或者 False 。
在这里插入图片描述

——

- -roles : 列出数据库管理员角色

如果用户有权限读取包含所有用户的表,该命令会列举出每个用户的角色,还可以用参数 -U 指定想看哪个用户的角色。
命令像这样:

python2 sqlmap.py -u http://sqli-labs/Less-1/?id=1 --roles

不过,该命令适用于当前数据库是 Oracle 的时候。
然后我这里测试数据库为 MySQL ,可以看到下图中出现黄色字体的警告,意为在 MySQL 上,roles 的概念不存在,不过 sqlmap 还是会为我们枚举权限,而不是获取数据库用户权限。
在这里插入图片描述
——

- -referer : HTTP Referer 头

sqlmap 可以在请求中伪造 HTTP 中的 referer ,当 --level 参数设定为 3 或 3 以上时,会尝试对 referer 注入。
如使用命令:

python2 sqlmap.py -u http://sqli-labs/Less-1/?id=1 --referer http://www.baidu.com

–sql-shell : 运行自定义 sql 语句
该命令用于指定的 sql 语句。
如要执行语句:

select * from users limit 0,1

先构造命令:

python2 sqlmap.py -u http://sqli-labs/Less-1/?id=1 --sql-shell

执行了命令后,会给出一行让我们输入所要执行的命令,就在对我们的自定义命令进行执行。
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐