看我如何分析并渗透WebSocket和Socket.io
字数 1537 2025-08-18 11:37:45

WebSocket与Socket.io渗透测试技术详解

1. WebSocket技术概述

WebSocket是一种允许浏览器和服务器建立单个TCP连接进行全双工异步通信的技术,具有以下特点:

  • 允许实时更新,无需浏览器发送数百个新的HTTP轮询请求
  • 基于单个TCP连接的有状态协议
  • 客户端和服务器可随时发送消息,无需等待对方响应
  • 相比HTTP,WebSocket工具支持较少,测试更复杂

2. WebSocket测试工具

常用WebSocket测试工具:

  1. BurpSuite:支持WebSocket拦截和修改,但缺少Repeater、Scanner和Intruder功能
  2. Zed Attack Proxy (ZAP)
  3. Pappy Proxy
  4. Man-in-the-Middle Proxy (mitmproxy)
  5. WebSocket/Socket.io (WSSiP)

3. Socket.io简介

Socket.io是一个流行的JavaScript WebSockets库:

  • GitHub上有超过41.4k star
  • 在NPM的WebSocket类别中排名第二和第三
  • 被OWASP Juice-Shop等项目使用

4. WebSocket降级技术

方法一:利用Socket.io的HTTP回退机制

  1. 原理:Socket.io默认支持"polling"和"websocket"两种传输方式
  2. 实现步骤
    • 在BurpSuite中设置匹配替换规则
    • 修改默认传输方式为仅"polling"
    • 使用正则表达式替换:
      原始字符串:this\.transports=.*?\.transports\|\|\["polling","websocket"]
      替换为:this.transports=["polling"]
      

方法二:中止WebSocket升级

  1. WebSocket握手过程

    • 客户端发送包含WebSocket特定header的升级请求
    • 服务器响应101 Switching Protocols状态码和WebSocket header
    • 通信转换为WebSocket协议
  2. 中断策略

    • 修改服务器响应为非101状态码
    • 移除或修改Upgrade header
    • 移除或修改Connection header
    • 移除或修改Sec-WebSocket-Accept header
    • 添加未请求的Sec-WebSocket-Extensions header

5. 将Burp Repeater作为Socket.io客户端

技术挑战

  1. 会话管理

    • 每个请求需要有效的会话ID(sid)
    • 无效请求会导致服务器终止会话
  2. 消息格式

    • 请求主体包含消息长度前缀(如"5:hello")
    • 长度计算错误会导致服务器拒绝消息

解决方案:使用Burp宏和会话处理规则

  1. 创建宏

    • 用于自动建立新会话并获取有效sid
    • 配置从服务器响应中提取sid的正则表达式:"sid"
  2. 配置会话处理规则

    • 设置"Check session is valid"规则动作
    • 当服务器拒绝消息时自动触发宏
    • 应用于Repeater等工具

6. 实际渗透测试应用

  1. 拦截和修改WebSocket消息

    • 在BurpSuite中启用WebSocket拦截
    • 通过Proxy → WebSockets历史记录查看消息
    • 在拦截窗口中编辑消息
  2. 测试技巧

    • 观察应用程序执行有趣操作时的较大负载消息
    • 利用HTTP历史记录中的WebSocket类消息进行分析
    • 强制使用HTTP传输以利用BurpSuite的完整功能集

7. 防御建议

  1. 服务器端

    • 禁用不必要的传输方式
    • 实施严格的会话验证
    • 验证消息格式和长度
    • 限制重试次数
  2. 客户端

    • 验证服务器响应符合WebSocket协议
    • 实现适当的错误处理
    • 考虑使用WebSocket安全扩展

通过掌握这些技术,安全测试人员可以有效地评估WebSocket和Socket.io实现的安全性,发现潜在漏洞。

WebSocket与Socket.io渗透测试技术详解 1. WebSocket技术概述 WebSocket是一种允许浏览器和服务器建立单个TCP连接进行全双工异步通信的技术,具有以下特点: 允许实时更新,无需浏览器发送数百个新的HTTP轮询请求 基于单个TCP连接的有状态协议 客户端和服务器可随时发送消息,无需等待对方响应 相比HTTP,WebSocket工具支持较少,测试更复杂 2. WebSocket测试工具 常用WebSocket测试工具: BurpSuite :支持WebSocket拦截和修改,但缺少Repeater、Scanner和Intruder功能 Zed Attack Proxy (ZAP) Pappy Proxy Man-in-the-Middle Proxy (mitmproxy) WebSocket/Socket.io (WSSiP) 3. Socket.io简介 Socket.io是一个流行的JavaScript WebSockets库: GitHub上有超过41.4k star 在NPM的WebSocket类别中排名第二和第三 被OWASP Juice-Shop等项目使用 4. WebSocket降级技术 方法一:利用Socket.io的HTTP回退机制 原理 :Socket.io默认支持"polling"和"websocket"两种传输方式 实现步骤 : 在BurpSuite中设置匹配替换规则 修改默认传输方式为仅"polling" 使用正则表达式替换: 方法二:中止WebSocket升级 WebSocket握手过程 : 客户端发送包含WebSocket特定header的升级请求 服务器响应101 Switching Protocols状态码和WebSocket header 通信转换为WebSocket协议 中断策略 : 修改服务器响应为非101状态码 移除或修改Upgrade header 移除或修改Connection header 移除或修改Sec-WebSocket-Accept header 添加未请求的Sec-WebSocket-Extensions header 5. 将Burp Repeater作为Socket.io客户端 技术挑战 会话管理 : 每个请求需要有效的会话ID(sid) 无效请求会导致服务器终止会话 消息格式 : 请求主体包含消息长度前缀(如"5:hello") 长度计算错误会导致服务器拒绝消息 解决方案:使用Burp宏和会话处理规则 创建宏 : 用于自动建立新会话并获取有效sid 配置从服务器响应中提取sid的正则表达式: "sid" 配置会话处理规则 : 设置"Check session is valid"规则动作 当服务器拒绝消息时自动触发宏 应用于Repeater等工具 6. 实际渗透测试应用 拦截和修改WebSocket消息 : 在BurpSuite中启用WebSocket拦截 通过Proxy → WebSockets历史记录查看消息 在拦截窗口中编辑消息 测试技巧 : 观察应用程序执行有趣操作时的较大负载消息 利用HTTP历史记录中的WebSocket类消息进行分析 强制使用HTTP传输以利用BurpSuite的完整功能集 7. 防御建议 服务器端 : 禁用不必要的传输方式 实施严格的会话验证 验证消息格式和长度 限制重试次数 客户端 : 验证服务器响应符合WebSocket协议 实现适当的错误处理 考虑使用WebSocket安全扩展 通过掌握这些技术,安全测试人员可以有效地评估WebSocket和Socket.io实现的安全性,发现潜在漏洞。