这些选项可用于设置一些常规工作参数。
1 、从存储文件(.sqlite)中加载会话
参数 -s
sqlmap会自动为每个目标创建一个永久性会话SQLite文件,,位于专用输出目录中,用于存储会话结果所需的所有数据。如果用户想指定读取的文件路径,就可以用这个参数。
2 、保存HTTP(S)日志
参数 -t
这个参数需要跟一个文本文件,sqlmap会把HTTP(S)请求与响应的日志保存到那里。
这主要用于调试目的。
3 、以非交互模式运行
开关 –batch
如果你希望sqlmap作为一个批处理工具运行,没有任何用户的交互。用此参数,不需要用户输入,将会使用sqlmap提示的默认值一直运行下去。
4 、二进制内容检索
参数 -binary-fields
在二进制内容检索的情况下(例如具有存储二进制值的列的表),可以使用--binary-fieldssqlmap
处理选项。然后这些字段(即表格列)被检索并以其十六进制输出,之后可以用其他工具(例如john)处理它们。
5 、自定义注入字符集
参数 -charset
在基于bool和时间的盲注中,用户可以使用自定义字符集来加速数据检索过程。例如,在输出消息摘要值(例如SHA1)的情况下,通过使用--charset="0123456789abcdef"
,预期的请求数量比常规运行少了30%。
6 、从目标网址开始抓取网站
参数 –crawl
Sqlmap可以从目标URL开始爬取目标站点并收集可能存在漏洞的URL,后面跟的参数是爬行的深度。
针对MySQL目标的示例运行:
python sqlmap.py -u "http://192.168.21.128/sqlmap/mysql/" --batch --crawl=3
结果:
[...]
[xx:xx:53] [INFO] starting crawler
[xx:xx:53] [INFO] searching for links with depth 1
[xx:xx:53] [WARNING] running in a single-thread mode. This could take a while
[xx:xx:53] [INFO] searching for links with depth 2
[xx:xx:54] [INFO] heuristics detected web page charset 'ascii'
[xx:xx:00] [INFO] 42/56 links visited (75%)
[...]
我们还可以使用选项--crawl-exclude
提供正则表达式来排除爬网页面。例如,如果您想跳过路径中包含关键字logout
的所有页面,则可以使用--crawl-exclude=logout
。
7、 规定输出到CSV中的分隔符
参数–csv-del
当dump保存为CSV格式时(–dump-format=CSV),需要一个分隔符,默认是逗号,用户也可以改为别的 如:--csv-del=";"
8 、DBMS身份验证
参数 –dbms-cred
某些时候当前用户的权限不够,做某些操作会失败。在这些情况下,如果他通过使用此选项向sqlmap 提供admin用户凭据,sqlmap将尝试使用这些凭据以专门的“运行方式”机制(例如在Microsoft SQL Server上的OPENROWSET)重新运行问题部分。
9、 输出数据的格式
选项 –dump-format
将数据存储到输出目录中的相应文件时,sqlmap支持三种不同类型的格式:CSV,HTML和SQLITE。
默认格式是CSV,其中每个表格行按行存储到文本文件中,每个条目用逗号分隔(或者提供了选项--csv-del
)。
在HTML的情况下,输出被存储到HTML文件中,其中每行用格式化表格中的行表示。
在SQLITE的情况下,输出存储到SQLITE数据库中,原始表内容被复制到具有相同名称的相应表中。
10、 强制用于数据检索的字符编码
参数 –encoding
为了正确解码字符数据,sqlmap使用Web服务器提供的信息(例如HTTP头Content-Type)或来自第三方库chardet启发式的结果。不过,我么可以自定义编码(例如–encoding=GBK)。
必须注意的是,由于存储的数据库内容与目标端使用的数据库连接器之间的隐含不兼容性,字符信息可能会丢失。
11 、预估完成时间
开关 –eda
该参数用于显示估计的完成时间。
针对Oracle目标进行布尔盲注的示例:
python sqlmap.py -u "http://192.168.136.131/sqlmap/oracle/get_int_bool.php?id=1" -b --eta
结果:
[...]
[hh:mm:01] [INFO] the back-end DBMS is Oracle
[hh:mm:01] [INFO] fetching banner
[hh:mm:01] [INFO] retrieving the length of query output
[hh:mm:01] [INFO] retrieved: 64
17% [========> ] 11/64 ETA 00:19
[...]
100% [===================================================] 64/64
[hh:mm:53] [INFO] retrieved: Oracle Database 10g Enterprise Edition Release 10.2
.0.1.0 - Prod
web application technology: PHP 5.2.6, Apache 2.2.9
back-end DBMS: Oracle
banner: 'Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod'
如你所见,sqlmap首先计算查询输出的长度,然后估计到达时间,以百分比显示进度并计算检索到的输出字符的数量。
12 、刷新session文件
参数:–flush-session
你可以使用选项--flush-session
刷新session文件的内容,这样可以避免在sqlmap中默认实现的缓存机制。也可以手动删除会话文件。
13、 分析和测试表单的输入字段
开关 –forms
如果你想对一个页面的form表单中的参数进行测试,可以使用-r
读取请求文件,或者通过--data
参数测试。 但是当使用--forms
参数时,sqlmap会自动从-u中的url获取页面中的表单进行测试。
14 、忽略在会话文件中存储的查询结果
开关 –fresh-queries
忽略session文件保存的查询,重新查询。
15 、使用DBMS hex函数
开关 –hex
在检索非ASCII数据经常发生数据丢失情况。这个问题的一个解决方案是使用DBMS十六进制函数。通过该开关打开,数据在被检索之前被编码为十六进制格式,然后被解码为原始格式。
针对PostgreSQL目标的示例:
python sqlmap.py -u "http://192.168.48.130/sqlmap/pgsql/get_int.php?id=1" --banner --hex -v 3 --parse-errors
结果:
[...]
[xx:xx:14] [INFO] fetching banner
[xx:xx:14] [PAYLOAD] 1 AND 5849=CAST((CHR(58)||CHR(118)||CHR(116)||CHR(106)||CHR
(58))||(ENCODE(CONVERT_TO((COALESCE(CAST(VERSION() AS CHARACTER(10000)),(CHR(32)
))),(CHR(85)||CHR(84)||CHR(70)||CHR(56))),(CHR(72)||CHR(69)||CHR(88))))::text||(
CHR(58)||CHR(110)||CHR(120)||CHR(98)||CHR(58)) AS NUMERIC)
[xx:xx:15] [INFO] parsed error message: 'pg_query() [<a href='function.pg-query'
>function.pg-query</a>]: Query failed: ERROR: invalid input syntax for type num
eric: ":vtj:506f737467726553514c20382e332e39206f6e20693438362d70632d6c696e75782d
676e752c20636f6d70696c656420627920474343206763632d342e332e7265616c20284465626961
6e2032e332e322d312e312920342e332e32:nxb:" in <b>/var/www/sqlmap/libs/pgsql.inc.p
hp</b> on line <b>35</b>'
[xx:xx:15] [INFO] retrieved: PostgreSQL 8.3.9 on i486-pc-linux-gnu, compiled by
GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2
[...]
16、 自定义输出目录路径
参数 –output-dir
默认情况下,sqlmap将会话和结果文件存储在子目录output文件夹中。如果你想自定义路径,你可以使用这个选项(例如--output-dir = / tmp
)。
17、 从响应中获取DBMS的错误信息
开关 –parse-errors
如果Web应用程序配置为调试模式,则它会在HTTP响应中显示错误消息,sqlmap可以解析并显示它们。这对于调试目的非常有用,例如弄清楚为什么枚举不起作用,这可能是会话用户权限的问题,在这种情况下,您会看到一条DBMS错误消息,该消息显示Access denied for user <SESSION USER>
针对Microsoft SQL Server目标的示例:
python sqlmap.py -u "http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1" --parse-errors
输出:
[...]
[xx:xx:17] [INFO] ORDER BY technique seems to be usable. This should reduce the
timeneeded to find the right number of query columns. Automatically extending th
e rangefor current UNION query injection technique test
[xx:xx:17] [INFO] parsed error message: 'Microsoft OLE DB Provider for ODBC Driv
ers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 10 i
s out of range of the number of items in the select list.
<b>/sqlmap/mssql/iis/get_int.asp, line 27</b>'
[xx:xx:17] [INFO] parsed error message: 'Microsoft OLE DB Provider for ODBC Driv
ers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 6 is
out of range of the number of items in the select list.
<b>/sqlmap/mssql/iis/get_int.asp, line 27</b>'
[xx:xx:17] [INFO] parsed error message: 'Microsoft OLE DB Provider for ODBC Driv
ers (0x80040E14)
[Microsoft][ODBC SQL Server Driver][SQL Server]The ORDER BY position number 4 is
out of range of the number of items in the select list.
<b>/sqlmap/mssql/iis/get_int.asp, line 27</b>'
[xx:xx:17] [INFO] target URL appears to have 3 columns in query
[...]
18 、将参数命令保存在配置INI文件中
参数 –save
可以将参数命令保存到配置INI文件中。然后可以使用-c
参数编辑生成的文件并将其传递到sqlmap,如上所述。
19、 更新sqlmap
开关 –update
使用此选项,你可以直接从Git存储库将工具更新到最新的开发版本。如果此操作失败,请从你的sqlmap安装目录下执行git pull。它将执行--update
完全相同的操作。如果你在Windows上运行sqlmap,则可以使用SmartGit客户端。
强烈建议在提交错误报告之前先更新sqlmap。