将 sqlmap 与 Burp Suite 等代理集成

Kali LinuxBeginner
立即练习

引言

在本实验中,你将学习如何将 sqlmap(一个强大的开源渗透测试工具,可自动化检测和利用 SQL 注入漏洞的过程)与 Burp Suite 等拦截代理集成。

将代理与 sqlmap 结合使用是安全专业人员的一项关键技能。它能让你看到 sqlmap 发送的确切 payload,理解其测试逻辑,调试潜在问题,甚至实时修改请求。这种可见性对于学习 SQL 注入攻击的工作原理以及执行更高级、定制化的安全评估都非常有价值。

在本实验结束时,你将能够通过 Burp Suite 路由 sqlmap 的流量,观察生成的请求,并分析自动化的攻击模式。

配置 Burp Suite 在本地端口上监听

在此步骤中,你将启动 Burp Suite 并验证其代理监听器是否处于活动状态。Burp Suite 作为 Web 代理服务器,充当你的浏览器(或在此场景下,sqlmap)与目标应用程序之间的中间人。默认情况下,它监听本地机器(127.0.0.1)的 8080 端口上的入站连接。

首先,让我们启动 Burp Suite。你可以在应用程序菜单中找到它。

  1. 点击 Application Menu(屏幕左上角的图标)。
  2. 导航至 Web -> Burp Suite Community Edition
  3. 会出现一个对话框。你可以保留默认设置,然后点击 Next
  4. 另一个对话框会要求你选择一个项目。选择 Use Burp defaults,然后点击 Start Burp

Burp Suite 加载完成后,你需要检查其代理设置。

  1. 点击 Proxy 选项卡。
  2. 在 Proxy 选项卡内点击 Options 子选项卡。
  3. 查找 "Proxy Listeners" 部分。你应该会看到一个条目,其接口为 127.0.0.1:8080,并且 "Running" 复选框已勾选。

这证实了 Burp Suite 正在积极监听本地端口 8080 上的流量。任何配置为将流量发送到此地址和端口的应用程序,其请求都将被 Burp Suite 拦截和记录。

配置 sqlmap 使用代理,命令为 --proxy=http://127.0.0.1:8080

在此步骤中,你将学习如何指示 sqlmap 将其网络流量通过我们刚刚配置的 Burp Suite 代理发送。

sqlmap 提供了一个简单的命令行参数 --proxy 来指定一个 HTTP 代理。你需要以 http://<host>:<port> 的格式提供代理的地址。

由于 Burp Suite 正在监听 127.0.0.1:8080,因此正确的参数是:

--proxy=http://127.0.0.1:8080

当你将此参数添加到你的 sqlmap 命令中时,sqlmap 不会直接将请求发送到目标 Web 服务器,而是将其发送到 http://127.0.0.1:8080。然后,Burp Suite 将接收这些请求,记录它们,并将它们转发到最终目的地。

在下一步中,我们将把这个代理参数与目标 URL 结合起来执行扫描。目前,重要的是要理解这个单一参数是集成这两个工具所需的全部内容。

执行基础 sqlmap 扫描

在此步骤中,你将执行一次基础的 sqlmap 扫描,针对测试 Web 应用程序,并将流量通过 Burp Suite 路由。我们将要求 sqlmap 枚举服务器上的数据库。

打开一个终端。我们将构建一个包含以下内容的命令:

  • 目标 URL:-u "http://127.0.0.1/index.php?id=1"
  • 代理配置:--proxy=http://127.0.0.1:8080
  • 要执行的操作:--dbs(用于枚举数据库)
  • 非交互模式标志:--batch(自动回答所有问题为“是”)

现在,在你的终端中运行完整的命令:

sqlmap -u "http://127.0.0.1/index.php?id=1" --proxy=http://127.0.0.1:8080 --dbs --batch

你将在终端中看到 sqlmap 的输出,因为它开始测试目标。它将首先确认参数 id 是易受攻击的,然后列出可用的数据库。

