# WebSocket Attacks
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* 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.
{% endhint %}
## What are WebSockets
WebSocket μ°κ²°μ μ΄κΈ° **HTTP** νΈλμ
°μ΄ν¬λ₯Ό ν΅ν΄ μ€μ λλ©°, **μ₯κΈ° μ§μμ **μΌλ‘ μ€κ³λμ΄ μΈμ λ μ§ μλ°©ν₯ λ©μμ§μ κ°λ₯νκ² νμ¬ κ±°λ μμ€ν
μ΄ νμνμ§ μμ΅λλ€. μ΄λ WebSocketμ΄ μ€μκ° κΈμ΅ λ°μ΄ν° μ€νΈλ¦Όκ³Ό κ°μ **μ μ§μ° λλ μλ² μμ ν΅μ **μ΄ νμν μ ν리μΌμ΄μ
μ νΉν μ 리νκ² λ§λλλ€.
### Establishment of WebSocket Connections
WebSocket μ°κ²°μ μ€μ νλ λ°©λ²μ λν μμΈν μ€λͺ
μ [**μ¬κΈ°**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc)μμ νμΈν μ μμ΅λλ€. μμ½νμλ©΄, WebSocket μ°κ²°μ μΌλ°μ μΌλ‘ ν΄λΌμ΄μΈνΈ μΈ‘ JavaScriptλ₯Ό ν΅ν΄ μμλ©λλ€.
```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=
```
μ°κ²°μ΄ μ€μ λλ©΄ μλ°©ν₯μΌλ‘ λ©μμ§ κ΅νμ μν΄ μ΄λ € μμ΅λλ€.
**WebSocket νΈλμ
°μ΄ν¬μ μ£Όμ ν¬μΈνΈ:**
- `Connection` λ° `Upgrade` ν€λλ WebSocket νΈλμ
°μ΄ν¬μ μμμ μ립λλ€.
- `Sec-WebSocket-Version` ν€λλ μνλ WebSocket νλ‘ν μ½ λ²μ μ λνλ΄λ©°, μΌλ°μ μΌλ‘ `13`μ
λλ€.
- Base64λ‘ μΈμ½λ©λ 무μμ κ°μ΄ `Sec-WebSocket-Key` ν€λμ μ μ‘λμ΄ κ° νΈλμ
°μ΄ν¬κ° κ³ μ νλλ‘ λ³΄μ₯νλ©°, μ΄λ μΊμ± νλ‘μμ κ΄λ ¨λ λ¬Έμ λ₯Ό λ°©μ§νλ λ° λμμ΄ λ©λλ€. μ΄ κ°μ μΈμ¦μ μν κ²μ΄ μλλΌ μλ΅μ΄ μλͺ» ꡬμ±λ μλ²λ μΊμμμ μμ±λμ§ μμμμ νμΈνκΈ° μν κ²μ
λλ€.
- μλ²μ μλ΅μ μλ `Sec-WebSocket-Accept` ν€λλ `Sec-WebSocket-Key`μ ν΄μλ‘, WebSocket μ°κ²°μ μ΄λ €λ μλ²μ μλλ₯Ό κ²μ¦ν©λλ€.
μ΄λ¬ν κΈ°λ₯μ νΈλμ
°μ΄ν¬ νλ‘μΈμ€κ° μμ νκ³ μ λ’°ν μ μλλ‘ λ³΄μ₯νλ©°, ν¨μ¨μ μΈ μ€μκ° ν΅μ μ μν κΈΈμ μ΄μ΄μ€λλ€.
### Linux μ½μ
`websocat`μ μ¬μ©νμ¬ websocketκ³Όμ μμ μ°κ²°μ μ€μ ν μ μμ΅λλ€.
```bash
websocat --insecure wss://10.10.10.10:8000 -v
```
μΉμμΊ£ μλ²λ₯Ό μμ±νλ €λ©΄:
```bash
websocat -s 0.0.0.0:8000 #Listen in port 8000
```
### MitM websocket connections
ν΄λΌμ΄μΈνΈκ° νμ¬ λ‘컬 λ€νΈμν¬μμ **HTTP websocket**μ μ°κ²°λμ΄ μλ κ²μ λ°κ²¬νλ©΄, ν΄λΌμ΄μΈνΈμ μλ² κ°μ MitM 곡격μ μννκΈ° μν΄ [ARP Spoofing Attack](../generic-methodologies-and-resources/pentesting-network/#arp-spoofing)μ μλν μ μμ΅λλ€.\
ν΄λΌμ΄μΈνΈκ° μ°κ²°μ μλν λ, λ€μμ μ¬μ©ν μ μμ΅λλ€:
```bash
websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v
```
### Websockets enumeration
You can use the **tool** [**https://github.com/PalindromeLabs/STEWS**](https://github.com/PalindromeLabs/STEWS) **to discover, fingerprint and search for known** **vulnerabilities** in websockets automatically.
### Websocket Debug tools
* **Burp Suite**λ μΌλ° HTTP ν΅μ κ³Ό λ§€μ° μ μ¬ν λ°©μμΌλ‘ MitM websockets ν΅μ μ μ§μν©λλ€.
* The [**socketsleuth**](https://github.com/snyk/socketsleuth) **Burp Suite extension**λ **history**λ₯Ό κ°μ Έμ€κ³ , **interception rules**λ₯Ό μ€μ νλ©°, **match and replace** κ·μΉμ μ¬μ©νκ³ , **Intruder** λ° **AutoRepeater**λ₯Ό μ¬μ©νμ¬ Burpμμ Websocket ν΅μ μ λ μ κ΄λ¦¬ν μ μκ² ν΄μ€λλ€.
* [**WSSiP**](https://github.com/nccgroup/wssip)**:** "**WebSocket/Socket.io Proxy**"μ μ½μλ‘, Node.jsλ‘ μμ±λ μ΄ λꡬλ ν΄λΌμ΄μΈνΈμ μλ² κ°μ λͺ¨λ WebSocket λ° Socket.IO ν΅μ μ **capture, intercept, send custom** λ©μμ§λ₯Ό 보λ΄κ³ λ³Ό μ μλ μ¬μ©μ μΈν°νμ΄μ€λ₯Ό μ 곡ν©λλ€.
* [**wsrepl**](https://github.com/doyensec/wsrepl)λ **penetration testing**μ μν΄ νΉλ³ν μ€κ³λ **interactive websocket REPL**μ
λλ€. μ΄λ **incoming websocket messages**λ₯Ό κ΄μ°°νκ³ μλ‘μ΄ λ©μμ§λ₯Ό 보λ΄λ μΈν°νμ΄μ€λ₯Ό μ 곡νλ©°, μ΄ ν΅μ μ **automating**νκΈ° μν μ¬μ©νκΈ° μ¬μ΄ νλ μμν¬λ₯Ό μ 곡ν©λλ€.
* [**https://websocketking.com/**](https://websocketking.com/)λ **websockets**λ₯Ό μ¬μ©νμ¬ λ€λ₯Έ μΉκ³Ό ν΅μ νλ **web**μ
λλ€.
* [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket)λ λ€λ₯Έ μ νμ ν΅μ /νλ‘ν μ½ μ€μμ **websockets**λ₯Ό μ¬μ©νμ¬ λ€λ₯Έ μΉκ³Ό ν΅μ νλ **web**μ μ 곡ν©λλ€.
## Websocket Lab
In [**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) you have a code to launch a web using websockets and in [**this post**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) you can find an explanation.
## 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 νΈλμ
°μ΄ν¬κ° **CSRF tokens** λλ μ μ¬ν 보μ μ‘°μΉ μμ΄ μ€μ§ **HTTP cookies**λ₯Ό ν΅ν΄ μΈμ¦λ λ λ°μν©λλ€.
곡격μλ **μ·¨μ½ν μ ν리μΌμ΄μ
**μ λν κ΅μ°¨ μ¬μ΄νΈ WebSocket μ°κ²°μ μμνλ **μ
μ± μΉ νμ΄μ§**λ₯Ό νΈμ€ν
νμ¬ μ΄λ₯Ό μ
μ©ν μ μμ΅λλ€. κ²°κ³Όμ μΌλ‘ μ΄ μ°κ²°μ μ ν리μΌμ΄μ
κ³Όμ νΌν΄μμ μΈμ
μ μΌλΆλ‘ κ°μ£Όλλ©°, μΈμ
μ²λ¦¬ λ©μ»€λμ¦μμ CSRF 보νΈκ° λΆμ‘±ν μ μ μ
μ©ν©λλ€.
### Simple Attack
**websocket** μ°κ²°μ **establishing**ν λ **cookie**κ° **μλ²**λ‘ **μ μ‘**λλ€λ μ μ μ μνμμμ€. **μλ²**λ μ΄λ₯Ό μ¬μ©νμ¬ **μ μ‘λ cookie**λ₯Ό κΈ°λ°μΌλ‘ κ° **νΉμ ** **μ¬μ©μ**μ κ·Έμ **websocket** **μΈμ
**μ **μ°κ΄**μν¬ μ μμ΅λλ€.
κ·Έλ° λ€μ, μλ₯Ό λ€μ΄ **websocket** **μλ²**κ° μ¬μ©μμ λν **history**λ₯Ό **μ μ‘**νλ κ²½μ°, "**READY"**λΌλ λ©μμ§κ° μ μ‘λλ©΄, **simple XSS**λ₯Ό ν΅ν΄ μ°κ²°μ μ€μ νλ©΄ (μ΄λ **cookie**λ νΌν΄μ μ¬μ©μλ₯Ό μΈμ¦νκΈ° μν΄ **μλμΌλ‘ μ μ‘**λ©λλ€) "**READY**"λ₯Ό μ μ‘νμ¬ **λν**μ **history**λ₯Ό **κ°μ Έμ¬** μ μμ΅λλ€.
```markup
```
### 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/)μμ 곡격μλ **μΉ μμΌ ν΅μ μ΄ λ°μνλ λλ©μΈμ μλΈλλ©μΈμμ μμμ Javascriptλ₯Ό μ€ν**νλ λ° μ±κ³΅νμ΅λλ€. **μλΈλλ©μΈ**μ΄μκΈ° λλ¬Έμ **μΏ ν€**κ° **μ μ‘**λμκ³ , **Websocketμ΄ Originμ μ λλ‘ νμΈνμ§ μμκΈ° λλ¬Έμ**, μ΄λ₯Ό ν΅ν΄ ν΅μ νκ³ **ν ν°μ νμΉλ** κ²μ΄ κ°λ₯νμ΅λλ€.
### Stealing data from user
λΉμ μ΄ κ°μ₯νκ³ μΆμ μΉ μ ν리μΌμ΄μ
μ 볡μ¬νμΈμ (μ: .html νμΌ) κ·Έλ¦¬κ³ μΉμμΌ ν΅μ μ΄ λ°μνλ μ€ν¬λ¦½νΈ μμ μ΄ μ½λλ₯Ό μΆκ°νμΈμ:
```javascript
//This is the script tag to load the websocket hooker
//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