Black Hat 2026 的讲台上,PortSwigger 的研究总监 James Kettle 放出一张地图。地图上分布着大约 700 个被标记的坐标——不是蜜罐,不是实验室靶场,而是真实互联网上的目标:大型金融机构、政府基础设施、企业安全产品,甚至一个机场。
这些目标,是被一套名为 HTTP Terminator 的 AI 辅助系统发现的。在它自主生成的约 30,000 个攻击向量面前,这 700 个真实目标暴露出可被利用的漏洞。
如果故事到这里,它顶多算"AI 效率很高"。
但 Kettle 接下来放出的东西,才是真正让会场安静下来的部分:AI 发明了一个全新的漏洞类别,人类此前从未命名过它。 Kettle 给它取名叫 shared-parser confusion(共享解析器混淆)。
安全界长期以来有一个共识:AI 能更快地发现已知漏洞,但要"发明"一种人类从未归类过的新攻击类别,仍然需要人类天才的直觉。HTTP Terminator 第一次用可复现的方式,动摇了这个共识。
先别急着喊"AI 要取代黑客"。这件事的真相,比"AI 很厉害"复杂得多,也精彩得多。
什么是 shared-parser confusion?
要理解这个新漏洞,得先理解它出生的家族——HTTP 请求走私(request smuggling),也就是 desync 攻击。
请求走私的核心,是前后端对"一个请求在哪里结束"的认知不一致。
一个正常的 HTTP 请求到达网站时,通常要过两道关:前面的反向代理 / 负载均衡 / WAF(前端),和真正执行业务逻辑的应用服务器(后端)。前端负责收流量、转发,后端负责干活,两者通过一条持久连接通信。
问题来了:请求边界靠什么确定?两种方式——Content-Length(说"我这个请求体有多长")和 Transfer-Encoding(说"我按块传输,读到空块为止")。
如果前端和后端对这两者的优先级判断不一致,攻击者就能构造一个请求:前端眼里是一个请求,后端眼里是两个。多出来的那个请求,就"走私"进了后端。经典手法包括 CL.TE(前端信 Content-Length,后端信 Transfer-Encoding)和 TE.TE(两端都信 TE,但解析细节不同)。
# 经典 CL.TE 走私(示意)
POST / HTTP/1.1
Host: target
Content-Length: 13 # 前端:读 13 个字节,请求到此为止
Transfer-Encoding: chunked # 后端:按 chunked 读,"0" 块之后是下一个请求
0
GET /admin HTTP/1.1 # 前端眼里:还是第一个请求的"身体"
# 后端眼里:这是走私进来的第二个请求
走私进去的请求能干什么?绕 WAF、投毒缓存、劫持其他用户的请求……其中最狠的一种叫 响应队列投毒(response queue poisoning)。
响应队列投毒的思路是:让后端"多处理了一个请求",从而多产生一个响应,留在连接队列里。 当下一个受害者的请求到达时,前端会把队列里残留的响应错配给它——如果攻击者能控制那个残留响应,就能往受害者的页面里注入任意内容;反过来,攻击者也能让自己的请求,拿到受害者的私密响应。两个人的"请求-响应配对"被打乱了,A 的数据,就这样流向了 B。
理解了这条家族谱系,shared-parser confusion 就很好懂了。
Kettle 发现,部分 Web 服务器在解析"入站请求"和"出站响应"时,复用同一套解析逻辑。这就像写字楼的一位门卫,用同一本规章制度,同时管理"进门的人"和"出门的人"——但进门和出门要检查的东西,本来就不一样。
攻击者利用这一点:把本应只出现在响应里的头(response-only header),塞进请求里。服务器一看,解析逻辑认识这些头,就按响应语义去处理了。于是一个本来无害的请求,暴露出了服务器根本没打算暴露的攻击面。
这就是 shared-parser confusion:解析器的"双重身份"成为攻击面。
一个更贴切的类比:如果你的门和保险柜用的是同一把锁,那么撬开这把锁的人,两扇门都能打开。
下面用一张图概括请求走私与 shared-parser confusion 的关系:
#mermaid-svg-CVbivfIdPF8XKniq{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-CVbivfIdPF8XKniq .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-CVbivfIdPF8XKniq .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-CVbivfIdPF8XKniq .error-icon{fill:#552222;}#mermaid-svg-CVbivfIdPF8XKniq .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-CVbivfIdPF8XKniq .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-CVbivfIdPF8XKniq .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-CVbivfIdPF8XKniq .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-CVbivfIdPF8XKniq .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-CVbivfIdPF8XKniq .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-CVbivfIdPF8XKniq .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-CVbivfIdPF8XKniq .marker{fill:#333333;stroke:#333333;}#mermaid-svg-CVbivfIdPF8XKniq .marker.cross{stroke:#333333;}#mermaid-svg-CVbivfIdPF8XKniq svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-CVbivfIdPF8XKniq p{margin:0;}#mermaid-svg-CVbivfIdPF8XKniq .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-CVbivfIdPF8XKniq .cluster-label text{fill:#333;}#mermaid-svg-CVbivfIdPF8XKniq .cluster-label span{color:#333;}#mermaid-svg-CVbivfIdPF8XKniq .cluster-label span p{background-color:transparent;}#mermaid-svg-CVbivfIdPF8XKniq .label text,#mermaid-svg-CVbivfIdPF8XKniq span{fill:#333;color:#333;}#mermaid-svg-CVbivfIdPF8XKniq .node rect,#mermaid-svg-CVbivfIdPF8XKniq .node circle,#mermaid-svg-CVbivfIdPF8XKniq .node ellipse,#mermaid-svg-CVbivfIdPF8XKniq .node polygon,#mermaid-svg-CVbivfIdPF8XKniq .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-CVbivfIdPF8XKniq .rough-node .label text,#mermaid-svg-CVbivfIdPF8XKniq .node .label text,#mermaid-svg-CVbivfIdPF8XKniq .image-shape .label,#mermaid-svg-CVbivfIdPF8XKniq .icon-shape .label{text-anchor:middle;}#mermaid-svg-CVbivfIdPF8XKniq .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-CVbivfIdPF8XKniq .rough-node .label,#mermaid-svg-CVbivfIdPF8XKniq .node .label,#mermaid-svg-CVbivfIdPF8XKniq .image-shape .label,#mermaid-svg-CVbivfIdPF8XKniq .icon-shape .label{text-align:center;}#mermaid-svg-CVbivfIdPF8XKniq .node.clickable{cursor:pointer;}#mermaid-svg-CVbivfIdPF8XKniq .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-CVbivfIdPF8XKniq .arrowheadPath{fill:#333333;}#mermaid-svg-CVbivfIdPF8XKniq .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-CVbivfIdPF8XKniq .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-CVbivfIdPF8XKniq .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CVbivfIdPF8XKniq .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-CVbivfIdPF8XKniq .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CVbivfIdPF8XKniq .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-CVbivfIdPF8XKniq .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-CVbivfIdPF8XKniq .cluster text{fill:#333;}#mermaid-svg-CVbivfIdPF8XKniq .cluster span{color:#333;}#mermaid-svg-CVbivfIdPF8XKniq div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-CVbivfIdPF8XKniq .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-CVbivfIdPF8XKniq rect.text{fill:none;stroke-width:0;}#mermaid-svg-CVbivfIdPF8XKniq .icon-shape,#mermaid-svg-CVbivfIdPF8XKniq .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CVbivfIdPF8XKniq .icon-shape p,#mermaid-svg-CVbivfIdPF8XKniq .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-CVbivfIdPF8XKniq .icon-shape .label rect,#mermaid-svg-CVbivfIdPF8XKniq .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CVbivfIdPF8XKniq .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-CVbivfIdPF8XKniq .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-CVbivfIdPF8XKniq :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
CL.TE / TE.CL 不一致
CL.TE / TE.CL 不一致
响应专用头塞进请求
攻击者构造请求
前端解析
后端解析
请求走私 desync
响应队列投毒 RQP
shared-parser confusion
解析器双重身份被利用
暴露新攻击面
HTTP Terminator 是怎么工作的?
现在拆解这套系统。它的流水线大致是四步。
第一步:把标准拆成"灵感碎片"。
Kettle 把 138 份技术规格与互联网标准喂给 AI——包括 RFC、协议文档、各种中间件与服务器的行为规范。AI 把它们拆解成大约 15,000 个"灵感碎片"(fragments of inspiration)。
什么叫灵感碎片?可以理解成:把一整本协议手册,拆成一张张"这张纸可能在描述某种可被滥用行为"的卡片。比如"某个头在某种情况下会被忽略"“某个解析器读到某个字符时会提前结束”。单看每一张都无关痛痒,但它们是攻击向量的积木。
第二步:让 AI 拼积木,生成攻击向量。
AI 系统基于这些碎片,自主组合出大约 30,000 个独特的攻击向量。注意,是"独特"——不是 30,000 次重复尝试,而是 30,000 个不同的构造思路。
第三步:发现级联(discovery cascade)。
这是整个系统最精妙的设计。Kettle 不是把 30,000 个向量一次性丢出去跑,而是让系统"渐进式探索":一个向量命中了一个有趣的现象,这个现象就成为下一个搜索的种子,再生成一批新向量,再命中,再扩散——像雪球一样越滚越大,最终滚出了 shared-parser confusion 这个此前无人归类的类别。
第四步:人类验证闭环。
这是最容易被忽略、也最关键的一步。AI 提出了 shared-parser confusion 的概念,但它的产出需要 Kettle 本人的专家验证来泛化和证明——这个概念能不能推广到更多服务器?能不能稳定复现?边界在哪?
HTTP Terminator 不是一个"丢给 AI 就自动打完收工"的黑盒。Kettle 在一个严格的确定性代码边界内运行它:他提出窄问题(narrow questions),排除弱答案,引导系统走向更有价值的方向。
所以准确的说法是:人类直觉引导 AI 规模(human intuition directs AI scale)。AI 负责规模,人类负责方向。
HTTP Terminator 的四步流水线可以用下面这张图表示:
#mermaid-svg-5KvhPDUxMYhww8Ue{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-5KvhPDUxMYhww8Ue .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-5KvhPDUxMYhww8Ue .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-5KvhPDUxMYhww8Ue .error-icon{fill:#552222;}#mermaid-svg-5KvhPDUxMYhww8Ue .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-5KvhPDUxMYhww8Ue .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-5KvhPDUxMYhww8Ue .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-5KvhPDUxMYhww8Ue .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-5KvhPDUxMYhww8Ue .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-5KvhPDUxMYhww8Ue .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-5KvhPDUxMYhww8Ue .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-5KvhPDUxMYhww8Ue .marker{fill:#333333;stroke:#333333;}#mermaid-svg-5KvhPDUxMYhww8Ue .marker.cross{stroke:#333333;}#mermaid-svg-5KvhPDUxMYhww8Ue svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-5KvhPDUxMYhww8Ue p{margin:0;}#mermaid-svg-5KvhPDUxMYhww8Ue .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-5KvhPDUxMYhww8Ue .cluster-label text{fill:#333;}#mermaid-svg-5KvhPDUxMYhww8Ue .cluster-label span{color:#333;}#mermaid-svg-5KvhPDUxMYhww8Ue .cluster-label span p{background-color:transparent;}#mermaid-svg-5KvhPDUxMYhww8Ue .label text,#mermaid-svg-5KvhPDUxMYhww8Ue span{fill:#333;color:#333;}#mermaid-svg-5KvhPDUxMYhww8Ue .node rect,#mermaid-svg-5KvhPDUxMYhww8Ue .node circle,#mermaid-svg-5KvhPDUxMYhww8Ue .node ellipse,#mermaid-svg-5KvhPDUxMYhww8Ue .node polygon,#mermaid-svg-5KvhPDUxMYhww8Ue .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-5KvhPDUxMYhww8Ue .rough-node .label text,#mermaid-svg-5KvhPDUxMYhww8Ue .node .label text,#mermaid-svg-5KvhPDUxMYhww8Ue .image-shape .label,#mermaid-svg-5KvhPDUxMYhww8Ue .icon-shape .label{text-anchor:middle;}#mermaid-svg-5KvhPDUxMYhww8Ue .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-5KvhPDUxMYhww8Ue .rough-node .label,#mermaid-svg-5KvhPDUxMYhww8Ue .node .label,#mermaid-svg-5KvhPDUxMYhww8Ue .image-shape .label,#mermaid-svg-5KvhPDUxMYhww8Ue .icon-shape .label{text-align:center;}#mermaid-svg-5KvhPDUxMYhww8Ue .node.clickable{cursor:pointer;}#mermaid-svg-5KvhPDUxMYhww8Ue .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-5KvhPDUxMYhww8Ue .arrowheadPath{fill:#333333;}#mermaid-svg-5KvhPDUxMYhww8Ue .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-5KvhPDUxMYhww8Ue .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-5KvhPDUxMYhww8Ue .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5KvhPDUxMYhww8Ue .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-5KvhPDUxMYhww8Ue .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5KvhPDUxMYhww8Ue .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-5KvhPDUxMYhww8Ue .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-5KvhPDUxMYhww8Ue .cluster text{fill:#333;}#mermaid-svg-5KvhPDUxMYhww8Ue .cluster span{color:#333;}#mermaid-svg-5KvhPDUxMYhww8Ue div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-5KvhPDUxMYhww8Ue .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-5KvhPDUxMYhww8Ue rect.text{fill:none;stroke-width:0;}#mermaid-svg-5KvhPDUxMYhww8Ue .icon-shape,#mermaid-svg-5KvhPDUxMYhww8Ue .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-5KvhPDUxMYhww8Ue .icon-shape p,#mermaid-svg-5KvhPDUxMYhww8Ue .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-5KvhPDUxMYhww8Ue .icon-shape .label rect,#mermaid-svg-5KvhPDUxMYhww8Ue .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-5KvhPDUxMYhww8Ue .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-5KvhPDUxMYhww8Ue .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-5KvhPDUxMYhww8Ue :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
138 份协议标准
拆解为 15,000 个灵感碎片
组合生成 30,000 个攻击向量
发现级联 discovery cascade
人类验证闭环
shared-parser confusion 被命名
这为什么重要:打破共识的三种解读
对防御者:WAF 厂商已经开始行动。 消息在 Black Hat 2026 公开后,WAF 厂商已经开始更新引擎,拦截新的 desync 模式。如果你负责防御,这意味着:以前你只需要盯住已知的走私手法,现在你面对的是一个能持续产出"新物种"的对手。纯靠规则库的思路可能不够了,需要更根本的解析一致性设计。
对渗透测试员:这不是替代,是杠杆。 30,000 个攻击向量、700 个真实目标——这不是一个人能完成的规模。HTTP Terminator 展示的不是"AI 取代渗透测试员",而是"一个渗透测试员的直觉,被 AI 放大了三个数量级"。会提好问题的人,价值反而更高了。
对 AI 安全研究者:安全研究本身进入了新范式。 当"发现新漏洞类别"从人类天才的灵光一现,变成"人类引导 + AI 规模"的可复现流程,漏洞研究的方法论就被改写了。shared-parser confusion 不是 AI 的偶然失误,而是可复现的产物——PortSwigger 已经计划开源 HTTP Terminator 的方法论。
从"发现"到"打穿":一条基于 desync 的渗透链路
前文讲的是 AI 怎么"发现"漏洞。但真正拿到一个 desync 漏洞时,渗透测试员面对的问题是另一个:它能不能变成一条路? 走私类漏洞的价值,从来不在于"能触发",而在于"能走多远"。
第一步,侦察:先问这个站点经过了几双手。
请求走私的前提是前后端分离——前面有一台代理/负载均衡/WAF,后面有一台业务服务器。判断"能不能打",渗透测试员先看三件事:
- 响应头里是否有多个 Server、是否带 X-Cache/CDN 痕迹;
- 同一请求在不同路径下,前端是否做了不同的规范化处理;
- 对畸形头、重复头、大小写变体,前后端是否表现出"两种脾气"。
走私的本质,是让两台服务器对同一段字节读出两种意思。 所以第一个问题永远是:这个站点的请求,到底经过了几双手?
第二步,验证:CL.TE / TE.CL 怎么确认。
原理不再赘述,只说打法。探测走私点最常用的是"时间盲注式"验证:塞一个会让下一个请求延迟的走私前缀,然后连续发送正常请求,观察是否出现异常延迟。前端按 Content-Length 记账,后端按 Transfer-Encoding 记账,同一段字节被拆成两本账——只要两本账对不上,就有缝隙。
这里有个容易被忽略的细节:单包攻击。 把整条走私载荷塞进单个 TCP 包发出,避免分片导致重组时边界被改写。探测和利用都要记住一个原则:你控制的字节越完整,你缝进别人请求里的动作就越可控。
第三步,窃取:从"碰运气"到"等就行"。
走私验证通过后,最值钱的动作是响应窃取——RQP,响应队列投毒。原理是把一个走私请求"挂"在队列里,让下一个合法用户的响应被你截获。但经典的 RQP 有个致命弱点:竞态。 你无法保证受害者请求恰好在你需要的时间到达,于是"能不能偷到"变成了运气问题。
HTTP Terminator 里胜出的 dangling-byte 技术,恰恰把这个问题反转了。走私请求故意短一个字节——它不完整,所以无法被后端处理,只能在队列里悬停。直到下一个合法受害者的请求字节补上这个缺口,两个请求才合并成一个,响应窃取随之完成。让漏洞从"碰运气"变成"等就行",这一个字节的悬停,就是可靠性的全部秘密。 这种可靠性的价值,Kettle 团队自己已经验证过:在一次运行中,AI 意外窃取了一枚实时 API key——响应窃取的杀伤力是直接兑现的。
第四步,放大:一条链路的终点由你决定。
- 缓存投毒:把攻击载荷写进缓存层,污染所有后续用户;
- 绕 WAF:请求在前端完成规则检查后被走私到后端,规则形同虚设;
- 会话劫持:从窃取的响应里提取 Cookie 与令牌;
- 提权与横向:如果被吞掉的是内部服务或管理员的请求,捕获后重放,就是借力打力。
一条 desync 链路的终点,取决于渗透测试员想把它接到哪里。
一条基于 desync 的渗透链路,从侦察到放大,可以用下面这张图串联起来:
#mermaid-svg-6pEXnBhgsC5JYD65{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-6pEXnBhgsC5JYD65 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-6pEXnBhgsC5JYD65 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-6pEXnBhgsC5JYD65 .error-icon{fill:#552222;}#mermaid-svg-6pEXnBhgsC5JYD65 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-6pEXnBhgsC5JYD65 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-6pEXnBhgsC5JYD65 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-6pEXnBhgsC5JYD65 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-6pEXnBhgsC5JYD65 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-6pEXnBhgsC5JYD65 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-6pEXnBhgsC5JYD65 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-6pEXnBhgsC5JYD65 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-6pEXnBhgsC5JYD65 .marker.cross{stroke:#333333;}#mermaid-svg-6pEXnBhgsC5JYD65 svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-6pEXnBhgsC5JYD65 p{margin:0;}#mermaid-svg-6pEXnBhgsC5JYD65 .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-6pEXnBhgsC5JYD65 .cluster-label text{fill:#333;}#mermaid-svg-6pEXnBhgsC5JYD65 .cluster-label span{color:#333;}#mermaid-svg-6pEXnBhgsC5JYD65 .cluster-label span p{background-color:transparent;}#mermaid-svg-6pEXnBhgsC5JYD65 .label text,#mermaid-svg-6pEXnBhgsC5JYD65 span{fill:#333;color:#333;}#mermaid-svg-6pEXnBhgsC5JYD65 .node rect,#mermaid-svg-6pEXnBhgsC5JYD65 .node circle,#mermaid-svg-6pEXnBhgsC5JYD65 .node ellipse,#mermaid-svg-6pEXnBhgsC5JYD65 .node polygon,#mermaid-svg-6pEXnBhgsC5JYD65 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-6pEXnBhgsC5JYD65 .rough-node .label text,#mermaid-svg-6pEXnBhgsC5JYD65 .node .label text,#mermaid-svg-6pEXnBhgsC5JYD65 .image-shape .label,#mermaid-svg-6pEXnBhgsC5JYD65 .icon-shape .label{text-anchor:middle;}#mermaid-svg-6pEXnBhgsC5JYD65 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-6pEXnBhgsC5JYD65 .rough-node .label,#mermaid-svg-6pEXnBhgsC5JYD65 .node .label,#mermaid-svg-6pEXnBhgsC5JYD65 .image-shape .label,#mermaid-svg-6pEXnBhgsC5JYD65 .icon-shape .label{text-align:center;}#mermaid-svg-6pEXnBhgsC5JYD65 .node.clickable{cursor:pointer;}#mermaid-svg-6pEXnBhgsC5JYD65 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-6pEXnBhgsC5JYD65 .arrowheadPath{fill:#333333;}#mermaid-svg-6pEXnBhgsC5JYD65 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-6pEXnBhgsC5JYD65 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-6pEXnBhgsC5JYD65 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-6pEXnBhgsC5JYD65 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-6pEXnBhgsC5JYD65 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-6pEXnBhgsC5JYD65 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-6pEXnBhgsC5JYD65 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-6pEXnBhgsC5JYD65 .cluster text{fill:#333;}#mermaid-svg-6pEXnBhgsC5JYD65 .cluster span{color:#333;}#mermaid-svg-6pEXnBhgsC5JYD65 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-6pEXnBhgsC5JYD65 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-6pEXnBhgsC5JYD65 rect.text{fill:none;stroke-width:0;}#mermaid-svg-6pEXnBhgsC5JYD65 .icon-shape,#mermaid-svg-6pEXnBhgsC5JYD65 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-6pEXnBhgsC5JYD65 .icon-shape p,#mermaid-svg-6pEXnBhgsC5JYD65 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-6pEXnBhgsC5JYD65 .icon-shape .label rect,#mermaid-svg-6pEXnBhgsC5JYD65 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-6pEXnBhgsC5JYD65 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-6pEXnBhgsC5JYD65 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-6pEXnBhgsC5JYD65 :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
判断前后端分离
时间盲注 + 单包攻击
dangling-byte 悬停
第一步:侦察
第二步:验证 CL.TE / TE.CL
第三步:窃取 RQP
第四步:放大
缓存投毒
绕 WAF
会话劫持
提权与横向
一类"人类不知道去哪找"的攻击面
打法链是在已知的洞上做文章。shared-parser confusion 的问题更前置:我们得先知道洞在哪。
先回顾一个词:某些服务器实现会复用同一套解析逻辑去处理请求和响应。于是,本应在"处理响应"时才激活的规则,可以被请求里构造的数据触发。这就是 shared-parser confusion——一种此前人类没有命名、也不知道去哪找的漏洞类别。
最直观的例子是 Content-Type: multipart/byteranges。这是一个响应专用头——只在 HTTP Range 多段响应里出现,正常的请求根本不该携带它。但共享解析器在请求里看到它时,会误以为自己在处理响应,激活响应分支,desync 就此产生。超过 200 个站点中招,包括一家未具名美国大银行。
对渗透测试员来说,这个类别最大的意义是新增了一整块此前不存在的排查范围。系统排查方法其实不复杂:
这套方法本质上是一句话:把响应世界的规则,拿来问请求世界。 扫描器做不到这件事——它按已知模式匹配,只找它认识的漏洞,而 shared-parser confusion 属于它不认识的漏洞类别。但理解协议语义的人可以提出扫描器不会问的问题。200+ 站点中招、银行在列,说明这类问题真实存在,且就藏在我们每天都会遇到的企业产品里(正如官方确认可追溯到 BeyondTrust、Apache Traffic Server、Citrix NetScaler 等广泛部署的产品)。
攻击面不在响应里,而在响应头与请求头的交界处。
排查 shared-parser confusion 的系统方法,可以归纳为下面三步:
#mermaid-svg-yJNi0EoBIZRZom5c{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-yJNi0EoBIZRZom5c .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-yJNi0EoBIZRZom5c .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-yJNi0EoBIZRZom5c .error-icon{fill:#552222;}#mermaid-svg-yJNi0EoBIZRZom5c .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-yJNi0EoBIZRZom5c .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-yJNi0EoBIZRZom5c .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-yJNi0EoBIZRZom5c .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-yJNi0EoBIZRZom5c .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-yJNi0EoBIZRZom5c .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-yJNi0EoBIZRZom5c .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-yJNi0EoBIZRZom5c .marker{fill:#333333;stroke:#333333;}#mermaid-svg-yJNi0EoBIZRZom5c .marker.cross{stroke:#333333;}#mermaid-svg-yJNi0EoBIZRZom5c svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-yJNi0EoBIZRZom5c p{margin:0;}#mermaid-svg-yJNi0EoBIZRZom5c .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-yJNi0EoBIZRZom5c .cluster-label text{fill:#333;}#mermaid-svg-yJNi0EoBIZRZom5c .cluster-label span{color:#333;}#mermaid-svg-yJNi0EoBIZRZom5c .cluster-label span p{background-color:transparent;}#mermaid-svg-yJNi0EoBIZRZom5c .label text,#mermaid-svg-yJNi0EoBIZRZom5c span{fill:#333;color:#333;}#mermaid-svg-yJNi0EoBIZRZom5c .node rect,#mermaid-svg-yJNi0EoBIZRZom5c .node circle,#mermaid-svg-yJNi0EoBIZRZom5c .node ellipse,#mermaid-svg-yJNi0EoBIZRZom5c .node polygon,#mermaid-svg-yJNi0EoBIZRZom5c .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-yJNi0EoBIZRZom5c .rough-node .label text,#mermaid-svg-yJNi0EoBIZRZom5c .node .label text,#mermaid-svg-yJNi0EoBIZRZom5c .image-shape .label,#mermaid-svg-yJNi0EoBIZRZom5c .icon-shape .label{text-anchor:middle;}#mermaid-svg-yJNi0EoBIZRZom5c .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-yJNi0EoBIZRZom5c .rough-node .label,#mermaid-svg-yJNi0EoBIZRZom5c .node .label,#mermaid-svg-yJNi0EoBIZRZom5c .image-shape .label,#mermaid-svg-yJNi0EoBIZRZom5c .icon-shape .label{text-align:center;}#mermaid-svg-yJNi0EoBIZRZom5c .node.clickable{cursor:pointer;}#mermaid-svg-yJNi0EoBIZRZom5c .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-yJNi0EoBIZRZom5c .arrowheadPath{fill:#333333;}#mermaid-svg-yJNi0EoBIZRZom5c .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-yJNi0EoBIZRZom5c .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-yJNi0EoBIZRZom5c .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-yJNi0EoBIZRZom5c .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-yJNi0EoBIZRZom5c .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-yJNi0EoBIZRZom5c .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-yJNi0EoBIZRZom5c .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-yJNi0EoBIZRZom5c .cluster text{fill:#333;}#mermaid-svg-yJNi0EoBIZRZom5c .cluster span{color:#333;}#mermaid-svg-yJNi0EoBIZRZom5c div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-yJNi0EoBIZRZom5c .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-yJNi0EoBIZRZom5c rect.text{fill:none;stroke-width:0;}#mermaid-svg-yJNi0EoBIZRZom5c .icon-shape,#mermaid-svg-yJNi0EoBIZRZom5c .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-yJNi0EoBIZRZom5c .icon-shape p,#mermaid-svg-yJNi0EoBIZRZom5c .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-yJNi0EoBIZRZom5c .icon-shape .label rect,#mermaid-svg-yJNi0EoBIZRZom5c .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-yJNi0EoBIZRZom5c .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-yJNi0EoBIZRZom5c .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-yJNi0EoBIZRZom5c :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
超时 / 报错 / 队列异常
列响应头清单
逐个塞进请求
观察解析行为差异
确认 shared-parser confusion
冷思考:不要神化 AI
在兴奋之余,另一组数据值得所有人冷静一下。
ProjectDiscovery 的研究员审计了 54 个黑盒 Web 靶标上的 AI 渗透 agent,结果很有意思:46 次失败的运行里,AI 其实已经识别出了正确的漏洞,但无法完成利用。
换句话说:AI 认得漏洞,但打不穿。
识别(finding)和利用(exploitation)之间,隔着一条巨大的鸿沟。找到漏洞只需要"发现异常",利用漏洞需要"精确控制状态机、绕过各种限制、处理真实环境的脏数据"——这是当前 AI agent 最不稳定的环节。在审计中,开放模型覆盖了 52 个目标,闭源模型覆盖 48 个,差距并不大;而最便宜的一次全语料运行,成本不到 1 美元。
这组数据说明什么?AI 做安全研究的"广度"已经非常惊人,但"深度"——把发现变成稳定利用——依然脆弱。 HTTP Terminator 的 700 个目标里,有多少是"完全可利用",有多少是"已识别漏洞待验证"?素材没有给出全部答案,但一个合理推测是:Kettle 本人的人类验证环节,恰恰补上了这个最脆弱的环节。
这也是为什么"AI 发明新漏洞类别"和"AI 自主完成攻击"是两件完全不同的事。前者是识别与命名,后者是从发现到利用的完整闭环。前者已经发生,后者依然在路上。
AI 辅助渗透:万条路交给机器,判断留给自己
前面讲了 AI 认得漏洞但打不穿,那它到底该用在哪一环?答案是:用在一件人类做起来很贵、AI 做起来很便宜的事上。
PortSwigger 已计划开源 HTTP Terminator 的方法论。这意味着渗透测试员可以复用的不只是某个工具,而是一套协作范式:AI 负责向量生成与批量验证——138 份协议规范拆成 15,000 个灵感碎片,生成 30,000 个攻击向量,这些"刷量"的活交给机器;人类负责攻击方向与利用闭环——决定哪些碎片值得跟进、把疑似漏洞变成稳定利用、最终写进报告。
ProjectDiscovery 的审计数据给出过一个非常清醒的注脚:54 个黑盒靶标里,46 次是"识别到了漏洞、但没完成利用"。识别与利用之间的鸿沟,正是渗透测试员不可替代的价值点。 而最便宜的一次全语料运行不到 1 美元——门槛从来不在算力,在判断力。
落到实操,有三条建议可以立刻用起来:
回看 Kettle 那句被媒体反复引用的话——“Neither of us would have discovered it alone”,我们俩谁单独都发现不了。这不是一句谦虚,而是对新型人机分工的准确描述。AI 负责跑完一万条路,人类负责判断哪条路值得走完。
AI 与人类在渗透中的分工,可以用下面这张图来概括:
#mermaid-svg-Uvkvel2d6dU2YePp{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Uvkvel2d6dU2YePp .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Uvkvel2d6dU2YePp .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Uvkvel2d6dU2YePp .error-icon{fill:#552222;}#mermaid-svg-Uvkvel2d6dU2YePp .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Uvkvel2d6dU2YePp .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Uvkvel2d6dU2YePp .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Uvkvel2d6dU2YePp .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Uvkvel2d6dU2YePp .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Uvkvel2d6dU2YePp .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Uvkvel2d6dU2YePp .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Uvkvel2d6dU2YePp .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Uvkvel2d6dU2YePp .marker.cross{stroke:#333333;}#mermaid-svg-Uvkvel2d6dU2YePp svg{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Uvkvel2d6dU2YePp p{margin:0;}#mermaid-svg-Uvkvel2d6dU2YePp .label{font-family:\”trebuchet ms\”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-Uvkvel2d6dU2YePp .cluster-label text{fill:#333;}#mermaid-svg-Uvkvel2d6dU2YePp .cluster-label span{color:#333;}#mermaid-svg-Uvkvel2d6dU2YePp .cluster-label span p{background-color:transparent;}#mermaid-svg-Uvkvel2d6dU2YePp .label text,#mermaid-svg-Uvkvel2d6dU2YePp span{fill:#333;color:#333;}#mermaid-svg-Uvkvel2d6dU2YePp .node rect,#mermaid-svg-Uvkvel2d6dU2YePp .node circle,#mermaid-svg-Uvkvel2d6dU2YePp .node ellipse,#mermaid-svg-Uvkvel2d6dU2YePp .node polygon,#mermaid-svg-Uvkvel2d6dU2YePp .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Uvkvel2d6dU2YePp .rough-node .label text,#mermaid-svg-Uvkvel2d6dU2YePp .node .label text,#mermaid-svg-Uvkvel2d6dU2YePp .image-shape .label,#mermaid-svg-Uvkvel2d6dU2YePp .icon-shape .label{text-anchor:middle;}#mermaid-svg-Uvkvel2d6dU2YePp .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Uvkvel2d6dU2YePp .rough-node .label,#mermaid-svg-Uvkvel2d6dU2YePp .node .label,#mermaid-svg-Uvkvel2d6dU2YePp .image-shape .label,#mermaid-svg-Uvkvel2d6dU2YePp .icon-shape .label{text-align:center;}#mermaid-svg-Uvkvel2d6dU2YePp .node.clickable{cursor:pointer;}#mermaid-svg-Uvkvel2d6dU2YePp .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Uvkvel2d6dU2YePp .arrowheadPath{fill:#333333;}#mermaid-svg-Uvkvel2d6dU2YePp .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Uvkvel2d6dU2YePp .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Uvkvel2d6dU2YePp .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Uvkvel2d6dU2YePp .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Uvkvel2d6dU2YePp .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Uvkvel2d6dU2YePp .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Uvkvel2d6dU2YePp .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Uvkvel2d6dU2YePp .cluster text{fill:#333;}#mermaid-svg-Uvkvel2d6dU2YePp .cluster span{color:#333;}#mermaid-svg-Uvkvel2d6dU2YePp div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:\”trebuchet ms\”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Uvkvel2d6dU2YePp .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Uvkvel2d6dU2YePp rect.text{fill:none;stroke-width:0;}#mermaid-svg-Uvkvel2d6dU2YePp .icon-shape,#mermaid-svg-Uvkvel2d6dU2YePp .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Uvkvel2d6dU2YePp .icon-shape p,#mermaid-svg-Uvkvel2d6dU2YePp .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Uvkvel2d6dU2YePp .icon-shape .label rect,#mermaid-svg-Uvkvel2d6dU2YePp .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Uvkvel2d6dU2YePp .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Uvkvel2d6dU2YePp .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Uvkvel2d6dU2YePp :root{–mermaid-font-family:\”trebuchet ms\”,verdana,arial,sans-serif;}
人类负责判断
提出窄问题
排除弱答案
验证并证明
AI 负责规模
拆解 138 份标准
生成 30,000 个向量
批量验证
稳定利用 + 报告
时代背景:攻防双方,都在用 AI
把视野拉远一点。HTTP Terminator 不是孤例,2026 年的安全圈正在集体进入"攻防双方都用 AI"的新阶段——而且很多迹象并不让人安心。
AI 蠕虫已经出现。 短短一周内,LiteLLM(CVE-2026-42271)和 OpenCode(CVE-2026-22812)两个漏洞被规模化利用。攻击者把 AI 基础设施当成"凭据密度最高的服务器品类"——收割 API key,再用收割来的 key 驱动下一波攻击。AI 系统不仅是目标,还成了攻击者的弹药库。
模型权重本身正在成为安全决策。 Z.ai 推迟了 GLM 5.3 开源权重的发布。这款模型在 CyberGym 评测达到 84.5%,在 ExploitBench 达到 54.4%,内部记录显示它发现了 2,436 个漏洞(覆盖 269 个开源项目)。当一个模型的能力强到"开源即风险"时,发布权重就从工程决策变成了安全决策。
Agent 的安全边界正在被系统性击穿。 AWS 的 Strands Agents Tools 在 23 天内收到 4 个 CVE,根因高度一致:凭据处理、代理配置、shell 执行同意控制、租户命名空间——这些安全关键参数,被暴露成了 LLM 可控的输入。
还有 Nightcrawler:一个完全运行在 OnePlus 8 手机上的自主渗透 agent,1.2B 参数的本地模型,无云连接,靠 27 个利用剧本和 24,956 条 CVE 数据库工作,像一位耐心的渗透测试员一样逐主机轮转。
把这些放在一起,你会看到一幅完整的图景:AI 正在同时成为攻击者、被攻击对象和攻击基础设施。 安全行业过去几十年的"人在回路",正在被改写为"AI 在回路"。
对网安学习者:这个时代该学什么?
如果你正从网络基础向 Web 安全过渡,这个"AI 攻防时代"其实给你指了一条反直觉的路:基础协议知识,比任何时候都更重要。
为什么?
因为 AI 能替你做的,恰恰是"规模"那一半——枚举、组合、爆破、海量试错。而 AI 做不好的,恰恰是"判断"那一半:这个现象是不是真的异常?这个异常能不能推广?边界在哪里?——这些都需要对协议本身的深刻理解。
shared-parser confusion 的发现过程是最好的教材:15,000 个灵感碎片来自 138 份规格书,而"碎片"之所以能拼成攻击向量,前提是有人(Kettle)深刻理解 HTTP 的状态机、解析器的边界、前后端语义的差异。AI 是拼图的人,但看懂拼图的人是你。
所以,别急着背一堆 CVE 编号。去把 HTTP 协议读透:请求与响应的边界到底由什么决定?Content-Length 和 Transfer-Encoding 谁说了算?一个解析器读到非法字符时会怎么处理?这些"无聊"的基础,恰恰是 AI 时代最稀缺的、属于人类的护城河。
另外一条建议:学会给 AI 提窄问题。 HTTP Terminator 的发现级联,本质上是 Kettle 把"探索方向"不断收窄的结果。会提问、会验证、会否定弱答案——这些能力在 AI 时代不会被贬值,只会更值钱。
Black Hat 2026 的这场发布,真正让人震撼的不是"AI 发现了 700 个目标",也不是"AI 生成了 3 万个向量",而是那一句几乎被淹没的细节:
AI 提出了一种人类从未命名过的漏洞类别。
但比这更值得记住的,是它发生的方式——不是 AI 独自完成,而是"人类直觉引导 AI 规模"。AI 负责把 138 份标准拆成 15,000 个碎片、拼出 30,000 个向量、滚出发现级联;人类负责提对问题、排除弱答案、验证并证明。
这个时代的攻防,不再是人与人的对抗,也不再是人与机器的对抗,而是"人与 AI"对抗"人与 AI"。谁更会用 AI,谁更懂协议本身,谁就站在上风。
而对你我这样的学习者来说,最好的姿态是:拥抱 AI 的规模,守住人类的判断。




