Repeater Strike:AI赋能的手动安全测试新利器

本文介绍了PortSwigger研发的新型AI驱动Burp Suite扩展Repeater Strike,该工具通过分析Repeater流量自动生成智能正则表达式,能够高效挖掘IDOR等漏洞,并支持对代理历史进行批量扫描,显著提升安全测试效率。

Repeater Strike:手动测试的效能倍增器

手动测试不必再重复劳动。本文我们将介绍 Repeater Strike——一款新型AI驱动的 Burp Suite 扩展,专为自动化挖掘IDOR及类似漏洞而设计。通过分析您的 Repeater 流量,Repeater Strike 基于测试的请求和响应生成智能正则表达式。随后,它会在您的代理历史记录中应用这些正则表达式来发现相关问题,让您能够轻松将单个漏洞转化为一系列可操作的发现。

在 PortSwigger 研究中,我们正在试验利用 AI 生成半自动化工具,以帮助增强您的安全测试。我萌生的一个想法是使用 AI 来寻找变体,因此我构建了 Shadow Repeater。事实证明这非常酷,并且它很好地契合了 AI 的擅长领域。我想知道是否除了生成变体之外还能做得更多。我构思了这样一种方案:获取您在 Repeater 中所做的操作,并扫描您的代理历史记录以发现更多问题。

我尝试了三种不同的漏洞发现方法:Java 编译、正则表达式和基于差异的分析。我花了一些时间使用动态生成的 Java 类来生成扫描检查,但很快意识到可以使用多个正则表达式来实现相同的目标。于是我将重点转向了正则表达式。

第一步是使用 AI 来识别漏洞并生成一个 JSON 对象以辅助下一个智能体:

1
2
3
4
5
6
7
8
{
   "param": {
        "values": ["wiener"],
        "name": "id",
        "type": "URL",
        "vulnerabilityClass": "IDOR"
    }
}

AI 正确地识别了您可能正在测试的内容,并注意到根据您发送给它的请求,您正在测试一个带有名为 id 的参数的 URL。最初的探测是针对 wiener 的😂。然后,AI 利用此探测尝试在响应中找到一些唯一可识别的信息:

1
2
3
4
5
"responseRegexes": [[
     "Your username is: wiener",
     "Your API Key is: [A-Za-z0-9]{32}",
     "<a href=\"/my-account\\?id=wiener\">My account<\/a>"
 ]]

非常酷的是,AI 识别出了用户名的反射和 API 密钥,我指示它匹配数据的结构,以便能够发现更多内容,而不仅仅是特定的密钥。接下来,它在生成新的 Strike Rule 之前,会使用探测值重新发出请求以复现该发现。如果复现成功,Repeater Strike 则会提示您输入 Strike Rule 的名称。

下一步是变异探测值和响应正则表达式。这在一年前是不可能实现的,但如今的 AI 模型超级智能。它们能够获取数据并进行非常巧妙的变异。值得注意的是,我并未告知它关于漏洞的具体指令,它可以从我提供的 JSON 结构中推导出来:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{
  "mutatedProbesToUse": [
    "admin",
    "testuser",
    "anonymous",
    "user123",
    ...
  ],
  "mutatedResponsesRegexes": [
    [
      "Your username is: admin",
      "Your API Key is: [A-Za-z0-9]{32}",
      "<a href=\"/my-account\\?id=admin\">My account<\/a>"
    ],
    [
      "Your username is: testuser",
      "Your API Key is: [A-Za-z0-9]{32}",
      "<a href=\"/my-account\\?id=testuser\">My account<\/a>"
    ],
    [
      "Your username is: anonymous",
      "Your API Key is: [A-Za-z0-9]{32}",
      "<a href=\"/my-account\\?id=anonymous\">My account<\/a>"
    ],
    [
      "Your username is: user123",
      "Your API Key is: [A-Za-z0-9]{32}",
      "<a href=\"/my-account\\?id=user123\">My account<\/a>"
    ],
    ...
  }
}

一旦 AI 完成了探测值和正则表达式的变异,它就可以扫描您的代理历史记录来寻找此类行为。您甚至可以设置 Repeater Strike,使其对发送的每个 Repeater 请求动态创建 Strike Rules。您可能认为这会消耗大量的 AI token,但实际上,创建这个特定的 Strike Rule 仅花费了我 61 个 token,而且一旦规则生成,就不再需要消耗额外的 token!

如果 AI 生成的正则表达式失败了,也没关系。我创建了一个 Strike Rule 编辑器,允许您编辑生成的 Strike Rule,点击保存,然后扫描您的代理历史记录,整个过程无需额外的 token。

挑战

在开发过程中,我遇到了几个挑战。一个主要问题是处理大型响应——虽然 AI 能够有效解释较小的响应,但对于来自像 Facebook 这样的网站的长响应则显得力不从心。我最初截断了数据,但这导致了重要上下文的丢失。

另一个障碍是 AI 的输出不一致。例如,在生成正则表达式时,它有时未能正确转义元字符,导致运行时错误。一个变通方案是在发生异常时通过编程方式转义这些字符。

将这个更广泛的概念进行通用化也被证明是困难的。虽然系统可以在特定站点上检测到像 IDOR 这样的问题,但很难创建足够灵活的正则表达式模式,使其能在不同站点上工作,而又不过于特定于某个站点。

我尝试了响应差异比较作为一种通过过滤噪音(例如不重要的头部信息)并仅关注发生变化的部分来提取有意义信息的方法。

最终,我没有足够的时间来完全解决这个问题——但也许您可以。

您能找到一种优雅的解决方案,可靠地隔离有意义的 UI 变化并将其反馈给 AI 吗?让我们共同推进这项工作。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计