介绍
简介
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 | git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap |
你也可以将它配置到环境变量中,具体方法请上搜索引擎找
我这边配置了环境变量,所以可直接执行
使用
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
从数据库服务器中读取文件,参数为数据库服务器中的文件路径