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 का समर्थन करें

यह उस तकनीकों का सारांश है जो पोस्ट 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 का समर्थन करें