指定目标
选项:-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