引言
SQL 注入是一种常见的 Web 漏洞,它允许攻击者干扰应用程序对其数据库发出的查询。sqlmap 是一个开源的渗透测试工具,可以自动化检测和利用 SQL 注入缺陷以及接管数据库服务器的过程。
虽然 sqlmap 主要以其注入测试能力而闻名,但它也包含了强大的功能,可以通过爬取目标网站来发现潜在的注入点。当你没有特定的 URL 或参数时,这一点尤其有用,你想让 sqlmap 探索网站并识别所有可能的注入入口点。
在本实验中,你将学习如何利用 sqlmap 的爬取功能自动发现目标网站上的 URL 和表单,然后测试它们是否存在 SQL 注入漏洞。你将识别一个根 URL,使用 --crawl 标志,设置爬取深度,执行操作,最后审查发现的注入点。
识别目标网站的根 URL
在此步骤中,你将识别 sqlmap 将开始爬取的网站的根 URL。这是 sqlmap 开始发现链接和表单的入口点。在本实验中,我们将使用一个本地运行的简单 Web 服务器。
首先,让我们确保 Web 服务器正在运行并且可以访问。你可以使用 curl 来检查服务器是否响应。
curl http://127.0.0.1:8000
你应该会看到一些 HTML 输出,表明服务器已启动。我们目标网站的根 URL 将是 http://127.0.0.1:8000。
接下来,我们将使用此 URL 作为 sqlmap 的起点。
使用 --crawl 标志发现链接和表单
在此步骤中,你将学习如何在 sqlmap 中使用 --crawl 标志。此标志指示 sqlmap 爬取目标网站并发现新的 URL 和表单,以测试 SQL 注入漏洞。如果没有此标志,sqlmap 将只测试明确提供的 URL。
使用 --crawl 的基本语法是:
sqlmap -u < target_url > --crawl
让我们尝试在目标 URL 上运行带有 --crawl 标志的 sqlmap。此命令将启动爬取过程。
sqlmap -u http://127.0.0.1:8000 --crawl
你将看到 sqlmap 开始爬取网站,识别链接和表单。在此过程中,它会问你几个问题。为了本实验的目的,你通常可以通过按 Enter 或在提示时输入 y 来接受默认选项。
例如,当被问到“你是否想将结果保存在 CSV 文件中?”时,你可以输入 n 然后按 Enter。当被问到“你是否想测试其他常见漏洞?”时,你可以输入 n 然后按 Enter。
使用 --crawl-depth=2 设置爬取深度
在此步骤中,你将使用 --crawl-depth 标志设置特定的爬取深度,从而优化爬取过程。爬取深度决定了 sqlmap 在发现新 URL 时会深入多少层级。深度为 1 意味着它只会访问初始 URL 的直接链接。深度为 2 意味着它将访问初始 URL 的链接,然后是那些新发现页面的链接,以此类推。
对于我们的小型目标网站,深度为 2 将足以发现所有可用的页面。
设置爬取深度的语法是:
sqlmap -u <target_url> --crawl --crawl-depth=<depth_value>
让我们再次执行 sqlmap,这次指定爬取深度为 2。
sqlmap -u http://127.0.0.1:8000 --crawl --crawl-depth=2
观察 sqlmap 的输出如何变化,随着它深入网站结构,可能会发现更多链接或表单。同样,你可以通过按 Enter 来接受默认提示,或者在进行额外测试时输入 n。
执行爬取和测试操作
在此步骤中,你将执行完整的爬取和测试操作。虽然之前的步骤演示了爬取标志,但 sqlmap 默认也会尝试测试已发现 URL 的注入点。为了使测试更明确并确保 sqlmap 执行彻底检查,我们可以添加 --batch 标志来自动响应提示,以及 --forms 标志来专门定位表单。
--batch 标志告诉 sqlmap 以非交互模式运行,接受所有提示的默认答案。这对于自动化非常有用。--forms 标志专门指示 sqlmap 解析和测试目标上的 HTML 表单。
让我们将这些标志与之前的命令结合起来:
sqlmap -u http://127.0.0.1:8000 --crawl --crawl-depth=2 --batch --forms
此命令将:
- 从
http://127.0.0.1:8000开始爬取。 - 深入两层 (
--crawl-depth=2)。 - 自动以默认值回答提示 (
--batch)。 - 专门查找并测试 HTML 表单 (
--forms)。
观察输出。sqlmap 将列出它发现的 URL 和它测试的参数。它还会指示是否找到任何潜在的注入点。
查看发现的 URL 和潜在注入点
在最后这个步骤中,你将查看 sqlmap 的输出,以了解发现了哪些 URL 和表单,以及是否识别出了任何潜在的注入点。
sqlmap 完成执行后,它将提供其发现的摘要。查找指示“参数易受攻击”(parameter is vulnerable)或类似消息的行。
即使 sqlmap 没有找到已确认的 SQL 注入漏洞(这对于我们简单的演示网站是预期的),它仍然会向你展示它测试过的 URL 和参数。这些信息对于手动分析或进一步的自动化测试至关重要。
你可能会看到的示例输出片段:
...
[INFO] 检索到新表单:'http://127.0.0.1:8000/search.php' (GET)
...
[INFO] 测试 GET 参数 'id'
...
[INFO] 测试 GET 参数 'param'
...
[INFO] 测试 GET 参数 'query'
...
关键要点是,sqlmap 成功爬取了网站,识别了 index.php、page.php 和 search.php(通过表单),然后继续测试了它们各自的参数(id、name、param、query)。这展示了 sqlmap 的爬取功能在自动映射目标应用程序的攻击面方面的强大能力。
你还可以查看 sqlmap 的日志文件(通常位于 ~/.sqlmap/output/),以获取更详细的报告,尽管对于这个实验来说,控制台输出已经足够了。
总结
在这个实验中,你成功学习了如何使用 sqlmap 强大的爬取能力来发现目标网站上潜在的 SQL 注入点。你从识别一个根 URL 开始,然后使用 --crawl 标志指示 sqlmap 探索网站。你通过设置 --crawl-depth 来指定爬取深度,进一步优化了爬取过程。最后,你使用 --batch 和 --forms 执行了全面的爬取和测试操作,以实现过程自动化并专门针对表单进行测试。
通过完成这个实验,你现在了解了如何:
- 识别 sqlmap 爬取的起始 URL。
- 使用
--crawl标志来发现链接和表单。 - 使用
--crawl-depth控制爬取深度。 - 使用
--batch和--forms执行自动化的爬取和测试操作。 - 解释 sqlmap 的输出以识别发现的 URL、参数和潜在注入点。
这项技能是 Web 渗透测试中侦察的基础,它能让你在尝试利用特定漏洞之前,有效地绘制出 Web 应用程序的攻击面。


