Parameter Pollution | JSON Injection
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)
HTTP Parameter Pollution (HPP) एक तकनीक है जहाँ हमलावर HTTP पैरामीटर को इस तरह से बदलते हैं कि वे वेब एप्लिकेशन के व्यवहार को अनपेक्षित तरीकों से बदल देते हैं। यह हेरफेर HTTP पैरामीटर को जोड़ने, संशोधित करने या डुप्लिकेट करने के द्वारा किया जाता है। इन हेरफेरों का प्रभाव सीधे उपयोगकर्ता को दिखाई नहीं देता लेकिन यह सर्वर साइड पर एप्लिकेशन की कार्यक्षमता को महत्वपूर्ण रूप से बदल सकता है, जिसका क्लाइंट साइड पर अवलोकनीय प्रभाव होता है।
एक बैंकिंग एप्लिकेशन लेनदेन URL:
Original URL: https://www.victim.com/send/?from=accountA&to=accountB&amount=10000
एक अतिरिक्त from
पैरामीटर जोड़ने पर:
Manipulated URL: https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC
लेनदेन गलत तरीके से accountC
पर चार्ज किया जा सकता है बजाय accountA
के, जो HPP की क्षमता को दर्शाता है कि यह लेनदेन या अन्य कार्यक्षमताओं जैसे पासवर्ड रीसेट, 2FA सेटिंग्स, या API कुंजी अनुरोधों में हेरफेर कर सकता है।
पैरामीटर को कैसे पार्स और प्राथमिकता दी जाती है, यह अंतर्निहित वेब तकनीक पर निर्भर करता है, जो HPP के शोषण को प्रभावित करता है।
Wappalyzer जैसे उपकरण इन तकनीकों और उनके पार्सिंग व्यवहार की पहचान करने में मदद करते हैं।
OTP Manipulation Case:
Context: एक लॉगिन तंत्र जिसमें एक वन-टाइम पासवर्ड (OTP) की आवश्यकता थी, का शोषण किया गया।
Method: Burp Suite जैसे उपकरणों का उपयोग करके OTP अनुरोध को इंटरसेप्ट करके, हमलावरों ने HTTP अनुरोध में email
पैरामीटर को डुप्लिकेट किया।
Outcome: OTP, जो प्रारंभिक ईमेल के लिए था, इसके बजाय हेरफेर किए गए अनुरोध में निर्दिष्ट दूसरे ईमेल पते पर भेजा गया। यह दोष अनधिकृत पहुंच की अनुमति देता है, जो कि इच्छित सुरक्षा उपाय को दरकिनार करता है।
यह परिदृश्य एप्लिकेशन के बैकएंड में एक महत्वपूर्ण चूक को उजागर करता है, जिसने OTP उत्पन्न करने के लिए पहले email
पैरामीटर को संसाधित किया लेकिन डिलीवरी के लिए अंतिम का उपयोग किया।
API Key Manipulation Case:
Scenario: एक एप्लिकेशन उपयोगकर्ताओं को उनके प्रोफ़ाइल सेटिंग्स पृष्ठ के माध्यम से अपनी API कुंजी अपडेट करने की अनुमति देता है।
Attack Vector: एक हमलावर यह पता लगाता है कि POST अनुरोध में एक अतिरिक्त api_key
पैरामीटर जोड़कर, वे API कुंजी अपडेट फ़ंक्शन के परिणाम को हेरफेर कर सकते हैं।
Technique: Burp Suite जैसे उपकरण का उपयोग करते हुए, हमलावर एक अनुरोध तैयार करता है जिसमें दो api_key
पैरामीटर होते हैं: एक वैध और एक दुर्भावनापूर्ण। सर्वर, केवल अंतिम घटना को संसाधित करते हुए, API कुंजी को हमलावर द्वारा प्रदान किए गए मान पर अपडेट करता है।
Result: हमलावर पीड़ित की API कार्यक्षमता पर नियंत्रण प्राप्त करता है, संभावित रूप से निजी डेटा तक अनधिकृत पहुंच या संशोधन कर सकता है।
यह उदाहरण API कुंजी प्रबंधन जैसी महत्वपूर्ण सुविधाओं में सुरक्षित पैरामीटर हैंडलिंग की आवश्यकता को और अधिक उजागर करता है।
वेब तकनीकों द्वारा डुप्लिकेट HTTP पैरामीटर को संभालने का तरीका भिन्न होता है, जो HPP हमलों के प्रति उनकी संवेदनशीलता को प्रभावित करता है:
Flask: पहले मिले पैरामीटर मान को अपनाता है, जैसे a=1
एक क्वेरी स्ट्रिंग a=1&a=2
में, प्रारंभिक उदाहरण को बाद के डुप्लिकेट्स पर प्राथमिकता देता है।
PHP (Apache HTTP Server पर): इसके विपरीत, अंतिम पैरामीटर मान को प्राथमिकता देता है, दिए गए उदाहरण में a=2
का चयन करता है। यह व्यवहार अनजाने में HPP शोषण को सुविधाजनक बना सकता है, हमलावर द्वारा हेरफेर किए गए पैरामीटर को मूल पर सम्मानित करते हुए।
यह परिणाम https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89 से लिए गए हैं।
पैरामीटर नाम में %00 के बाद कुछ भी नजरअंदाज करें।
name[] को एरे के रूप में संभालें।
_GET का मतलब GET विधि नहीं है।
अंतिम पैरामीटर को प्राथमिकता दें।
पैरामीटर को विभाजित करने के लिए & और ; सीमांकक का उपयोग करता है।
name[] को मान्यता नहीं दी गई।
पहले पैरामीटर को प्राथमिकता दें।
POST RequestMapping == PostMapping & GET RequestMapping == GetMapping।
POST RequestMapping & PostMapping name[] को मान्यता देते हैं।
यदि name और name[] दोनों मौजूद हैं तो name को प्राथमिकता दें।
पैरामीटर को जोड़ें जैसे कि first,last।
POST RequestMapping & PostMapping सामग्री प्रकार के साथ क्वेरी पैरामीटर को मान्यता देते हैं।
name[] को मान्यता देता है।
पैरामीटर को जोड़ें जैसे कि first,last।
name[] को मान्यता नहीं दी गई।
पहले पैरामीटर को प्राथमिकता दें।
name[] को मान्यता नहीं दी गई।
पहले पैरामीटर को प्राथमिकता दें।
name[] को मान्यता नहीं दी गई।
अंतिम पैरामीटर को प्राथमिकता दें।
name[] को मान्यता नहीं दी गई।
अंतिम पैरामीटर को प्राथमिकता दें।
The front-end might believe the first ocurrence while the backend uses the second ocurrence of the key.
कुछ वर्णों को फ्रंटेंड द्वारा सही ढंग से व्याख्यायित नहीं किया जाएगा लेकिन बैकएंड उन्हें व्याख्यायित करेगा और उन कुंजियों का उपयोग करेगा, यह कुछ प्रतिबंधों को बायपास करने के लिए उपयोगी हो सकता है:
ध्यान दें कि इन मामलों में फ्रंट एंड यह सोच सकता है कि test == 1
है और बैकेंड यह सोच सकता है कि test == 2
है।
इसका उपयोग मूल्य प्रतिबंधों को बायपास करने के लिए भी किया जा सकता है जैसे:
यहाँ हम प्रत्येक पार्सर से सीरियलाइज़र का उपयोग करेंगे ताकि इसके संबंधित आउटपुट को देखा जा सके।
सीरियलाइज़र 1 (जैसे, GoLang का GoJay पुस्तकालय) उत्पादन करेगा:
description = "Duplicate with comments"
test = 2
extra = ""
सीरियलाइज़र 2 (जैसे, Java का JSON-iterator पुस्तकालय) उत्पादन करेगा:
description = "Duplicate with comments"
extra = "/*"
extra2 = "*/"
test = 1
वैकल्पिक रूप से, टिप्पणियों का सीधा उपयोग भी प्रभावी हो सकता है:
Java का GSON पुस्तकालय:
Ruby का simdjson पुस्तकालय:
संख्या
कई प्रतिनिधित्वों में डिकोड किया जा सकता है, जिसमें:
जो असंगतियाँ उत्पन्न कर सकता है
AWS Hacking सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)