HTTP异常排名算法:自动化挖掘HTTP响应的隐秘差异

本文介绍了PortSwigger研究团队开发的HTTP异常排名算法,该算法能自动分析大量HTTP响应,识别出最异常的响应以辅助安全测试。文章详解了算法的工作原理、与Turbo Intruder的集成,及其在自动化漏洞发现中的应用。

引入HTTP异常排名 | PortSwigger研究

James Kettle 研究总监 @albinowax

发布时间: 2025年11月11日 14:41 UTC 更新时间: 2025年11月11日 14:41 UTC

HTTP异常排名

如果你曾使用过Burp Intruder或Turbo Intruder,你肯定熟悉这样的重复劳动:为了从数千个响应中找出有价值的信息,需要手动根据长度、状态码等对结果表进行反复排序。我开发了一种名为“HTTP异常排名”的算法,它能有效地为你挑出最有趣的响应。

HTTP异常排名现已集成到Turbo Intruder中,并能自动将最异常的发现结果置顶,完全无需你动手。

我们也在Burp Suite 2025.10版本的API中集成了该算法,以便你能在自己的工具中轻松使用。由于它能高效筛选海量结果集,对于任何希望构建基于AI功能的人来说尤其有用。在本文中,我将深入解释该算法的工作原理,但首先来看一个简短的演示:

此处原有一处视频演示占位符

HTTP异常排名

HTTP异常排名源于我在2016年进行“反斜杠驱动的扫描器:自动化人类直觉”研究时开发的差异比对逻辑。我构建“反斜杠驱动的扫描器”是为了通过识别对诸如 "' 这类载荷对所产生的响应中的细微差异,来发现未知的注入漏洞类别。准确比对HTTP响应是一个众所周知的难题,因为它们通常包含大量噪声,但我最终找到了一种可靠的方法,其基础是计算大量的响应属性(如状态码、行数、确切的字节序列…),识别哪些属性是稳定的,并利用这些属性进行响应比较。这使得我能回答“这两个载荷的响应是否持续不同”这个问题,并自动化地发现了一些非常棒的漏洞。查看白皮书和演示文稿以获取完整细节。

HTTP异常排名根据每个响应与其他响应的差异程度为其打分。首先,它会根据每个属性的稳定性为其计算一个权重。

载荷 状态 Content-Type 词数 CRC32
administrator 403 text/html 812 d753916d
admin 403 text/html 812 5129f3bd
sales 503 text/html 97 710639db
accounting 200 text/html 812 3978f20f
ADMIN 403 text/html 811 9fa1cbc1
root 503 text/html 97 27df2486
test 403 text/html 812 e45449e7

以上面的响应集为例:

  • 状态 只有两个唯一值,因此权重很高。
  • Content-Type 从未改变,所以无用。
  • CRC32 在每个响应上都是唯一的,所以无用(可能用户名被反射了)。
  • 词数 有三个唯一值,因此有用,但权重低于状态。

然后,算法会查看每个响应,并根据该响应上观察到的属性值的唯一性程度,结合该属性的唯一性程度,为其分配一个分数。在此示例中,ADMIN 最终得分最高,因为它具有唯一的词数。

这种方法意味着即使整体响应内容噪声很大,它也能检测并标记出存在微小差异的响应——请查看上面的视频示例。

随着收集到的响应增多,分数的准确性会提高。计算过程在计算上相当繁重,但算法复杂度为 O(N),因此具有良好的可扩展性。在Turbo Intruder中,我让分数只在攻击完成后才进行计算,以最小化CPU周期的浪费。

Turbo Intruder集成

我对Turbo Intruder的愿景之一是尽可能减少用户点击。为实现这一目标,现在它会在攻击完成时自动按异常排名列对结果表进行排序。希望这个策略对你有用,但如果不合适,你可以使用 table.setSortOrder() 覆盖此行为,并按你选择的任何列自动排序。

我期待很快能为Turbo Intruder宣布更多旨在提升使用体验的更新!

如果你看到“异常排名”列但其值始终为0,这意味着你需要更新Burp Suite。此功能在2025.10及更高版本中可用。

请告诉我你的使用体验,以及你是否也希望在Burp Intruder中看到此功能。

尽情使用吧!

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