Express Prototype Pollution Gadgets
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)
अधिक विवरण के लिए मूल शोध पर एक नज़र डालें
एक Express ऐप में जो JSON सामग्री प्रकार प्रतिक्रिया का उपयोग कर रहा है और एक JSON को दर्शा रहा है:
इन मामलों में XSS सामान्यतः JSON सामग्री प्रकार के साथ संभव नहीं है। हालाँकि, प्रोटोटाइप प्रदूषण के साथ हम Express को HTML प्रतिक्रिया देने के लिए भ्रमित कर सकते हैं। यह भेद्यता इस पर निर्भर करती है कि एप्लिकेशन res.send(obj)
का उपयोग कर रहा है और एप्लिकेशन/json सामग्री प्रकार के साथ बॉडी पार्सर का उपयोग कर रहा है।
body
और _body
प्रॉपर्टीज़ को polluting करके, Express को HTML कंटेंट टाइप सर्व करने और _body
प्रॉपर्टी को दर्शाने के लिए मजबूर किया जा सकता है, जिससे स्टोर्ड XSS होता है।
यह संभव है कि express UTF-7 कंटेंट को रेंडर करे:
निम्नलिखित PP JSON के अंदर विशेषताओं को एक अतिरिक्त स्थान देने के लिए है जो कार्यक्षमता को बाधित नहीं करेगा:
फिर एक परावर्तित JSON इस तरह दिखेगा:
निम्नलिखित PP गैजेट सर्वर को HTTP हेडर भेजने के लिए मजबूर करेगा: Access-Control-Expose_headers: foo
यह CORS मॉड्यूल को स्थापित करने की आवश्यकता है
निम्नलिखित पेलोड के साथ, OPTIONS प्रतिक्रिया से एक विधि को छिपाना संभव है:
वापसी स्थिति कोड को निम्नलिखित PP पेलोड का उपयोग करके बदलना संभव है:
जब आप एक प्राइमिटिव जैसे कि स्ट्रिंग के साथ एक प्रोटोटाइप को असाइन करते हैं, तो यह कोई ऑपरेशन नहीं करता क्योंकि प्रोटोटाइप एक ऑब्जेक्ट होना चाहिए। यदि आप Object.prototype
को स्वयं एक प्रोटोटाइप ऑब्जेक्ट असाइन करने का प्रयास करते हैं, तो यह एक अपवाद फेंकेगा। हम इन दो व्यवहारों का उपयोग यह पता लगाने के लिए कर सकते हैं कि क्या प्रोटोटाइप प्रदूषण सफल रहा:
जब एक एप्लिकेशन अपनी प्रतिक्रिया में एक ऑब्जेक्ट शामिल करता है, तो __proto__
के साथ एक असामान्य नाम वाला एट्रिब्यूट बनाना जानकारीपूर्ण हो सकता है। विशेष रूप से, यदि केवल असामान्य एट्रिब्यूट प्रतिक्रिया में लौटाया जाता है, तो यह एप्लिकेशन की कमजोरी को इंगित कर सकता है:
इसके अलावा, उन परिदृश्यों में जहां Lodash जैसी लाइब्रेरी का उपयोग किया जाता है, प्रोटोटाइप प्रदूषण (PP) के माध्यम से और सीधे ऑब्जेक्ट के अंदर एक प्रॉपर्टी सेट करना एक और निदान दृष्टिकोण प्रदान करता है। यदि ऐसी प्रॉपर्टी प्रतिक्रिया से छोड़ी जाती है, तो यह सुझाव देता है कि Lodash लक्ष्य ऑब्जेक्ट में प्रॉपर्टी के अस्तित्व की पुष्टि कर रहा है इससे पहले कि वह मर्ज करे:
Express में एक विकल्प है जो आपको क्वेरी स्ट्रिंग पैरामीटर से ऑब्जेक्ट बनाने की अनुमति देता है। आप निश्चित रूप से इसका उपयोग एक बग चेन में प्रोटोटाइप प्रदूषण भेद्यता का लाभ उठाने के लिए कर सकते हैं।
?foo.bar=baz
नोड में एक ऑब्जेक्ट बनाता है।
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)