WebSocket Attacks
Last updated
Last updated
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
WebSocket 连接通过初始的 HTTP 握手建立,旨在实现 长时间 连接,允许随时进行双向消息传递,而无需事务系统。这使得 WebSockets 特别适合需要 低延迟或服务器发起通信 的应用程序,例如实时金融数据流。
有关建立 WebSocket 连接的详细说明可以访问 这里。总之,WebSocket 连接通常通过客户端 JavaScript 发起,如下所示:
wss
协议表示一个通过 TLS 安全的 WebSocket 连接,而 ws
表示一个 不安全 的连接。
在连接建立期间,浏览器和服务器之间通过 HTTP 进行握手。握手过程涉及浏览器发送请求和服务器响应,如下例所示:
浏览器发送握手请求:
服务器的握手响应:
一旦建立,连接将保持开放以便双向消息交换。
WebSocket 握手的关键点:
Connection
和 Upgrade
头部信号表示 WebSocket 握手的开始。
Sec-WebSocket-Version
头部指示所需的 WebSocket 协议版本,通常为 13
。
在 Sec-WebSocket-Key
头部中发送一个 Base64 编码的随机值,确保每个握手都是唯一的,这有助于防止缓存代理出现问题。这个值不是用于身份验证,而是确认响应不是由配置错误的服务器或缓存生成的。
服务器响应中的 Sec-WebSocket-Accept
头部是 Sec-WebSocket-Key
的哈希,验证服务器打开 WebSocket 连接的意图。
这些特性确保握手过程安全可靠,为高效的实时通信铺平道路。
您可以使用 websocat
与 websocket 建立原始连接。
或者创建一个 websocat 服务器:
如果你发现客户端从当前本地网络连接到一个 HTTP websocket,你可以尝试进行一个 ARP Spoofing Attack 来在客户端和服务器之间执行 MitM 攻击。 一旦客户端尝试连接,你可以使用:
您可以使用 工具 https://github.com/PalindromeLabs/STEWS 自动发现、指纹识别和搜索已知的 漏洞 在 websockets 中。
Burp Suite 以与常规 HTTP 通信非常相似的方式支持 MitM websockets 通信。
socketsleuth Burp Suite 扩展 将允许您通过获取 历史记录、设置 拦截规则、使用 匹配和替换 规则、使用 Intruder 和 AutoRepeater 更好地管理 Burp 中的 Websocket 通信。
WSSiP: 代表 "WebSocket/Socket.io Proxy",这个用 Node.js 编写的工具提供了一个用户界面来 捕获、拦截、发送自定义 消息并查看客户端和服务器之间的所有 WebSocket 和 Socket.IO 通信。
wsrepl 是一个 交互式 websocket REPL,专门为渗透测试设计。它提供了一个接口来观察 传入的 websocket 消息并发送新的消息,并提供一个易于使用的框架来 自动化 这种通信。
https://websocketking.com/ 是一个 用于与其他网站通信 的 web,使用 websockets。
https://hoppscotch.io/realtime/websocket 在其他类型的通信/协议中,它提供了一个 用于与其他网站通信 的 web,使用 websockets。
在 Burp-Suite-Extender-Montoya-Course 中,您有一个代码来启动一个使用 websockets 的 web,在 这篇文章 中您可以找到解释。
跨站点 WebSocket 劫持,也称为 跨源 WebSocket 劫持,被识别为影响 WebSocket 握手的 跨站请求伪造 (CSRF) 的特定案例。此漏洞发生在 WebSocket 握手仅通过 HTTP cookies 进行身份验证,而没有 CSRF tokens 或类似的安全措施。
攻击者可以通过托管一个 恶意网页 来利用这一点,该网页发起对易受攻击应用程序的跨站点 WebSocket 连接。因此,这个连接被视为受害者与应用程序的会话的一部分,利用会话处理机制中缺乏 CSRF 保护。
请注意,当 建立 一个 websocket 连接时,cookie 会被 发送 到服务器。服务器 可能会使用它来 关联 每个 特定 用户 与其 基于发送的 cookie 的 websocket 会话。
然后,如果 例如 websocket 服务器 发送回用户的对话历史,如果发送了一个消息 "READY",那么一个 简单的 XSS 建立连接(cookie 将 自动发送 以授权受害者用户) 发送 "READY" 将能够 检索 对话 的历史记录。
在这篇博客文章 https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/ 中,攻击者成功地 在发生 Websocket 通信的域的子域中执行任意 Javascript。因为这是一个 子域,cookie 被 发送,而且 Websocket 没有正确检查 Origin,因此可以与其通信并 窃取其中的令牌。
复制您想要模仿的 Web 应用程序(例如 .html 文件),并在发生 Websocket 通信的脚本中添加以下代码:
现在从 https://github.com/skepticfx/wshook 下载 wsHook.js
文件,并将其保存在网页文件夹内。
通过暴露网络应用程序并使用户连接到它,您将能够窃取通过 websocket 发送和接收的消息:
WebSockets中的竞争条件也是一个问题,查看此信息以了解更多。
由于Web Sockets是一种向服务器端和客户端发送数据的机制,因此根据服务器和客户端如何处理信息,Web Sockets可以被用来利用其他几种漏洞,如XSS、SQLi或任何其他常见的网络漏洞,使用来自websocket的用户输入。
此漏洞可能允许您绕过反向代理限制,使其相信已建立了websocket通信(即使这不是真的)。这可能允许攻击者访问隐藏的端点。有关更多信息,请查看以下页面:
学习和实践AWS黑客攻击:HackTricks培训AWS红队专家(ARTE) 学习和实践GCP黑客攻击:HackTricks培训GCP红队专家(GRTE)