Cache Poisoning via URL discrepancies

Support HackTricks

यह उस तकनीकों का सारांश है जो https://portswigger.net/research/gotta-cache-em-all में प्रस्तावित की गई हैं ताकि कैश प्रॉक्सी और वेब सर्वर के बीच के भिन्नताओं का दुरुपयोग करते हुए कैश पॉइज़निंग हमले किए जा सकें।

इस हमले का लक्ष्य कैश सर्वर को यह सोचने के लिए मजबूर करना है कि एक स्थिर संसाधन लोड किया जा रहा है ताकि यह इसे कैश करे जबकि कैश सर्वर पथ का एक भाग कैश कुंजी के रूप में संग्रहीत करता है लेकिन वेब सर्वर एक अन्य पथ को हल करता है। वेब सर्वर वास्तविक पथ को हल करेगा जो एक गतिशील पृष्ठ को लोड करेगा (जो उपयोगकर्ता के बारे में संवेदनशील जानकारी, XSS जैसे दुर्भावनापूर्ण पेलोड या हमलावर की वेबसाइट से एक JS फ़ाइल लोड करने के लिए पुनर्निर्देशित कर सकता है)।

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 के लिए प्रतिक्रिया देता है।

Support HackTricks

Last updated