FAQ
sqlmap 是一款开源渗透测试工具,它能自动检测并利用 SQL 注入漏洞和接管数据库服务器。它具有强大的检测引擎、许多适用于最终渗透测试阶段的特色功能以及范围广泛的开关,涵盖了数据库指纹识别、从数据库获取数据、访问底层文件系统以及通过带内连接在操作系统上执行命令。
如果是在 UNIX/Linux 上,请在终端中输入以下命令:
python sqlmap.py -h
你还可以输入以下命令以查看详细的帮助信息:
python sqlmap.py -hh
如果是在 Windows 系统上,请在终端中输入以下命令:
C:\PythonXX\python.exe sqlmap.py -h
指引:
为了保持所有代码的一致性和可读性,我们希望你遵守以下说明:
- 每个补丁有一个逻辑修改。
- 尽可能使代码保持每行不超过 76 列。
- 避免使用制表符,使用四个空格代替。
- 在每次 pull request 中对少于五个文件进行更改——很少有好的理由在一次 pull request 中修改五个以上的文件,因为这大大增加了落实(提交)这些 pull requests 所需的审阅时间。
- 与 master 分支相差太多的风格将被开发者进行适当“调整”。
- 不要对
thirdparty/
和extra/
目录中的任何内容进行修改。
通过向 sqlmap 开发人员、邮件列表或通过 Git pull request 贡献代码,将它们收入sqlmap 源代码仓库,你需要了解(除非另有说明)的是这代表你提供给了 sqlmap 项目无限制、非独占的权利来对它进行重用、修改和再次授权。虽然 sqlmap 会一直保持开源,但这很重要,因为无法重新授权代码已经为其他自由软件项目(如 KDE 和 NASM)带来了毁灭性的问题。如果你想为你的贡献指定特殊的许可条件,请在发送时说明。
我们一直在寻求能够编写高质量 Python 代码、想要做安全研究,懂 Web 应用安全、数据库访问和接管、软件重构并且积极想加入开发团队的人。
sqlmap 是由一个计算机安全爱好者组成的小 团队投入大量时间与热情凝结而成的。如果你欣赏我们的工作,并且希望 sqlmap 能够持续改进,可以考虑通过 PayPal 向
[email protected]
发起一次捐赠。不能。
请使用其他工具。
如果你无法手动评估目标,请勿使用篡改脚本。篡改脚本仅在渗透测试人员首先(最可能是在几个小时的请求/响应检查之后)了解如何绕过防护的情况下使用。在不充分理解的情况下盲目使用和组合多种篡改脚本总是一个坏主意。
我们偶尔会收到不明人士的愤怒。应该强调的是,以下提示消息,每次运行 sqlmap 的终端用户都负有义务:
[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent
is illegal. It is the end user's responsibility to obey all applicable local, state and
federal laws. Developers assume no liability and are not responsible for any misuse or
damage caused by this program
目前,sqlmap 项目没有切换到新版本 Python 解释器的需要,因为转换过程对于较大的项目 可能很麻烦(由于向后的不兼容性)。Python 版本的切换是早晚的事情,但目前它是一个优先级非常低的任务。
已于 2019 年五月同时支持 Python 2 与 3。
你可以使用 sqlmap 的以下开关:
--no-cast 关闭 payload 构造机制
然而另一方面,你可能会失去此开关在默认配置中提供的好处。
sqlmap 需要正确解码页面内容才能正确检测和处理国际化字符。在某些情况下,Web 开发人员在声明网页字符编码时犯错(例如:使用了
iso_8859
而不是标准化名称 iso-8859
),这会导致问题的出现。作为一个故障安全机制,我们已经引入了启发式检测引擎 chardet,所以在大多数情况下,sqlmap 会自动处理这种问题。不过,强烈建议你向我们报告这些打印错误,以便我们可以在代码中手动处理这些错误。
在 sqlmap 应该检查有无注入点的 URI 的对应位置加入星号,即
*
。例如,对于 ./sqlmap.py -u "http://target.tld/id1/1*/id2/2"
,sqlmap 会在标注了 *
号的地方尝试注入 payloads。此功能也适用于 POST 数据。支持多个注入点,并会依次对这些注入点进行评估。
会话用户很有可能没有足够的权限来对包含密码哈希的系统表进行查询。
开关
--text-only
用来移除所获取页面中的非文本数据(标签、JavaScript 代码,样式等),以进一步提高 SQL 注入检测功能。有些 WAF/IPS 根据 sqlmap 的默认
User-Agent
HTTP 头部(例如:User-agent: sqlmap/1.0-dev
)将 sqlmap 发出的所有请求过滤掉。为了避免这种情况,建议你使用 --random-agent
开关。如果 你对所有目标都收到了这类提示消息,那你很可能需要重新设置下你的代理(开关:
--proxy
和/或 --ignore-proxy
)。当目标应用程序存在堆叠查询(Stacked queries) SQL 注入漏洞,或者使用
-d
开关直接连接到数据库,并且会话用户具有相应的权限(或提权工具已经被预先注入),便可以在目标数据库上运行这些语句以及任何其他语句。在大多数这些情况中,商业工具检测使用公然的错误信息导致假阳性结果。你必须注意的是,DBMS 错误消息并不意味着受影响的 Web 应用程序容易受到 SQL 注入攻击。sqlmap 会进一步执行几个步骤,并且从来不会在没有通过测试时通报一个注入点,如果它在一开始就可以被利用。
sqlmap 在从表中导出数据条目方面非常细致。相关开关为:
--dump 导出 DBMS 数据库表项
-D DB 指定要枚举的 DBMS 数据库
-T TBL 指定要枚举的 DBMS 数据表
-C COL 指定要枚举的 DBMS 数据列
--start=LIMITSTART 指定获取返回查询结果的开始行数
--stop=LIMITSTOP 指定获取返回查询结果的结束行数
--first=FIRSTCHAR 指定获取返回查询结果的开始字符位
--last=LASTCHAR 指定获取返回查询结果的结束字符位
但是,在某些情况下,你可能需要使用自定义的
WHERE
条件语句来导出所有数据条目。对于这种情况,我们建议你使用以下的开关:--sql-query=QUERY 指定要执行的 SQL 语句
--sql-shell 调出交互式 SQL shell
--sql-file=SQLFILE 执行文件中的 SQL 语句
例如:
--sql-query "SELECT user, password FROM users WHERE privilege='admin'"