diff --git a/src/pentesting-web/xss-cross-site-scripting/dom-invader.md b/src/pentesting-web/xss-cross-site-scripting/dom-invader.md index 1fd1101f5..1f0309c9d 100644 --- a/src/pentesting-web/xss-cross-site-scripting/dom-invader.md +++ b/src/pentesting-web/xss-cross-site-scripting/dom-invader.md @@ -4,78 +4,125 @@ ## DOM Invader -DOM Invader एक ब्राउज़र टूल है जो Burp के अंतर्निहित ब्राउज़र में स्थापित है। यह विभिन्न स्रोतों और सिंक का उपयोग करके **DOM XSS कमजोरियों** का **पता लगाने** में मदद करता है, जिसमें वेब संदेश और प्रोटोटाइप प्रदूषण शामिल हैं। यह टूल एक एक्सटेंशन के रूप में पूर्व-स्थापित है। +DOM Invader एक ब्राउज़र टूल है जो **Burp Suite के अंतर्निहित Chromium ब्राउज़र** में स्थापित है। यह **DOM XSS और अन्य क्लाइंट-साइड कमजोरियों** (प्रोटोटाइप प्रदूषण, DOM क्लॉबरिंग, आदि) का **स्वचालित रूप से JavaScript स्रोतों और सिंक्स** को **संकेतित** करके पता लगाने में मदद करता है। यह एक्सटेंशन Burp के साथ आता है और केवल इसे सक्षम करने की आवश्यकता होती है। -DOM Invader ब्राउज़र के DevTools पैनल में एक टैब को एकीकृत करता है जो निम्नलिखित सक्षम करता है: +DOM Invader ब्राउज़र के DevTools पैनल में एक टैब जोड़ता है जो आपको: -1. **DOM XSS परीक्षण के लिए एक वेबपेज पर नियंत्रित सिंक की पहचान**, संदर्भ और स्वच्छता विवरण प्रदान करना। -2. **`postMessage()` विधि के माध्यम से भेजे गए वेब संदेशों का लॉगिंग, संपादन और पुनः भेजना** DOM XSS परीक्षण के लिए। DOM Invader विशेष रूप से तैयार किए गए वेब संदेशों का उपयोग करके कमजोरियों का स्वचालित रूप से पता लगा सकता है। -3. **क्लाइंट-साइड प्रोटोटाइप प्रदूषण** स्रोतों का पता लगाना और जोखिम भरे सिंक पर भेजे गए नियंत्रित गैजेट्स का स्कैन करना। -4. **DOM क्लॉबरिंग कमजोरियों** की पहचान करना। +1. **वास्तविक समय में नियंत्रित सिंक्स** की पहचान करने की अनुमति देता है, जिसमें संदर्भ (एट्रिब्यूट, HTML, URL, JS) और लागू की गई सफाई शामिल है। +2. **`postMessage()` वेब-मैसेजेस को लॉग, संपादित और फिर से भेजें**, या एक्सटेंशन को उन्हें स्वचालित रूप से परिवर्तित करने दें। +3. **क्लाइंट-साइड प्रोटोटाइप-प्रदूषण स्रोतों का पता लगाएं और गैजेट→सिंक श्रृंखलाओं के लिए स्कैन करें**, जो ऑन-द-फ्लाई PoCs उत्पन्न करते हैं। +4. **DOM क्लॉबरिंग वेक्टर खोजें** (जैसे `id` / `name` टकराव जो वैश्विक चर को ओवरराइट करते हैं)। +5. **व्यवहार को ठीक करें** एक समृद्ध सेटिंग्स UI के माध्यम से (कस्टम कैनरी, ऑटो-इंजेक्शन, रीडायरेक्ट ब्लॉकिंग, स्रोत/सिंक सूचियाँ, आदि)। -### इसे सक्षम करें +--- -Burp के अंतर्निहित ब्राउज़र में **Burp एक्सटेंशन** पर जाएं और इसे सक्षम करें: +### 1. इसे सक्षम करें
-अब पृष्ठ को रिफ्रेश करें और **Dev Tools** में आपको **DOM Invader टैब** मिलेगा: +1. **Proxy ➜ Intercept ➜ Open Browser** (Burp का एम्बेडेड ब्राउज़र) खोलें। +2. **Burp Suite** लोगो पर क्लिक करें (ऊपर दाएं)। यदि यह छिपा हुआ है, तो पहले जिग्सॉ-पीस पर क्लिक करें। +3. **DOM Invader** टैब में, **Enable DOM Invader** को ON करें और **Reload** दबाएं। +4. DevTools खोलें ( `F12` / Right-click ➜ Inspect ) और इसे डॉक करें। एक नया **DOM Invader** पैनल प्रकट होता है। -
+> Burp प्रत्येक प्रोफ़ाइल के लिए स्थिति को याद रखता है। यदि आवश्यक हो तो *Settings ➜ Tools ➜ Burp’s browser ➜ Store settings...* के तहत इसे अक्षम करें। -### एक कैनरी इंजेक्ट करें +### 2. एक कैनरी इंजेक्ट करें -पिछली छवि में आप देख सकते हैं कि **एक यादृच्छिक अक्षरों का समूह, जो कैनरी है**। आपको अब इसे वेब के विभिन्न भागों (पैरामीटर, फॉर्म, यूआरएल...) में **इंजेक्ट** करना शुरू करना चाहिए और हर बार इसे खोजें। DOM Invader यह जांचेगा कि **कैनरी किसी दिलचस्प सिंक में समाप्त हुआ है** जिसे शोषित किया जा सकता है। +एक **कैनरी** एक यादृच्छिक मार्कर स्ट्रिंग है (जैसे `xh9XKYlV`) जिसे DOM Invader ट्रैक करता है। आप: -इसके अलावा, विकल्प **Inject URL params** और Inject forms स्वचालित रूप से एक **नया टैब** खोलेगा **कैनरी** को हर **URL** पैरामीटर और **फॉर्म** में इंजेक्ट करते हुए जो इसे मिलते हैं। +* इसे **कॉपी** करें और मैन्युअल रूप से इसे पैरामीटर, फॉर्म, वेब-सॉकेट फ्रेम, वेब-मैसेजेस, आदि में इंजेक्ट करें। +* **Inject URL params / Inject forms** बटन का उपयोग करें ताकि एक नया टैब खुले जहाँ कैनरी हर क्वेरी की कुंजी/मान या फॉर्म फ़ील्ड में स्वचालित रूप से जोड़ा जाए। +* एक **खाली कैनरी** के लिए खोजें ताकि सभी सिंक्स को उनके शोषणीयता के बावजूद प्रकट किया जा सके (जांच के लिए महान)। -### एक खाली कैनरी इंजेक्ट करें +#### कस्टम कैनरी (2025+) -यदि आप केवल संभावित सिंक खोजने के लिए चाहते हैं जो पृष्ठ में हो सकते हैं, भले ही वे शोषण योग्य न हों, तो आप **खाली कैनरी के लिए खोज** कर सकते हैं। +Burp 2024.12 ने **कैनरी सेटिंग्स** (Burp-logo ➜ DOM Invader ➜ Canary) पेश की। आप: -### पोस्ट संदेश +* **यादृच्छिक** या **कस्टम स्ट्रिंग** सेट कर सकते हैं (जो मल्टी-टैब परीक्षण के लिए सहायक है या जब डिफ़ॉल्ट मान स्वाभाविक रूप से पृष्ठ पर दिखाई देता है)। +* **कॉपी** करें मान को क्लिपबोर्ड पर। +* परिवर्तनों के लिए **Reload** की आवश्यकता होती है। -DOM Invader वेब संदेशों का उपयोग करके DOM XSS के लिए परीक्षण की अनुमति देता है जिसमें निम्नलिखित विशेषताएँ हैं: +--- -1. **`postMessage()` के माध्यम से भेजे गए वेब संदेशों का लॉगिंग**, Burp Proxy के HTTP अनुरोध/उत्तर इतिहास लॉगिंग के समान। -2. **वेब संदेशों में संशोधन** और **पुनः जारी करना** DOM XSS के लिए मैन्युअल परीक्षण करने के लिए, Burp Repeater के कार्य के समान। -3. **DOM XSS के लिए वेब संदेशों का स्वचालित परिवर्तन** और भेजना। +### 3. वेब-मैसेजेस (`postMessage`) -#### संदेश विवरण +**Messages** उप-टैब हर `window.postMessage()` कॉल को रिकॉर्ड करता है, `origin`, `source`, और `data` उपयोग को दिखाता है। -प्रत्येक संदेश के बारे में विस्तृत जानकारी देखने के लिए उस पर क्लिक करें, जिसमें यह शामिल है कि क्या क्लाइंट-साइड JavaScript संदेश के `origin`, `data`, या `source` गुणों तक पहुँचता है। +• **संशोधित करें और फिर से भेजें**: एक संदेश पर डबल-क्लिक करें, `data` को संपादित करें, और **Send** दबाएं (Burp Repeater की तरह)। -- **`origin`** : यदि संदेश की **उत्पत्ति जानकारी की जांच नहीं की गई है**, तो आप किसी भी बाहरी डोमेन से इवेंट हैंडलर को क्रॉस-उत्पत्ति संदेश भेजने में सक्षम हो सकते हैं। लेकिन यदि इसकी जांच की गई है, तो भी यह असुरक्षित हो सकता है। -- **`data`**: यह वह स्थान है जहाँ पेलोड भेजा जाता है। यदि इस डेटा का उपयोग नहीं किया जाता है, तो सिंक बेकार है। -- **`source`**: यह मूल्यांकन करता है कि क्या स्रोत गुण, जो आमतौर पर एक iframe को संदर्भित करता है, उत्पत्ति के बजाय मान्य है। भले ही इसकी जांच की गई हो, यह सुनिश्चित नहीं करता कि मान्यता को बायपास नहीं किया जा सकता। +• **ऑटो-फज़**: सेटिंग्स में **Postmessage interception ➜ Auto-mutate** सक्षम करें ताकि DOM Invader कैनरी-आधारित पेलोड उत्पन्न कर सके और उन्हें हैंडलर को फिर से भेज सके। -#### एक संदेश का उत्तर दें +फील्ड का अर्थ पुनर्कथन: -1. **Messages** दृश्य से, किसी भी संदेश पर क्लिक करें ताकि संदेश विवरण संवाद खुल सके। -2. आवश्यकतानुसार **Data** फ़ील्ड को संपादित करें। -3. **Send** पर क्लिक करें। +* **origin** – क्या हैंडलर `event.origin` को मान्य करता है। +* **data** – पेलोड स्थान। यदि अप्रयुक्त है, तो सिंक अप्रासंगिक है। +* **source** – iframe / विंडो संदर्भ मान्यता; अक्सर सख्त-उत्पत्ति जांच की तुलना में कमजोर होता है। -### प्रोटोटाइप प्रदूषण +--- -DOM Invader **प्रोटोटाइप प्रदूषण कमजोरियों** के लिए भी खोज सकता है। पहले, आपको इसे सक्षम करना होगा: +### 4. प्रोटोटाइप प्रदूषण -
+**Settings ➜ Attack types ➜ Prototype pollution** के तहत सक्षम करें। -फिर, यह **स्रोतों की खोज करेगा** जो आपको **`Object.prototype`** में मनमाने गुण जोड़ने की अनुमति देते हैं। +कार्यप्रवाह: + +1. **Browse** – DOM Invader प्रदूषण **sources** (`__proto__`, `constructor`, `prototype`) को URL/query/hash या JSON वेब-मैसेजेस में चिह्नित करता है। +2. **Test** – *Test* पर क्लिक करें ताकि एक PoC टैब खुले जहाँ `Object.prototype.testproperty` होना चाहिए: -यदि कुछ पाया जाता है, तो **Test** बटन दिखाई देगा ताकि **पाए गए स्रोत का परीक्षण** किया जा सके। उस पर क्लिक करें, एक नया टैब दिखाई देगा, कंसोल में एक ऑब्जेक्ट बनाएं और जांचें कि क्या `testproperty` मौजूद है: ```javascript -let b = {} -b.testproperty +let obj = {}; +console.log(obj.testproperty); // ➜ 'DOM_INVADER_PP_POC' ``` -एक बार जब आप एक स्रोत ढूंढ लेते हैं, तो आप **गैजेट के लिए स्कैन** कर सकते हैं: +3. **गैजेट्स के लिए स्कैन करें** – DOM Invader प्रॉपर्टी नामों को ब्रूटफोर्स करता है और ट्रैक करता है कि क्या कोई खतरनाक सिंक्स में समाप्त होता है (जैसे `innerHTML`)। +4. **शोषण** – जब एक गैजेट-सिंक श्रृंखला पाई जाती है, तो एक *Exploit* बटन प्रकट होता है जो स्रोत + गैजेट + सिंक को अलर्ट ट्रिगर करने के लिए जोड़ता है। -1. जब **गैजेट के लिए स्कैन** बटन, जो किसी पहचाने गए प्रोटोटाइप प्रदूषण स्रोत के बगल में **DOM** दृश्य में पाया जा सकता है, पर क्लिक किया जाता है, तो DOM Invader द्वारा एक नया टैब खोला जाता है। फिर उपयुक्त गैजेट्स के लिए स्कैन शुरू होता है। -2. इस बीच, उसी टैब में, DevTools पैनल में **DOM Invader** टैब खोला जाना चाहिए। स्कैन पूरा होने के बाद, पहचाने गए गैजेट्स के माध्यम से पहुंच योग्य किसी भी सिंक को **DOM** दृश्य में प्रदर्शित किया जाता है। उदाहरण के लिए, एक गैजेट प्रॉपर्टी जिसका नाम `html` है, `innerHTML` सिंक को पास किया जा रहा है, नीचे दिए गए उदाहरण में दिखाया गया है। +उन्नत सेटिंग्स (गियर आइकन): -## DOM क्लॉबरिंग +* **CSP / X-Frame-Options को हटा दें** ताकि गैजेट स्कैनिंग के दौरान iframes कार्यशील रहें। +* **अलग-अलग फ्रेम में स्कैन तकनीकों** को सक्षम करें ताकि `__proto__` और `constructor` के बीच हस्तक्षेप से बचा जा सके। +* **तकनीकों को** व्यक्तिगत रूप से अक्षम करें जो नाजुक ऐप्स के लिए हैं। -पिछली छवि में यह देखा जा सकता है कि DOM क्लॉबरिंग स्कैन को चालू किया जा सकता है। एक बार ऐसा करने पर, **DOM Invader DOM क्लॉबरिंग कमजोरियों** की खोज शुरू करेगा। +--- + +### 5. DOM क्लॉबरिंग + +**Attack types ➜ DOM clobbering** को टॉगल करें। DOM Invader उन गतिशील रूप से बनाए गए तत्वों की निगरानी करता है जिनके `id`/`name` एट्रिब्यूट वैश्विक चर या फॉर्म ऑब्जेक्ट्स के साथ टकराते हैं (`` → `window.location` को क्लॉबर करता है)। जब भी उपयोगकर्ता-नियंत्रित मार्कअप चर प्रतिस्थापन की ओर ले जाता है, एक प्रविष्टि उत्पन्न होती है। + +--- + +## 6. सेटिंग्स अवलोकन (2025) + +DOM Invader अब **Main / Attack Types / Misc / Canary** श्रेणियों में विभाजित है। + +1. **Main** +* **Enable DOM Invader** – वैश्विक स्विच। +* **Postmessage interception** – संदेश लॉगिंग को चालू/बंद करें; ऑटो-म्यूटेशन के लिए उप-टॉगल। +* **Custom Sources/Sinks** – *गियर आइकन* ➜ विशिष्ट सिंक्स (जैसे `eval`, `setAttribute`) को सक्षम/अक्षम करें जो ऐप को तोड़ सकते हैं। + +2. **Attack Types** +* **Prototype pollution** (प्रत्येक तकनीक सेटिंग्स के साथ)। +* **DOM clobbering**। + +3. **Misc** +* **Redirect prevention** – क्लाइंट-साइड रीडायरेक्ट को ब्लॉक करें ताकि सिंक सूची खो न जाए। +* **Redirect से पहले ब्रेकपॉइंट** – कॉल-स्टैक निरीक्षण के लिए रीडायरेक्ट से ठीक पहले JS को रोकें। +* **सभी स्रोतों में कैनरी इंजेक्ट करें** – हर जगह कैनरी को स्वचालित रूप से इंजेक्ट करें; कॉन्फ़िगर करने योग्य स्रोत/पैरामीटर अनुमति-सूची। + +4. **Canary** +* देखें / यादृच्छिक करें / कस्टम कैनरी सेट करें; क्लिपबोर्ड पर कॉपी करें। परिवर्तनों के लिए ब्राउज़र रीलोड की आवश्यकता होती है। + +--- + +### 7. टिप्स और अच्छे अभ्यास + +* **विशिष्ट कैनरी का उपयोग करें** – सामान्य स्ट्रिंग्स जैसे `test` से बचें, अन्यथा झूठे सकारात्मक होते हैं। +* **भारी सिंक्स** (`eval`, `innerHTML`) को अस्थायी रूप से अक्षम करें यदि वे नेविगेशन के दौरान पृष्ठ कार्यक्षमता को तोड़ते हैं। +* **Burp Repeater & Proxy के साथ संयोजन करें** – उस ब्राउज़र अनुरोध/प्रतिक्रिया को दोहराएं जिसने कमजोर स्थिति उत्पन्न की और अंतिम शोषण URLs तैयार करें। +* **फ्रेम स्कोप को याद रखें** – स्रोत/सिंक ब्राउज़िंग संदर्भ के अनुसार प्रदर्शित होते हैं; iframes के अंदर कमजोरियों को मैन्युअल ध्यान देने की आवश्यकता हो सकती है। +* **साक्ष्य निर्यात करें** – DOM Invader पैनल पर राइट-क्लिक करें ➜ *Save screenshot* रिपोर्ट में शामिल करने के लिए। + +--- ## संदर्भ @@ -85,5 +132,7 @@ b.testproperty - [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/web-messages](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/web-messages) - [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/prototype-pollution](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/prototype-pollution) - [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-clobbering](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-clobbering) +- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/canary](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/canary) +- [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/misc](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/settings/misc) {{#include ../../banners/hacktricks-training.md}}