前言

传统 HTTP 短轮询无法满足实时聊天、在线协同文档、后台实时告警、直播间弹幕等低延迟业务需求,WebSocket 凭借全双工长连接特性被各大厂商大规模落地使用。但绝大多数企业安全建设存在明显割裂:安全设备、业务参数校验、输入过滤逻辑全部仅针对标准 HTTP 协议做适配防护,对升级后的 WebSocket 长连接帧传输完全缺少校验逻辑,由此衍生出 WAF 绕过、各类注入、跨会话存储型 XSS、握手层劫持等高频高危漏洞。

本篇作为 WebSocket 系列入门第一阶段,完整拆解协议底层握手全流程、TCP 持久连接通信机制、WAF 边界穿透底层原理、Burp Suite 三层长连接测试实战手段,以及线上最经典的无过滤消息广播异步盲打攻击完整链路,覆盖底层协议物理逻辑、企业真实业务场景、完整攻防推演,搭建完整长连接安全测试底层认知。

一、底层核心原理:WebSocket 诞生背景与完整握手通信流程

1.1 传统 HTTP 通信无法解决的原生物理缺陷

HTTP 协议具备两大天生短板:无状态(Stateless)单向请求响应(Unidirectional)。服务端无法主动向客户端主动推送任何数据,所有数据交互必须由前端浏览器主动发起请求。 如果业务需要持续获取实时更新数据,开发只能采用轮询(Polling)方案,分为短轮询、长轮询两种,二者都存在无法规避的性能损耗:

  1. 每一次 HTTP 请求都会携带全套完整请求头 Cookie、UA、Origin 等冗余文本,产生海量无效网络带宽开销;
  2. 高频循环请求持续新建、销毁 TCP 连接,大量消耗服务器并发连接、线程资源;
  3. 数据更新存在固定轮询间隔,无法做到毫秒级低延迟同步。

1.2 WebSocket 协议完整底层运行机制

WebSocket 是一套构建在 TCP 四层套接字之上的应用层通信协议,核心设计思路:复用一次标准 HTTP GET 握手完成协议切换,握手成功后复用同一条 TCP 套接字保持持久开放,不再重复创建销毁连接。 完整交互分为两大阶段:握手协商阶段、帧数据双向传输阶段。

1.2.1 HTTP 握手升级流程

客户端发起标准 GET 请求,携带两组核心升级标识请求头,告知服务端需要切换通信协议:

  • Upgrade: websocket:声明客户端希望将当前 HTTP 连接升级为 WebSocket 协议
  • Connection: Upgrade:配合 Upgrade 头,通知中间件断开标准 HTTP 处理逻辑 服务端校验自身支持 WebSocket 协议后,返回状态码 101 Switching Protocols,代表协议切换成功。
1.2.2 全双工帧传输阶段

TCP 套接字全程保持长连接不关闭,后续客户端与服务端双向传输的所有数据,都会被封装为轻量化数据帧(Data Frames) 格式传输。 全双工核心优势:客户端、服务端二者不分主次、无需等待对方响应,可以随时随地独立向另一方推送数据,消除传统 HTTP 一问一答的时序限制,将数据通信延迟压缩至底层 TCP 网络极限。

二、协议层天然安全盲区:WAF 合法隧道穿透与传统漏洞迁移

从安全工程视角来看,WebSocket 仅仅改变了业务数据的运载载体,底层后端处理业务的代码逻辑没有发生任何变化。HTTP 接口存在的全部安全漏洞,会完整平移至 WebSocket 长连接场景,同时额外新增协议边界防护绕过风险。

2.1 绕过边界 WAF / 安全网关底层原理

市面上绝大多数传统 Web 应用防火墙(WAF)的深度包检测(DPI)规则,研发之初仅针对标准 HTTP 协议结构设计,检测目标为 URL 路径、GET 参数、POST 请求体、HTTP 头部字段。 当连接完成101协议切换后,所有交互数据都会被封装为 WebSocket 私有二进制帧格式,缺少长连接帧专用解析引擎的老旧 WAF,无法解析帧内部承载的文本、JSON、XML 载荷,只能直接放行整条完整 TCP 数据流。 这意味着 WebSocket 长连接会成为一条穿过外网边界防护设备的合法物理隧道,所有恶意载荷可以绕过外层过滤直达后端业务逻辑。

2.2 无缝迁移至长连接的经典 Web 漏洞

只要后端代码在读取、解析 WebSocket 帧内传入的数据时,缺少输入过滤、特殊字符转义、黑白名单拦截等安全清洗逻辑,传统 Web 漏洞会完整复现:

  1. SQL 注入(SQLi):帧内 JSON、纯文本参数直接字符串拼接至后端 SQL 查询语句,未做预编译处理;
  2. XML 外部实体注入(XXE):后端采用存在缺陷的原生 XML 解析器,直接解析 WebSocket 接收的 XML 格式数据帧;
  3. 存储型跨站脚本(XSS):恶意脚本载荷被服务端无过滤中继转发,推送到其他在线用户浏览器 DOM 树直接渲染执行。

三、渗透测试实战:Burp Suite 三层长连接控制与测试方法论

