hacktricks/pentesting-web/http-request-smuggling/request-smuggling-in-http-2-downgrades.md

99 lines
11 KiB
Markdown

# HTTP/2 डाउनग्रेड्स में रिक्वेस्ट स्मगलिंग
<details>
<summary><strong>AWS हैकिंग सीखें शून्य से नायक तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram group**](https://t.me/peass) में या **Twitter** 🐦 पर मुझे **फॉलो** करें [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **अपनी हैकिंग ट्रिक्स साझा करें, HackTricks** के [**github repos**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) में PRs सबमिट करके.
</details>
## मूल
इस समस्या का मुख्य कारण यह है कि **रिवर्स प्रॉक्सी** **HTTP/2** का उपयोग करके **क्लाइंट से बात करेगा** लेकिन फिर वह उस **संचार** को **HTTP/1.1** में **परिवर्तित** कर देगा।
![](<../../.gitbook/assets/image (636) (1).png>)
इस दृष्टिकोण की समस्या यह है कि **उपयोगकर्ता** **HTTP/2 संचार** में अनावश्यक **हेडर्स** को **इंजेक्ट** करने में सक्षम होगा जिन्हें शायद प्रॉक्सी द्वारा **जांचा नहीं जाएगा**। लेकिन फिर, जब वे **HTTP/1.1 संचार** में **अंधाधुंध इंजेक्ट किए जाते हैं**, **रिक्वेस्ट स्मगलिंग हमला किया जा सकता है**
## उदाहरण
### H2.CL Desync
HTTP/2 विनिर्देश बताता है कि **Content-Length हेडर की आवश्यकता नहीं है लेकिन इंगित किया जा सकता है**। इसलिए, **रिवर्स प्रॉक्सी** **उपयोगकर्ताओं द्वारा भेजी गई सभी सामग्री को अनुरोध के रूप में मानेगा**, लेकिन फिर, जब **HTTP/1.1 में डाउनग्रेड किया जाता है**, यह **हेडर** **अनुरोध में इंजेक्ट किया जाएगा** और इसलिए, **बैक-एंड अनुरोध को 2 अलग-अलग अनुरोधों के रूप में मानेगा** जैसा कि आप नीचे चित्र में देख सकते हैं:
![](<../../.gitbook/assets/image (639).png>)
### H2.TE Desync URL Token Hijack
HTTP/2 विनिर्देश यह भी इंगित करता है कि **किसी भी संदेश में कनेक्शन-विशिष्ट हेडर फील्ड्स होने चाहिए जिन्हें विकृत के रूप में माना जाना चाहिए... लेकिन यदि आप इस नियम का पालन नहीं करते हैं, तो आप संवेदनशील हैं**
इस तकनीक का AWS लोड बैलेंसर पर दुरुपयोग किया गया था, इसलिए सुनिश्चित करना कि उपयोगकर्ता एक Host हेडर को एक सर्वर की ओर इंगित करते हैं जिसे हमलावर नियंत्रित करता है, उन्हें उस सर्वर तक पहुंचाएगा।
![](<../../.gitbook/assets/image (631) (1).png>)
### H2.TE Desync Header Hijack
यह वही तकनीक है जैसा कि पहले, लेकिन जेम्स ने देखा कि ग्राहक उसे अपनी साख प्रेषित करने के लिए कह रहे थे, इसलिए उसने बस अपने सर्वर को लोगों की साख उसे भेजने के लिए CORS की अनुमति देने के लिए संशोधित किया:
![](<../../.gitbook/assets/image (662) (1) (1) (1) (1) (1).png>)
### H2.TE via Request Header Injection
**HTTP/2 हेडर्स में अनुमति नहीं दिए गए अक्षरों को डालने की अनुमति नहीं देगा**, लेकिन यदि सर्वर **इस नियम का सम्मान नहीं कर रहा है**, तो आप **मनमाने हेडर्स को इंजेक्ट कर सकते हैं** जब संचार को **HTTP/1.1 में डाउनग्रेड किया जाता है**
इस मामले में **हेडर Transfer-Encoding को इंजेक्ट किया गया था**
![](<../../.gitbook/assets/image (648) (1) (1) (1) (1) (1).png>)
### H2.TE via Header Name Injection
कुछ सर्वरों पर HTTP/2 आपको हेडर नाम में **कोलन डालने की अनुमति देता है, और एक** के साथ आप हेडर नाम के अंदर एक नया हेडर इस तरह इंजेक्ट कर सकते हैं:
![](<../../.gitbook/assets/image (632) (1).png>)
ध्यान दें कि यदि आप सिर्फ नई लाइन अक्षर भेजते हैं एक हेडर के बिना सामग्री के, अनुरोध को **अमान्य** के रूप में माना जाएगा:
![](<../../.gitbook/assets/image (647) (1) (1) (1).png>)
### H2.TE via Request Line Injection
इस मामले में इंजेक्शन अनुरोध लाइन के अंदर किया गया था:
![](<../../.gitbook/assets/image (640) (1).png>)
### URL Prefix Injection
HTTP/2 कनेक्शन की स्कीम के अंदर आप एक पूरा URL भेज सकते हैं जो पथ में इंगित किए गए URL को ओवरराइट कर देगा:
![](<../../.gitbook/assets/image (661) (1) (1).png>)
### Request Line Injection via spaces
![](<../../.gitbook/assets/image (641) (1).png>)
## Frontend->backend connection reuse
कभी-कभी आप पाएंगे कि HTTP Request Smuggling हमला करते समय **आप केवल अपने आप पर हमला कर सकते हैं**। यह इसलिए हो सकता है क्योंकि रिवर्स प्रॉक्सी ने प्रति IP बैक-एंड सर्वर के साथ **एक अलग कनेक्शन का उपयोग करने का निर्णय लिया है**
ध्यान दें कि **यहां तक कि** उस **प्रतिबंध** के साथ भी आप **अधिकृतता बायपास**, आंतरिक हेडर्स की लीकेज और **कैश डिसेप्शन और कैश पॉइज़निंग** हमले जैसे हमले कर सकते हैं।
आमतौर पर यह प्रतिबंध मौजूद नहीं होता है इसलिए आप **रिवर्स प्रॉक्सी और बैक एंड के बीच कनेक्शन में अनुरोध को स्मगल कर सकते हैं** जिसका उपयोग अन्य लोग कर रहे हैं, लेकिन यह भी **संभव** है कि **प्रॉक्सी** एक ही IP से कनेक्शन के साथ भी **कनेक्शन का पुन: उपयोग नहीं करता है** (इस प्रकार के हमले के लिए काफी कठोर प्रतिबंध)।
![](<../../.gitbook/assets/image (646) (1) (1).png>)
सबसे कठोर प्रतिबंध (कोई कनेक्शन पुन: उपयोग नहीं) में आप समय आधारित तकनीक के साथ भेद्यता का पता लगाएंगे, लेकिन फिर इसे परीक्षण करते समय आप पाएंगे कि यह एक "गलत सकारात्मक" है।
### Tunnelling Confirmation
यदि **एंडपॉइंट भेद्य है** लेकिन कनेक्शन **"टनल" के अंदर है** इसकी **पुष्टि करने** का एक तरीका 1 में **2 पूर्ण अनुरोधों को स्मगल करना** है।
**HTTP/1.1** की **समस्या** यह है कि यदि आप **2 HTTP प्रतिक्रियाएं प्राप्त करते हैं** तो आप **नहीं जानते** कि एंडपॉइंट **भेद्य था** या नहीं और **"स्मगल" किया गया अनुरोध सिर्फ एक सामान्य अनुरोध के रूप में माना गया था**।
हाल