SQLMAP使用教程

本文详细介绍了SQLMAP的使用方法,包括指定目标、设置输出等级、枚举数据库、数据表和列名,数据dump,WAF识别,以及自定义注入payload等。还探讨了如何处理HTTP请求,设置并发请求,使用自定义Python代码,测试参数,以及应对各种安全防护策略。此外,文章还提供了多种tamper脚本的介绍,以应对不同的数据库防护措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

指定目标

选项:-u--url

针对单一目标 URL 运行 sqlmap。这个选项可设置为下面格式的 URL:

http(s)://targeturl[:port]/[...]

例如:

python sqlmap.py -u "target_url"

输出详细等级

选项:-v

该选项用于设置输出信息的详细等级,共有七个级别。默认级别为 1,输出包括普通信息,警告,错误,关键信息和 Python 出错回遡信息(如果有的话)。

  • 0:只输出 Python 出错回溯信息,错误和关键信息。

  • 1:增加输出普通信息和警告信息。

  • 2:增加输出调试信息。

  • 3:增加输出已注入的 payloads。

  • 4:增加输出 HTTP 请求。

  • 5:增加输出 HTTP 响应头。

  • 6:增加输出 HTTP 响应内容。

例如:用 -v 代替 -v 2,用 -vv 代替 -v 3,用 -vvv 代替 -v 4,依此类推

python sqlmap.py -u "target_url" -v

列出 DBMS 所有数据库

开关:--dbs

如果当前会话用户对包含 DBMS 可用数据库信息的系统表有读取权限,则可以枚举出当前数据库列表。

python sqlmap.py -u "target_url" --dbs

枚举数据表

开关和选项:--tables--exclude-sysdbs-D

如果当前会话用户对包含 DBMS 数据表信息的系统表有读取权限,则可以枚举出特定 DBMS 的数据表。

如果你不使用选项 -D 来指定数据库,则 sqlmap 将枚举所有 DBMS 数据库的表。

你还可以提供开关 --exclude-sysdbs 以排除所有的系统数据库。

注意,对于 Oracle,你需要提供 TABLESPACE_NAME 而不是数据库名称。

python sqlmap.py -u "target_url" -D database_name --tables

枚举数据表的列名

开关和选项:--columns-C-T-D

如果当前会话用户对包含 DBMS 数据表信息的系统表有读取权限,则可以枚举出特定数据表的列名。sqlmap 还将枚举所有列的数据类型。

此功能可使用选项 -T 来指定表名,还可以使用选项 -D 来指定数据库名称。如果未指定数据库名称,将使用当前的数据库名称。你还可以使用选项 -C 来指定要枚举的表列名。

python sqlmap.py -u "target_url" -D database_name -T table_name --columns

dump数据

开关和选项:--dump,-C-T-D

python sqlmap.py -u "target_url" -D database_name -T table_name -C (column_name1,column_name2) --dump

#输出指定数据库(database_name)指定表(table_name)中指定字段(column_name1,column_name2)的数据

WAF识别

python sqlmap.py -u "TARGET_URL" --identify-waf

从文件中载入 HTTP 请求

选项:-r

sqlmap 可以从一个文本中读取原始的 HTTP 请求。通过这种方式,你能够免于设置部分选项(例如:设置 cookies,POST 数据等参数)。

HTTP 请求文件数据可以通过burp抓包获取

例如:

python sqlmap.py -r 1.txt --dbs

设置 Cookie

选项:--cookie

例如:

python sqlmap/sqlmap.py -u "target_url" --cookie="uname=admin;id=1" --dbs

设置 User-Agent

选项和开关:--user-agent--random-agent

默认情况下,sqlmap 使用以下 User-Agent 请求头值执行 HTTP 请求:

sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)

指定User-Agent 

例如:

python sqlmap.py -u "target_url" --user-agent="Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0" --dbs

随机User-Agent

例如:

python sqlmap.py -u "target_url" --random-agent --dbs

并发 HTTP(S) 请求

选项:--threads

sqlmap 中支持设定 HTTP(S) 请求最大并发数。 这个特性依赖于多线程,因而继承了多线程的优点和缺陷。

当数据是通过 SQL 盲注技术,或者使用暴力破解相关开关获取时,可以运用这个特性。对于 SQL 盲注技术,sqlmap 首先在单线程中计算出查询目标的长度,然后启用多线程特性,为每一个线程分配查询的一个字符。当该字符被成功获取后,线程会结束并退出——结合 sqlmap 中实现的折半算法,每个线程最多发起 7 次 HTTP(S) 请求。

考虑运行性能和目标站点的可靠性因素,sqlmap 最大的并发请求数只能设置到 10

值得注意的是,这个选项不能跟 --predict-output 一起使用。

python sqlmap.py -u "target_url" -D database_name -T table_name --columns --threads 3

强制使用SSL

选项:--force-ssl

例如:

python sqlmap.py -r 1.txt --dbs --force-ssl

HTTP 请求之间的延迟

选项:--delay

可以指定每个 HTTP(S) 请求之间等待的秒数。有效值是一个浮点数,例如 0.5 表示半秒。默认情况下,没有设置延迟。

在每个请求期间运行自定义的 Python 代码

选项:--eval

在可能因为一些已知的依赖而想要更改(或添加新的)参数值的情况下,可以使用选项 --eval 为 sqlmap 提供自定义的 python 代码,代码将在每个请求之前运行。

例如:

python sqlmap.py -u "http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"

指定测试参数

选项:-p--skip--param-exclude

默认情况下 sqlmap 会测试所有 GET 参数和 POST 参数。当 --level 的值 >= 2,它还会测试 HTTP Cookie 头部值。当这个值 >= 3 时,它还会测试 HTTP User-Agent 和 HTTP Referer 头部值。而且还可以手动指定一个需要 sqlmap 进行测试的、使用逗号分隔的参数列表。这会使 sqlmap 忽略 --level 的设置。

例如,只需要测试 GET 参数 id 和 HTTP User-Agent 时,则提供 -p "id,user-agent"

如果用户想要排除测试某些参数,可以使用选项 --skip。如果需要使用高级别 --level 值,并指定部分可用参数(排除通常被测试的 HTTP 头)时,这个选项非常有用。

例如,要在 --level=5 跳过测试 HTTP User-Agent 和 HTTP Referer,可以提供 --skip="user-agent,referer"

还可以基于正则表达式针对参数名称来排除对某些参数的测试。在这种情况下,用户可以使用选项 --para

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值