介绍

简介

SQLMap 是一个开源的渗透测试工具,可以用来自动化检测,利用SQL注入漏洞,获取数据库的权限。
它的检测引擎非常强大,针对不同类型的数据库有不同的方案和选项,获取数据库中存储的数据。

目前支持 MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access 等数据库

输出级别

0:只显示python错误以及严重的信息
1:同时显示基本信息和警告信息(默认)
2:同时显示debug信息
3:同时显示注入的payload
4:同时显示HTTP请求
5:同时显示HTTP响应头
6:同时显示HTTP响应页面

安装

注:安装SQLMap需要Python环境

克隆仓库

1
2
3
git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap
cd sqlmap
python sqlmap.py

你也可以将它配置到环境变量中,具体方法请上搜索引擎找
运行图
我这边配置了环境变量,所以可直接执行

使用

1. 检查是否存在注入

例如注入目标为:http://127.0.0.1:8080/?id=1
则命令如下

1
python sqlmap.py -u "http://127.0.0.1:8080/?id=1"

执行过程如下
执行过程
执行完毕后,可看到数据库类型,如果服务器后端使用的是PHP语言,会显示PHP的版本
执行完毕
如图所示,数据库类型为 MySQL
PHP版本为 8.1.8

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

用途:该命令在确定网站存在SQL注入漏洞时,用于查询当前用户下的数据库

1
python sqlmap.py -u "http://127.0.0.1:8080/?id=1" --dbs

所有数据库
运行结束后可看到一些 数据库 的名称,它们将以[*]开头
--dbs参数缩写成-D xxx,该参数为查询xxx数据库下的内容

3. 获取数据库中的表名

用途:该命令在确定网站存在SQL注入漏洞时,可获取数据库下所有表的名称

-D 参数用来指定数据库,例如 -D moieo

1
python sqlmap.py -u http://127.0.0.1:8080/?id=1 -D moieo --tables

所有数据表
运行结束后可看到所有数据表的名称,继续注入可使用 -T 参数,该参数为 --tables的缩写,用于指定数据表继续注入获取数据

4. 获取数据表的字段名

用途:在查询完表名后,指定数据库和数据表进行注入测试,获取该表下所有字段

1
python sqlmap.py -u http://127.0.0.1:8080/?id=1 -D moieo -T moieo_comments --columns

所有字段
运行结束后得到所有字段

5. 获取数据表内存储的数据

用途:在获取并确定数据表内有字段时使用,可获得数据表内存储的数据

1
python sqlmap.py -u http://127.0.0.1:8080/?id=1 -D moieo -T moieo_comments --dump

表内的所有数据
可以看到,执行结束后可获得数据表内每个字段的数据

其他选项

1. 获取数据库所有用户

在有权管理所有用户的情况下 --users 选项可获得数据库所有用户名

2. 获取数据库用户的密码

在有权管理所有用户的情况下 --passwords 选项可获得所有用户的密码,该选项获得到的数据是经过哈希算法加密的
可以尝试使用 https://www.cmd5.com/ 硬解

3. 获取当前网站数据库的名称

--current-db 选项,可获得当前网站数据库的名称

4. 获取当前网站数据库使用的用户名称

--current-user 选项,用于获取当前用户名称

杂项

--is-dba 用于判断用户是否管理员权限

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

--referer,当--level的参数为3或以上,用于指定来源网站,欺骗目标网站,参数为URL

--sql-shell 运行自定义SQL语句

--os-cmd--os-shell 执行任意操作系统命令

--file-write xxx.php --file-dest xxx.php 上传文件到数据库服务器,前者为源文件路径,后者为目标数据库服务器的文件路径

--file-read 从数据库服务器中读取文件,参数为数据库服务器中的文件路径