使用 sqlmap 爬取网站发现注入点

Kali LinuxBeginner
立即练习

引言

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

此命令将:

  1. http://127.0.0.1:8000 开始爬取。
  2. 深入两层 (--crawl-depth=2)。
  3. 自动以默认值回答提示 (--batch)。
  4. 专门查找并测试 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.phppage.phpsearch.php(通过表单),然后继续测试了它们各自的参数(idnameparamquery)。这展示了 sqlmap 的爬取功能在自动映射目标应用程序的攻击面方面的强大能力。

你还可以查看 sqlmap 的日志文件(通常位于 ~/.sqlmap/output/),以获取更详细的报告,尽管对于这个实验来说,控制台输出已经足够了。

总结

在这个实验中,你成功学习了如何使用 sqlmap 强大的爬取能力来发现目标网站上潜在的 SQL 注入点。你从识别一个根 URL 开始,然后使用 --crawl 标志指示 sqlmap 探索网站。你通过设置 --crawl-depth 来指定爬取深度,进一步优化了爬取过程。最后,你使用 --batch--forms 执行了全面的爬取和测试操作,以实现过程自动化并专门针对表单进行测试。

通过完成这个实验,你现在了解了如何:

  • 识别 sqlmap 爬取的起始 URL。
  • 使用 --crawl 标志来发现链接和表单。
  • 使用 --crawl-depth 控制爬取深度。
  • 使用 --batch--forms 执行自动化的爬取和测试操作。
  • 解释 sqlmap 的输出以识别发现的 URL、参数和潜在注入点。

这项技能是 Web 渗透测试中侦察的基础,它能让你在尝试利用特定漏洞之前,有效地绘制出 Web 应用程序的攻击面。