看我如何分析并渗透WebSocket和Socket.io
字数 1537 2025-08-18 11:37:45
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"
- 使用正则表达式替换:
原始字符串:this\.transports=.*?\.transports\|\|\["polling","websocket"] 替换为:this.transports=["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实现的安全性,发现潜在漏洞。