Cache Poisoning via URL discrepancies
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
यह उन तकनीकों का सारांश है जो https://portswigger.net/research/gotta-cache-em-all में प्रस्तावित की गई हैं ताकि कैश प्रॉक्सी और वेब सर्वर के बीच असमानताओं का दुरुपयोग करके कैश पॉइज़निंग हमले किए जा सकें।
इस हमले का लक्ष्य कैश सर्वर को यह सोचने के लिए मजबूर करना है कि एक स्थिर संसाधन लोड किया जा रहा है ताकि यह इसे कैश कर सके जबकि कैश सर्वर पथ का एक भाग कैश कुंजी के रूप में संग्रहीत करता है लेकिन वेब सर्वर एक अन्य पथ को हल करता है। वेब सर्वर वास्तविक पथ को हल करेगा जो एक गतिशील पृष्ठ को लोड करेगा (जो उपयोगकर्ता के बारे में संवेदनशील जानकारी, XSS जैसे दुर्भावनापूर्ण पेलोड या हमलावर की वेबसाइट से एक JS फ़ाइल लोड करने के लिए पुनर्निर्देशित कर सकता है)।
URL 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
)।
अन्य विशिष्ट डेलिमिटर्स इस प्रक्रिया का पालन करते हुए पाए जा सकते हैं:
चरण 1: गैर-कैश करने योग्य अनुरोधों की पहचान करें और उनका उपयोग करें यह देखने के लिए कि संभावित डेलिमिटर्स वाले URL को कैसे संभाला जाता है।
चरण 2: पथों में यादृच्छिक प्रत्यय जोड़ें और यह निर्धारित करने के लिए सर्वर की प्रतिक्रिया की तुलना करें कि क्या कोई वर्ण डेलिमिटर के रूप में कार्य करता है।
चरण 3: यादृच्छिक प्रत्यय से पहले संभावित डेलिमिटर्स पेश करें यह देखने के लिए कि क्या प्रतिक्रिया बदलती है, जो डेलिमिटर के उपयोग को इंगित करती है।
उद्देश्य: कैश और मूल सर्वरों में URL पार्सर URL को सामान्य करते हैं ताकि एंडपॉइंट मैपिंग और कैश कुंजी के लिए पथ निकाले जा सकें।
प्रक्रिया: पथ डेलिमिटर्स की पहचान करता है, वर्णों को डिकोड करके और डॉट-सेगमेंट को हटा कर पथ को निकालता और सामान्य करता है।
विभिन्न HTTP सर्वर और प्रॉक्सी जैसे Nginx, Node, और CloudFront डेलिमिटर्स को अलग-अलग डिकोड करते हैं, जिससे CDNs और मूल सर्वरों के बीच असंगतियाँ उत्पन्न होती हैं जिन्हें शोषित किया जा सकता है। उदाहरण के लिए, यदि वेब सर्वर इस परिवर्तन को करता है /myAccount%3Fparam
→ /myAccount?param
लेकिन कैश सर्वर कुंजी के रूप में पथ /myAccount%3Fparam
को रखता है, तो एक असंगति है।
इन असंगतियों की जांच करने का एक तरीका यह है कि अनुरोध भेजें URL को विभिन्न वर्णों को एन्कोड करते हुए पथ को बिना किसी एन्कोडिंग के लोड करने के बाद और जांचें कि क्या एन्कोडेड पथ की प्रतिक्रिया कैश की गई प्रतिक्रिया से आई थी।
जहाँ डॉट शामिल होते हैं वहाँ पथ सामान्यीकरण भी कैश पॉइज़निंग हमलों के लिए बहुत दिलचस्प है। उदाहरण के लिए, /static/../home/index
या /aaa..\home/index
, कुछ कैश सर्वर इन पथों को उनके साथ कुंजी के रूप में कैश करेंगे जबकि अन्य पथ को हल कर सकते हैं और /home/index
को कैश कुंजी के रूप में उपयोग कर सकते हैं।
जैसे पहले, इस प्रकार के अनुरोध भेजना और यह जांचना कि क्या प्रतिक्रिया कैश से प्राप्त की गई थी, यह पहचानने में मदद करता है कि /home/index
के लिए प्रतिक्रिया वही है जो उन पथों के अनुरोध किए जाने पर भेजी गई थी।
कई कैश सर्वर हमेशा एक प्रतिक्रिया को कैश करेंगे यदि इसे स्थिर के रूप में पहचाना गया। यह इस कारण हो सकता है:
एक्सटेंशन: 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
के साथ प्रतिक्रिया देगा
अच्छी तरह से ज्ञात स्थिर निर्देशिकाएँ: निम्नलिखित निर्देशिकाएँ स्थिर फ़ाइलें रखती हैं और इसलिए उनकी प्रतिक्रिया को कैश किया जाना चाहिए: /static, /assets, /wp-content, /media, /templates, /public, /shared
एक डेलिमिटर, एक स्थिर निर्देशिका और डॉट्स का उपयोग करके एक गतिशील प्रतिक्रिया को कैश करने के लिए मजबूर करना संभव है जैसे: /home/..%2fstatic/something
/static/something
को कैश करेगा और प्रतिक्रिया होगी /home
स्थिर निर्देशिकाएँ + डॉट्स: /static/..%2Fhome
या /static/..%5Chome
का अनुरोध जैसा है कैश किया जा सकता है लेकिन प्रतिक्रिया /home
हो सकती है
स्थिर फ़ाइलें: कुछ विशिष्ट फ़ाइलें हमेशा कैश की जाती हैं जैसे /robots.txt
, /favicon.ico
, और /index.html
। जिसका दुरुपयोग किया जा सकता है जैसे /home/..%2Frobots.txt
जहाँ कैश /robots.txt
को संग्रहीत कर सकता है और मूल सर्वर /home
के लिए प्रतिक्रिया देता है।
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)