使用 Grep-Match 在 Intruder 响应中查找关键字

Beginner
立即练习

引言

在渗透测试和 Web 应用分析中,我们经常使用 Burp Suite Intruder 等工具向目标发送大量请求。在这个过程中,一个关键的功能是“Grep - Match”,它允许你自动标记包含特定关键词(例如,“Welcome”、“Login successful”、“admin_access_granted”)的响应。这有助于你快速地从成千上万的响应中筛选出感兴趣的内容。

在本实验中,你将学习如何使用标准的 Linux 命令行工具来复制这种强大的“Grep - Match”功能。你将使用 curl 发送 HTTP 请求,使用 shell 循环为一系列 payloads 自动化该过程,并使用 grep 在响应中搜索成功关键词。对于任何对安全自动化和脚本编写感兴趣的人来说,这是一项基本技能。

在 Intruder > Options 中,滚动到“Grep - Match”部分

在像 Burp Suite 这样的 GUI 工具中,这一步是你导航到选项面板来配置匹配规则。在我们的命令行环境中,等效的操作是准备好必要的组件:payload 列表和目标 URL。

设置过程已经创建了一个名为 payloads.txt 的文件,位于你的 ~/project 目录中。这个文件包含了一系列我们想要针对 Web 应用进行测试的潜在值,其作用与 Intruder 的 payload 列表相同。

让我们查看一下这个文件的内容。

cat ~/project/payloads.txt

你应该会看到以下输出:

orange
banana
apple
grape
mango

我们的目标应用是一个运行在 http://localhost:8000 上的简单 Web 服务器。我们将针对这个目标测试每个 payload。

清除默认规则

在 Burp Suite 中,你通常会清除任何预先存在或默认的规则,以确保只匹配你明确定义的规则。对于我们的模拟,这意味着通过发送一个带有已知“失败”payload 的单个请求来建立一个基线。这有助于我们理解一个正常的、不成功的响应是什么样的。

让我们使用 curl 向服务器发送一个带有 payload orange 的请求,我们知道这个 payload 不是正确的。

curl "http://localhost:8000/?item=orange"

该命令将获取网页并将其 HTML 源代码打印到终端。输出应该如下所示:

<!DOCTYPE html>
<html>
  <head>
    <title>Test Page</title>
  </head>
  <body>
    <script>
      const params = new URLSearchParams(window.location.search);
      if (params.get("item") === "apple") {
        document.body.innerHTML = "<h1>Welcome to the secret page!</h1>";
      } else {
        document.body.innerHTML = "<h1>Item not found.</h1>";
      }
    </script>
  </body>
</html>

请注意 JavaScript 逻辑和由此产生的“Item not found”文本。这就是我们的基线“失败”响应。

添加一条规则以匹配成功关键字(例如,“Welcome”、“Logged in”)

这是“Grep - Match”技术的核心。我们需要定义一个唯一的字符串或模式,它只会在“成功”的响应中出现。查看上一步的 HTML,我们可以看到一个成功的请求(当 item=apple 时)将导致“Welcome to the secret page!”文本的出现。“Welcome”这个关键字是我们规则的完美候选。

我们可以使用 grep 命令来过滤 curl 的输出,并检查我们关键字的存在。curl-s 标志用于以静默模式运行,它会隐藏进度指示器。

首先,让我们针对一个失败的 payload 测试这条规则。这个命令应该不会产生任何输出,因为响应中不包含“Welcome”这个词。

curl -s "http://localhost:8000/?item=orange" | grep "Welcome"

现在,让我们针对已知的成功 payload apple 进行测试。

curl -s "http://localhost:8000/?item=apple" | grep "Welcome"

这次,grep 找到了匹配项,并打印了包含关键字的行:

            document.body.innerHTML = '<h1>Welcome to the secret page!</h1>';

管道符 (|) 和 grep "Welcome" 命令结合起来就构成了我们的“Grep - Match”规则。我们已经成功创建了一种区分成功响应和失败响应的方法。

运行 Intruder 攻击

“Intruder 攻击”就是自动化我们列表中每个 payload 的请求过程。我们可以通过一个简单的 shell 循环来实现这一点。该循环将读取 payloads.txt 中的每一行,为每个 payload 运行我们的 curl | grep 命令,并向我们展示结果。

为了使输出更整洁,更像一个结果表,我们将创建一个小型 shell 脚本。使用 nano 编辑器创建一个名为 attack.sh 的新文件。

nano attack.sh

现在,将以下脚本复制并粘贴到 nano 编辑器中:

#!/bin/bash

echo "Payload,Found"

for payload in $(cat ~/project/payloads.txt); do
  response=$(curl -s "http://localhost:8000/?item=$payload")
  if echo "$response" | grep -q "Welcome"; then
    echo "$payload,True"
  else
    echo "$payload,False"
  fi
done

该脚本首先打印一个标题(Payload,Found)。然后,它循环遍历每个 payload。在循环内部,它使用 grep -q(静默模式)来检查“Welcome”关键字。如果找到,它将打印 payload 后跟 True;否则,它将打印 False

Ctrl+X,然后按 Y,最后按 Enter 保存文件并退出 nano

接下来,使脚本可执行:

chmod +x attack.sh

最后,运行攻击:

./attack.sh

观察匹配结果表中新列

在完成上一步的脚本运行后,你将在终端看到一个整洁的、类似表格的输出。

Payload,Found
orange,False
banana,False
apple,True
grape,False
mango,False

这个输出是 Burp Suite Intruder 中结果表的命令行等效形式。第一列列出了测试过的 payload,第二列是我们命名的“Found”,它充当了我们的“Grep - Match”指示器。

只需扫描第二列中的 True 值,你就可以立即识别出成功的 payload。正如你所见,apple,True 这一行非常醒目,告诉我们 payload apple 导致了包含我们目标关键字的响应。这展示了该技术在从大量 HTTP 响应中寻找特定信息方面的有效性。

总结

在本实验中,你成功模拟了“Grep - Match”功能,这是许多自动化网络安全工具的基石。你学会了如何组合多个基础的 Linux 命令行工具来实现强大的结果。

你练习了:

  • 使用 curl 从终端发起 Web 请求。
  • 使用 grep 在响应数据中搜索特定关键字。
  • 编写 shell for 循环来自动化处理输入列表的任务。
  • 将这些工具组合成一个脚本,系统地测试 payload 并识别成功的尝试。

这种命令行方法不仅是理解复杂工具底层工作原理的好方法,也是你进行自定义自动化和安全脚本编写任务的极其灵活且强大的技能。