Repeater Strike:AI赋能手动安全测试,高效挖掘IDOR漏洞

本文介绍了PortSwigger研发的Repeater Strike扩展,该工具利用AI技术自动分析Burp Suite的Repeater流量,通过生成智能正则表达式来检测IDOR等漏洞,能够将单一发现扩展为多个可操作漏洞,提升安全测试效率。

Repeater Strike:手动测试的强化版 | PortSwigger研究

Gareth Heyes
研究员
@garethheyes

发布时间: 2025年7月15日 13:46 UTC
更新时间: 2025年7月15日 13:46 UTC

手动测试不必重复劳动。本文介绍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
6
"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 Rule。您可能认为这会消耗大量AI令牌,但实际上创建此特定Strike Rule仅花费了61个令牌,且规则生成后不再使用额外令牌!

如果AI生成的正则表达式失败,没问题——我创建了一个Strike Rule编辑器,允许您编辑生成的Strike Rule,点击保存后即可扫描代理历史记录,全程无需额外令牌。

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

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

更广泛的概念也难以通用化。虽然系统可以检测特定站点上的IDOR等问题,但创建足够灵活的正则表达式模式以在不同站点上工作而不过于特定于某个站点是很困难的。

我尝试了响应差异分析作为通过过滤噪声(如无关紧要的标头)并仅关注变化部分来提取有意义信息的方法。

最终,我因时间不足未能完全解决此问题——但也许您可以。

您能否找到一种优雅的解决方案,可靠地隔离有意义的UI变化并将其馈送给AI?让我们进一步推进。

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