Parameter Pollution | JSON Injection
Tip
AWS हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।
HTTP Parameter Pollution (HPP) अवलोकन
HTTP Parameter Pollution (HPP) एक तकनीक है जहाँ हमलावर HTTP parameters में हेरफेर करके वेब एप्लिकेशन के व्यवहार को अनइच्छित तरीकों से बदलते हैं। यह हेरफेर HTTP parameters को जोड़कर, संशोधित करके, या डुप्लिकेट करके किया जाता है। इन हेरफेरों का प्रभाव उपयोगकर्ता के लिए सीधे दिखाई नहीं देता, लेकिन यह सर्वर-साइड पर एप्लिकेशन की कार्यक्षमता को काफी बदल सकता है और क्लाइंट-साइड पर देखे जाने योग्य असर छोड़ सकता है।
HTTP Parameter Pollution (HPP) का उदाहरण
A banking application transaction URL:
- मूल URL:
https://www.victim.com/send/?from=accountA&to=accountB&amount=10000
एक अतिरिक्त from पैरामीटर जोड़ने से:
- परिवर्तित URL:
https://www.victim.com/send/?from=accountA&to=accountB&amount=10000&from=accountC
लेन-देन गलत तरीके से accountC से चार्ज हो सकता है बजाय accountA के, जो HPP की क्षमता दिखाता है कि यह ट्रांज़ैक्शन या अन्य कार्यक्षमताओं जैसे पासवर्ड रीसेट, 2FA सेटिंग्स, या API key अनुरोधों को भी प्रभावित कर सकता है।
प्रौद्योगिकी-विशिष्ट पैरामीटर पार्सिंग
- पैरामीटर किस तरह पार्स और प्राथमिकता दी जाती है यह underlying web technology पर निर्भर करता है, जो प्रभावित करती है कि HPP कैसे exploit किया जा सकता है।
- Wappalyzer जैसे टूल इन प्रौद्योगिकियों और उनके पार्सिंग व्यवहार की पहचान करने में मदद करते हैं।
PHP और HPP का शोषण
OTP Manipulation Case:
- प्रसंग: एक लॉगिन मेकैनिज्म जो One-Time Password (OTP) मांगता था, उसका शोषण किया गया।
- विधि: Burp Suite जैसे टूल का उपयोग करके OTP अनुरोध को इंटरसेप्ट करते समय हमलावरों ने HTTP अनुरोध में
emailपैरामीटर को डुप्लिकेट कर दिया। - परिणाम: OTP, जो प्रारंभिक ईमेल के लिए होना चाहिए था, परिवर्तित अनुरोध में दूसरे ईमेल पते पर भेज दिया गया। इस दोष ने अनुमतियों को बायपास करके अनधिकृत पहुँच की अनुमति दी।
यह परिदृश्य एप्लिकेशन के बैकएंड में एक गंभीर चूक को उजागर करता है, जो OTP जनरेशन के लिए पहले email पैरामीटर को प्रोसेस करता था पर डिलीवरी के लिए आखिरी का उपयोग करता था।
API Key Manipulation Case:
- परिदृश्य: एक एप्लिकेशन उपयोगकर्ताओं को उनके प्रोफ़ाइल सेटिंग्स पेज के माध्यम से API key अपडेट करने की अनुमति देता है।
- अटैक वेक्टर: एक हमलावर ने पाया कि POST अनुरोध में अतिरिक्त
api_keyपैरामीटर जोड़कर वे API key अपडेट फ़ंक्शन के परिणाम को प्रभावित कर सकते हैं। - तकनीक: Burp Suite जैसे टूल का उपयोग करके, हमलावर ने एक ऐसा अनुरोध बनाया जिसमें दो
api_keyपैरामीटर थे: एक वैध और एक दुर्भावनापूर्ण। सर्वर, केवल आखिरी occurrence को प्रोसेस करते हुए, API key को हमलावर द्वारा दी गई वैल्यू से अपडेट कर देता है। - परिणाम: हमलावर को शिकार के API कार्यक्षमता पर नियंत्रण मिल जाता है, जिससे वे निजी डेटा को अनधिकृत रूप से एक्सेस या मॉडिफाई कर सकते हैं।
यह उदाहरण दिखाता है कि विशेष रूप से API key जैसे संवेदनशील फीचर में सुरक्षित पैरामीटर हैंडलिंग कितनी आवश्यक है।
Parameter Parsing: Flask vs. PHP
डुप्लिकेट HTTP पैरामीटर को हैंडल करने का तरीका वेब प्रौद्योगिकियों में भिन्न होता है, जो उनकी HPP हमलों के प्रति संवेदनशीलता को प्रभावित करता है:
- Flask: पहले मिलने वाले पैरामीटर मान को अपनाता है, जैसे कि
a=1को query stringa=1&a=2में, यानी प्रारंभिक instance को बाद के duplicates पर प्राथमिकता देता है। - PHP (on Apache HTTP Server): इसके विपरीत, आखिरी पैरामीटर मान को प्राथमिकता देता है, दिए गए उदाहरण में
a=2को चुनता है। यह व्यवहार अनजाने में HPP exploits को सक्षम कर सकता है क्योंकि यह हमलावर के परिवर्तित पैरामीटर को मूल पर वरीयता दे सकता है।
HPP परीक्षण नोट्स (OWASP WSTG)
- HTTP मानक यह परिभाषित नहीं करते कि एक ही नाम वाले कई पैरामीटर को कैसे interpret किया जाए, इसलिए व्यवहार स्टैक्स और कंपोनेंट्स के बीच भिन्न होता है।
- जब server-side HPP का परीक्षण कर रहे हों, तो query strings या bodies में प्रत्येक पैरामीटर को डुप्लिकेट करें और देखें कि क्या एप्लिकेशन मानों को concatenate करता है, first/last का उपयोग करता है, या error देता है।
- client-side HPP के लिए, एक reflected parameter value में URL-encoded
&इंजेक्ट करें (उदा.,%26HPP_TEST) और generated links या form actions के अंदर decoded occurrences जैसे&HPP_TESTया&HPP_TESTकी तलाश करें।
Server-Side Parameter Pollution (SSPP) in Internal APIs
कुछ एप्लिकेशन उपयोगकर्ता इनपुट को server-side अनुरोधों में internal APIs के लिए एम्बेड करते हैं। यदि उस इनपुट को सही तरीके से encoded नहीं किया गया है, तो आप internal अनुरोध में पैरामीटर इंजेक्ट या ओवरराइड कर सकते हैं। किसी भी उपयोगकर्ता इनपुट का परीक्षण करें, जिसमें query parameters, form fields, headers, और URL path parameters शामिल हैं।
Common probes:
%26(URL-encoded&) के साथ एक नया पैरामीटर जोड़ें।- डाउनस्ट्रीम query को
%23(URL-encoded#) से truncate करें। - किसी मौजूदा पैरामीटर को डुप्लिकेट करके ओवरराइड करें।
Example:
GET /userSearch?name=peter%26name=carlos&back=/home
संभावित रूप से एक server-side request जैसा परिणाम देता है:
GET /users/search?name=peter&name=carlos&publicProfile=true
Parameter pollution प्रौद्योगिकी के अनुसार
ये परिणाम https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89 से लिए गए थे
PHP 8.3.11 AND Apache 2.4.62
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*l_Pf2JNCYhmfAvfk7UTEbQ.jpeg
- पैरामीटर नाम में %00 के बाद की किसी भी चीज़ की अनदेखी करें।
- name[] को array के रूप में हैंडल करें।
- _GET का अर्थ GET Method नहीं होता।
- अंतिम पैरामीटर को प्राथमिकता दें।
Ruby 3.3.5 and WEBrick 1.8.2
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*kKxtZ8qEmgTIMS81py5hhg.jpeg
- पैरामीटर को विभाजित करने के लिए & और ; delimiters का उपयोग करता है।
- name[] को नहीं पहचानता।
- पहले पैरामीटर को प्राथमिकता देता है।
Spring MVC 6.0.23 AND Apache Tomcat 10.1.30
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*llG22MF1gPTYZYFVCmCiVw.jpeg
- POST RequestMapping == PostMapping & GET RequestMapping == GetMapping ।
- POST RequestMapping & PostMapping name[] को पहचानते हैं।
- यदि name और name[] मौजूद हैं तो name को प्राथमिकता देता है।
- पैरामीटर जोड़ता है, उदाहरण: first,last।
- POST RequestMapping & PostMapping Content-Type के साथ query parameter को पहचानते हैं।
NodeJS 20.17.0 AND Express 4.21.0
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*JzNkLOSW7orcHXswtMHGMA.jpeg
- name[] को पहचानता है।
- पैरामीटर जोड़ता है, उदाहरण: first,last।
GO 1.22.7
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NVvN1N8sL4g_Gi796FzlZA.jpeg
- name[] को नहीं पहचानता।
- पहले पैरामीटर को प्राथमिकता देता है।
Python 3.12.6 AND Werkzeug 3.0.4 AND Flask 3.0.3
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*Se5467PFFjIlmT3O7KNlWQ.jpeg
- name[] को नहीं पहचानता।
- पहले पैरामीटर को प्राथमिकता देता है।
Python 3.12.6 AND Django 4.2.15
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rf38VXut5YhAx0ZhUzgT8Q.jpeg
- name[] को नहीं पहचानता।
- अंतिम पैरामीटर को प्राथमिकता देता है।
Python 3.12.6 AND Tornado 6.4.1
.png)
https://miro.medium.com/v2/resize:fit:1100/format:webp/1*obCn7xahDc296JZccXM2qQ.jpeg
- name[] को नहीं पहचानता।
- अंतिम पैरामीटर को प्राथमिकता देता है।
JSON Injection
डुप्लिकेट कुंजियाँ
obj = {"test": "user", "test": "admin"}
front-end key की पहली उपस्थिति पर भरोसा कर सकता है जबकि backend key की दूसरी उपस्थिति का उपयोग करता है।
Key Collision: Character Truncation and Comments
कुछ characters frontend द्वारा सही तरीके से interpret नहीं होंगे, लेकिन backend उन्हें interpret करेगा और उन keys का उपयोग करेगा; यह bypass certain restrictions के लिए उपयोगी हो सकता है:
{"test": 1, "test\[raw \x0d byte]": 2}
{"test": 1, "test\ud800": 2}
{"test": 1, "test"": 2}
{"test": 1, "te\st": 2}
ध्यान दें कि इन मामलों में front end यह सोच सकता है कि test == 1 और backend यह सोच सकता है कि test == 2।
यह मान संबंधी प्रतिबंधों को bypass करने के लिए भी इस्तेमाल किया जा सकता है, जैसे:
{"role": "administrator\[raw \x0d byte]"}
{"role":"administrator\ud800"}
{"role": "administrator""}
{"role": "admini\strator"}
Comment Truncation का उपयोग
obj = {"description": "Duplicate with comments", "test": 2, "extra": /*, "test": 1, "extra2": */}
यहाँ हम प्रत्येक parser के serializer का उपयोग करके उसके संबंधित output को देखेंगे।
Serializer 1 (e.g., GoLang’s GoJay library) निम्नानुसार आउटपुट देगा:
description = "Duplicate with comments"test = 2extra = ""
Serializer 2 (e.g., Java’s JSON-iterator library) निम्नानुसार आउटपुट देगा:
description = "Duplicate with comments"extra = "/*"extra2 = "*/"test = 1
वैकल्पिक रूप से, comments का सरल उपयोग भी प्रभावी हो सकता है:
obj = {"description": "Comment support", "test": 1, "extra": "a"/*, "test": 2, "extra2": "b"*/}
Java की GSON लाइब्रेरी:
{ "description": "Comment support", "test": 1, "extra": "a" }
Ruby की simdjson लाइब्रेरी:
{ "description": "Comment support", "test": 2, "extra": "a", "extra2": "b" }
असंगत प्राथमिकता: Deserialization vs. Serialization
obj = {"test": 1, "test": 2}
obj["test"] // 1
obj.toString() // {"test": 2}
Float और Integer
संख्या
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
कई प्रतिनिधित्वों में डिकोड किया जा सकता है, जिनमें शामिल हैं:
999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
9.999999999999999e95
1E+96
0
9223372036854775807
जो असंगतियाँ पैदा कर सकती हैं
संदर्भ
-
https://medium.com/@shahjerry33/http-parameter-pollution-its-contaminated-85edc0805654
-
https://github.com/google/google-ctf/tree/master/2023/web-under-construction/solution
-
https://medium.com/@0xAwali/http-parameter-pollution-in-2024-32ec1b810f89
-
https://bishopfox.com/blog/json-interoperability-vulnerabilities
-
https://portswigger.net/web-security/api-testing/server-side-parameter-pollution
Tip
AWS हैकिंग सीखें और अभ्यास करें:
HackTricks Training AWS Red Team Expert (ARTE)
GCP हैकिंग सीखें और अभ्यास करें:HackTricks Training GCP Red Team Expert (GRTE)
Azure हैकिंग सीखें और अभ्यास करें:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks का समर्थन करें
- सदस्यता योजनाओं की जांच करें!
- हमारे 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या हमें Twitter 🐦 @hacktricks_live** पर फॉलो करें।**
- हैकिंग ट्रिक्स साझा करें और HackTricks और HackTricks Cloud गिटहब रिपोजिटरी में PRs सबमिट करें।


