# 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' में) और कंसोल में त्रुटियों की तलाश करना जैसे:
.png>)
यदि यह संवेदनशील है, तो आप केवल मान भेजकर **एक अलर्ट ट्रिगर** कर सकते हैं: **`?callback=alert(1)`**। हालाँकि, यह बहुत सामान्य है कि ये एंडपॉइंट्स **सामग्री को मान्य करेंगे** ताकि केवल अक्षरों, संख्याओं, बिंदुओं और अंडरस्कोर की अनुमति दी जा सके (**`[\w\._]`**).
हालांकि, इस सीमा के बावजूद कुछ क्रियाएँ करना अभी भी संभव है। इसका कारण यह है कि आप उन मान्य वर्णों का उपयोग करके **DOM में किसी भी तत्व तक पहुँच सकते हैं**:
.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 बायपास एन्कोडिंग इमेज
.jpg>)
## कच्चे HTML के अंदर इंजेक्ट करना
जब आपका इनपुट **HTML पृष्ठ के अंदर** परिलक्षित होता है या आप इस संदर्भ में HTML कोड को बचा सकते हैं और इंजेक्ट कर सकते हैं, तो **पहली** चीज़ जो आपको करनी चाहिए वह यह है कि आप जांचें कि क्या आप `<` का दुरुपयोग करके नए टैग बना सकते हैं: बस उस **चर** को **परिलक्षित** करने की कोशिश करें और जांचें कि क्या इसे **HTML एन्कोडेड** किया गया है या **हटाया** गया है या यदि यह **बिना बदलाव के परिलक्षित** हो रहा है। **केवल अंतिम मामले में आप इस मामले का शोषण कर पाएंगे**।\
इन मामलों के लिए भी **याद रखें** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**।**\
NAN;_**नोट: एक HTML टिप्पणी को बंद किया जा सकता है\*\*\*\*\*\*** \***\*`-->`\*\*** \***\*या \*\*\*\*\*\***`--!>`\*\**_
इस मामले में और यदि कोई ब्लैक/व्हाइटलिस्टिंग का उपयोग नहीं किया गया है, तो आप ऐसे पे लोड का उपयोग कर सकते हैं:
```html