Cache Poisoning via URL discrepancies
Reading time: 5 minutes
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
यह उस तकनीकों का सारांश है जो पोस्ट https://portswigger.net/research/gotta-cache-em-all में प्रस्तावित की गई हैं ताकि कैश प्रॉक्सी और वेब सर्वर के बीच के भिन्नताओं का दुरुपयोग करके कैश पॉइज़निंग हमले किए जा सकें।
note
इस हमले का लक्ष्य कैश सर्वर को यह सोचने के लिए मजबूर करना है कि एक स्थिर संसाधन लोड किया जा रहा है ताकि यह इसे कैश करे जबकि कैश सर्वर पथ का एक भाग कैश कुंजी के रूप में संग्रहीत करता है लेकिन वेब सर्वर एक अन्य पथ को हल करता है। वेब सर्वर वास्तविक पथ को हल करेगा जो एक गतिशील पृष्ठ को लोड करेगा (जो उपयोगकर्ता के बारे में संवेदनशील जानकारी, एक दुर्भावनापूर्ण पेलोड जैसे XSS या हमलावर की वेबसाइट से JS फ़ाइल लोड करने के लिए पुनर्निर्देशित कर सकता है)।
Delimiters
URL delimiters फ्रेमवर्क और सर्वर के अनुसार भिन्न होते हैं, जो यह प्रभावित करते हैं कि अनुरोध कैसे रूट किए जाते हैं और प्रतिक्रियाएँ कैसे संभाली जाती हैं। कुछ सामान्य मूल डेलिमिटर्स हैं:
- Semicolon: मैट्रिक्स वेरिएबल के लिए स्प्रिंग में उपयोग किया जाता है (जैसे
/hello;var=a/world;var1=b;var2=c
→/hello/world
)। - Dot: Ruby on Rails में प्रतिक्रिया प्रारूप निर्दिष्ट करता है (जैसे
/MyAccount.css
→/MyAccount
) - Null Byte: OpenLiteSpeed में पथों को संक्षिप्त करता है (जैसे
/MyAccount%00aaa
→/MyAccount
)। - Newline Byte: Nginx में URL घटकों को अलग करता है (जैसे
/users/MyAccount%0aaaa
→/account/MyAccount
)।
इस प्रक्रिया के बाद अन्य विशिष्ट डेलिमिटर्स पाए जा सकते हैं:
- Step 1: गैर-कैश योग्य अनुरोधों की पहचान करें और यह देखने के लिए उनका उपयोग करें कि संभावित डेलिमिटर्स वाले URLs को कैसे संभाला जाता है।
- Step 2: पथों में यादृच्छिक प्रत्यय जोड़ें और यह निर्धारित करने के लिए सर्वर की प्रतिक्रिया की तुलना करें कि क्या कोई वर्ण डेलिमिटर के रूप में कार्य करता है।
- Step 3: संभावित डेलिमिटर्स को यादृच्छिक प्रत्यय से पहले पेश करें ताकि देखें कि क्या प्रतिक्रिया बदलती है, जो डेलिमिटर के उपयोग को इंगित करती है।
Normalization & Encodings
- Purpose: कैश और मूल सर्वरों में URL पार्सर URLs को सामान्यीकृत करते हैं ताकि एंडपॉइंट मैपिंग और कैश कुंजी के लिए पथ निकाले जा सकें।
- Process: पथ डेलिमिटर्स की पहचान करता है, पथ को निकालता है और वर्णों को डिकोड करके और डॉट-सेगमेंट को हटा कर पथ को सामान्यीकृत करता है।
Encodings
विभिन्न HTTP सर्वर और प्रॉक्सी जैसे Nginx, Node, और CloudFront डेलिमिटर्स को अलग-अलग डिकोड करते हैं, जिससे CDNs और मूल सर्वरों के बीच असंगतताएँ उत्पन्न होती हैं जिन्हें शोषित किया जा सकता है। उदाहरण के लिए, यदि वेब सर्वर इस परिवर्तन को करता है /myAccount%3Fparam
→ /myAccount?param
लेकिन कैश सर्वर कुंजी के रूप में पथ /myAccount%3Fparam
को रखता है, तो एक असंगति है।
इन असंगतियों की जांच करने का एक तरीका यह है कि पथ को बिना किसी एन्कोडिंग के लोड करने के बाद विभिन्न वर्णों को URL एन्कोडिंग के साथ अनुरोध भेजें और जांचें कि क्या एन्कोडेड पथ की प्रतिक्रिया कैश की गई प्रतिक्रिया से आई थी।
Dot segment
जहाँ डॉट शामिल होते हैं, पथ सामान्यीकरण भी कैश पॉइज़निंग हमलों के लिए बहुत दिलचस्प है। उदाहरण के लिए, /static/../home/index
या /aaa..\home/index
, कुछ कैश सर्वर इन पथों को उनके साथ कुंजी के रूप में कैश करेंगे जबकि अन्य पथ को हल कर सकते हैं और /home/index
को कैश कुंजी के रूप में उपयोग कर सकते हैं।
जैसे पहले, इस प्रकार के अनुरोध भेजना और यह जांचना कि क्या प्रतिक्रिया कैश से प्राप्त की गई थी, यह पहचानने में मदद करता है कि /home/index
के लिए प्रतिक्रिया वही है जो उन पथों के अनुरोध किए जाने पर भेजी गई थी।
Static Resources
कई कैश सर्वर हमेशा एक प्रतिक्रिया को कैश करेंगे यदि इसे स्थिर के रूप में पहचाना गया। यह इस कारण हो सकता है:
- The extension: 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
- एक डेलिमिटर और एक स्थिर एक्सटेंशन का उपयोग करके गतिशील प्रतिक्रिया को कैश करने के लिए मजबूर करना संभव है जैसे
/home$image.png
का अनुरोध/home$image.png
को कैश करेगा और मूल सर्वर/home
के साथ प्रतिक्रिया देगा - Well-known static directories: निम्नलिखित निर्देशिकाएँ स्थिर फ़ाइलें रखती हैं और इसलिए उनकी प्रतिक्रिया को कैश किया जाना चाहिए: /static, /assets, /wp-content, /media, /templates, /public, /shared
- एक डेलिमिटर, एक स्थिर निर्देशिका और डॉट्स का उपयोग करके गतिशील प्रतिक्रिया को कैश करने के लिए मजबूर करना संभव है जैसे:
/home/..%2fstatic/something
/static/something
को कैश करेगा और प्रतिक्रिया होगी/home
- Static dirs + dots:
/static/..%2Fhome
या/static/..%5Chome
के लिए अनुरोध को जैसे है वैसा कैश किया जा सकता है लेकिन प्रतिक्रिया/home
हो सकती है - Static files: कुछ विशिष्ट फ़ाइलें हमेशा कैश की जाती हैं जैसे
/robots.txt
,/favicon.ico
, और/index.html
। जिसे इस तरह से दुरुपयोग किया जा सकता है जैसे/home/..%2Frobots.txt
जहाँ कैश/robots.txt
को संग्रहीत कर सकता है और मूल सर्वर/home
के लिए प्रतिक्रिया देता है।
tip
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाएँ देखें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमारे Twitter 🐦 @hacktricks_live** का पालन करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।