针对不会主动断开的持久化 TCP 长连接,常规 HTTP 抓包测试手段完全失效,Burp Suite 内置完整 WebSocket 专属测试能力,分为三个独立控制维度,覆盖握手层、实时传输层、批量模糊测试全场景:

3.1 Proxy 模块:传输中帧实时拦截与篡改(In-Flight Manipulation)

在 Burp 代理设置中开启 WebSocket 专属拦截规则,拦截逻辑不会破坏底层 TCP 长连接保活状态(Keep-Alive)。双向传输的文本帧、二进制帧都可以中途暂停、手动修改 JSON、文本类恶意载荷后放行。适用于实时交互业务,逐帧测试业务逻辑漏洞。

3.2 Repeater 模块:帧重放与后端状态机模糊测试(Replay and Generate)

将历史捕获的 WebSocket 通信帧一键导入 Repeater 工具,完全脱离前端浏览器的请求限制,自定义高频批量发送畸形、恶意、超长载荷,持续对后端服务状态机进行 Fuzz 模糊测试,专门用于检测后端对异常格式数据帧的容错逻辑、是否存在崩溃与注入风险。

3.3 握手层劫持重连(Handshake Manipulation)

当漏洞触发点位于协议建立初始握手阶段(典型如跨站 WebSocket 劫持 CSWSH、过期鉴权 Token 绕过场景),测试人员可以主动断开当前活跃 Socket 长连接,修改原始 HTTP 握手请求内的请求头、Cookie、参数,重新发起完整 TCP 三次握手,新建 WebSocket 连接复现握手层安全缺陷。

四、高频实战漏洞范式:基于长连接的异步盲打攻击架构

在真实企业 Web 业务场景中,WebSocket 造成的安全危害很少直接入侵服务器底层,更多是将服务端充当 “消息中继跳板”,跨会话、跨权限攻击其他高权限在线用户,这套标准化攻击链路统一命名为「长连接异步盲打模型」。

4.1 漏洞底层架构画像:无校验盲消息代理(The Blind Message Broker)

核心架构缺陷:开发团队仅将 WebSocket 管道简单定义为透明数据传输通道,业务处理逻辑流程为:客户端 A 发送数据帧 → 服务端完全不做任何应用层安全清洗(HTML 实体编码、恶意标签过滤、关键词黑名单拦截) → 直接定向单播推送或全局广播转发给频道内全部在线客户端。 安全建设层面存在严重认知错位:安全团队将全部拦截、校验、过滤组件部署在传统 REST HTTP 接口层,完全忽略ws://协议长连接内部流转的各类数据帧,导致长连接业务裸奔运行,无任何防护。

4.2 完整真实业务攻击场景:企业在线智能客服 / 多人协同文档系统

以企业内部客服工单系统、在线协作文档平台为典型靶场,完整攻击推演:

  1. 隧道穿透建立连接:攻击者使用普通访客身份发起 WebSocket 握手请求,外网边界 WAF 仅校验初始 HTTP 握手报文,直接放行并升级长连接隧道;
  2. 恶意载荷投递:TCP 长连接建立完成后,攻击者在通道内发送外表正常、内嵌 XSS 恶意代码的 JSON 文本帧,示例载荷:

json

{"msg_type":"chat", "content":"<img src=1 onerror='stealAdminCookie()'>"}

整套载荷封装在 WebSocket 私有帧中传输,传统边界防火墙无法识别其中的脚本标签,不会触发拦截; 3. 异步跨会话漏洞触发:后端 Node.js/Java 服务接收到该数据帧后,未做任何转义过滤,直接将聊天消息广播推送给频道内在线客服主管、企业高管等高权限账号。受害者前端页面接收 WebSocket 推送消息后,直接将内容渲染至 DOM 页面,恶意 JS 脚本在管理员高权限浏览器会话中瞬间执行,窃取 Cookie、会话凭证、后台登录 Token 等敏感数据。

4.3 该攻击模型两大核心致命特性

  1. 完全异步,无时序约束:攻击者发送完携带恶意载荷的数据帧后,可以立刻主动断开 WebSocket 连接。脏数据会被后端服务持久存入数据库,后续任意新用户接入频道、刷新页面、加载历史消息时,都会触发恶意脚本执行;
  2. 杀伤范围可批量放大:单条恶意数据帧经过服务端广播机制,可以同步推送至当前频道数百上千名在线用户终端,批量窃取大量账号凭证,危害程度远高于普通单点存储 XSS。

系列阶段小结

本阶段完整掌握 WebSocket 底层 TCP 持久连接握手机制、全双工通信核心特性、WebSocket 作为合法隧道绕过 WAF 的底层原理、Burp Suite 三套长连接测试工具使用逻辑,以及线上最高发的无过滤广播中继跨会话 XSS 完整攻击模型。 整套漏洞的统一根源:企业安全架构存在割裂,防护资源全部倾斜传统 HTTP 接口,完全忽视 WebSocket 长连接帧数据的输入校验;简单把长连接管道当作无门槛透明通道,省略输入清洗、输出转义、恶意载荷拦截等基础安全措施。 下一阶段将深入讲解跨站 WebSocket 劫持(CSWSH)、数据帧分片绕过过滤、二进制帧注入、握手鉴权失效、中间件 WebSocket 配置漏洞等进阶利用手法与标准化工程防御方案。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