输出应类似于此(版本号和某些详细信息可能有所不同):

        ___
       __H__
 ___ ___[.]_____ ___ ___  {1.x.x#dev}
|_ -| . [.]     | .'| . |
|___|_  [.]_|_|_|__,|  _|
      |_|V...       |_|   http://sqlmap.org

[INFO] starting @ ...
...
[INFO] GET parameter 'id' is 'MySQL >= 5.0 boolean-based blind' injectable
[INFO] GET parameter 'id' is 'MySQL >= 5.0.12 stacked queries' injectable
[INFO] GET parameter 'id' is 'MySQL >= 5.0.12 time-based blind' injectable
...
[INFO] fetching database names
[INFO] the following databases are available [4]:
[*] information_schema
[*] mysql
[*] performance_schema
[*] sys

[INFO] fetched data logged to text files under '/home/labex/.sqlmap/output/127.0.0.1'

sqlmap 运行时,它会通过 Burp Suite 发送数百个请求。

在 Burp Suite 的 HTTP History 中观察 sqlmap 生成的流量

在此步骤中,你将切换回 Burp Suite,查看 sqlmap 在扫描期间生成的流量。

将 Burp Suite 窗口切换到最前面。

  1. 确保你位于 Proxy 选项卡。
  2. 点击 HTTP history 子选项卡。

你现在会看到一个填充了 HTTP 请求的表格。所有这些请求都是由 sqlmap 通过 Burp 代理发送到目标服务器的。

花点时间观察列表:

  • Host:所有请求都指向 127.0.0.1
  • Method:大多数请求是 GET 请求。
  • URL:URL 始终是 /index.php,但查询字符串中的 id 参数在每次请求时都会改变。

此视图提供了 sqlmap 活动的完整日志。你可以看到自动化工具为了测试单一漏洞类别而生成的请求量之大。这是使用代理的主要好处:它使工具的“黑盒”操作可见。

分析 sqlmap 通过代理发送的 Payload

在此步骤中,你将仔细查看单个请求,以了解 sqlmap 用于检测和利用 SQL 注入漏洞的具体 Payload。

在 Burp Suite 的 HTTP history 选项卡中,点击列表中的任意一个请求。当你选择一个请求时,列表下方会出现两个新的面板:RequestResponse

点击 Request 面板以查看 sqlmap 发送的原始 HTTP 请求。密切关注 URL 中的 id 参数。你将看到正在测试的各种 Payload。

例如,你可能会找到一个类似这样的基于布尔的盲注 Payload:

GET /index.php?id=1%20AND%208003=8003 HTTP/1.1
Host: 127.0.0.1
...

这里,sqlmap 正在测试应用程序在注入一个真条件(AND 8003=8003)时是否会做出不同的响应。%20 是空格的 URL 编码表示。

你也可能会找到一个基于时间的盲注 Payload:

GET /index.php?id=1%20AND%20(SELECT%202079%20FROM%20(SELECT(SLEEP(5)))IImL) HTTP/1.1
Host: 127.0.0.1
...

使用此 Payload,sqlmap 正在注入一个 SLEEP(5) 命令。如果服务器响应时间增加 5 秒,sqlmap 就知道注入成功,并且数据库存在漏洞。

通过分析这些请求,你将更深入地了解自动化扫描器的工作原理。你可以看到它们用来确认漏洞的逻辑,这比仅仅在终端中看到最终结果要具有更强的教育意义。

总结

在此实验中,你成功地将 sqlmap 自动化扫描工具与 Burp Suite 的拦截代理集成。

你学会了如何:

  • 启动 Burp Suite 并确认其代理监听器正在 127.0.0.1:8080 上运行。
  • sqlmap 中使用 --proxy 参数将所有流量路由到 Burp Suite。
  • 在启用代理的情况下执行扫描以生成流量。
  • 在 Burp Suite 的 HTTP history 选项卡中观察完整的 HTTP 请求列表。
  • 分析单个请求,以了解 sqlmap 用于识别漏洞的具体基于布尔和基于时间的 SQL 注入 Payload。

这项技术是任何 Web 安全测试人员的基础,因为它能提供对自动化工具行为的关键洞察,并在渗透测试期间实现更大的控制和分析能力。