* क्या आप किसी **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी कंपनी को **HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करने की आवश्यकता है? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष संग्रह [**NFTs**](https://opensea.io/collection/the-peass-family)
* [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें
* **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या मुझे **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)** का पालन करें।**
**इस भाग का अधिकांश हिस्सा इस आश्चर्यजनक Portswigger पेज से लिया गया था:** [**https://portswigger.net/web-security/xxe/xml-entities**](https://portswigger.net/web-security/xxe/xml-entities)
XML का अर्थ होता है "विस्तारयोग्य मार्कअप भाषा"। XML डेटा को संग्रहीत और परिवहन करने के लिए एक भाषा है। HTML की तरह, XML टैग और डेटा के वृक्षाकार संरचना का उपयोग करता है। HTML की तरह, XML पूर्वनिर्धारित टैग का उपयोग नहीं करता है, और इसलिए टैग को डेटा का वर्णन करने वाले नाम दिए जा सकते हैं। वेब के इतिहास में पहले, XML डेटा परिवहन प्रारूप के रूप में प्रसिद्ध था (AJAX में "X" का उपयोग "XML" के लिए होता है)। लेकिन अब इसकी लोकप्रियता JSON प्रारूप की ओर घट गई है।
XML इंटिटी एक तरीका है जिससे XML दस्तावेज़ में डेटा इकाई का प्रतिनिधित्व किया जाता है, इसके बजाय डेटा का उपयोग किया जाता है। XML भाषा के निर्धारण में विभिन्न इंटिटी शामिल हैं। उदाहरण के लिए, इंटिटी `<` और `>` वर्णों का प्रतिनिधित्व करती हैं, जो `<` और `>` वर्णों को प्रतिष्ठान वर्ण के रूप में दर्शाते हैं। ये मेटाकरेक्टर्स XML टैग को दर्शाने के लिए उपयोग होते हैं, और इसलिए जब वे डेटा में प्रकट होते हैं, तो आमतौर पर उनके इंटिटी का उपयोग करके प्रतिष्ठान किया जाना चाहिए।
तत्व प्रकार घोषणाएँ एक XML दस्तावेज़ में प्रतिष्ठान हो सकने वाले तत्वों के प्रकार और संख्या के नियमों को सेट करती हैं, वे तत्व एक दूसरे के भीतर प्रतिष्ठान हो सकते हैं, और वे किस क्रम में प्रतिष्ठान होने चाहिए। उदाहरण के लिए:
[इन हमलों का बहुत सारा परीक्षण Portswiggers XEE labs का उपयोग करके किया गया था: https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)
अलग-अलग तरीकों में हम `/etc/passwd` फ़ाइल को पढ़ने का प्रयास करेंगे। Windows के लिए आप यह पढ़ने की कोशिश कर सकते हैं: `C:\windows\system32\drivers\etc\hosts`
**जावा** आधारित एप्लिकेशन में एक निर्देशिका की सामग्री को सूचीबद्ध करना संभव हो सकता है XXE के माध्यम से एक पेलोड के साथ (फ़ाइल के बजाय निर्देशिका के लिए केवल पूछ रहा है):
**पहले से टिप्पणी की गई तकनीक** का उपयोग करके आप सर्वर को एक सर्वर तक पहुंचने के लिए बना सकते हैं जिसे आप निरंकुश कर सकते हैं। लेकिन, यदि यह काम नहीं कर रहा है, शायद यह कारण है कि **XML एंटिटी की अनुमति नहीं है**, उस मामले में आप **XML पैरामीटर एंटिटी** का प्रयास कर सकते हैं:
**इस अवसर में हम सर्वर को एक नया DTD लोड कराएंगे जिसमें एक हानिकारक पेलोड होगा जो एक फ़ाइल की सामग्री को HTTP अनुरोध के माध्यम से भेजेगा (बहु-लाइन फ़ाइलों के लिए आप इसे** _**ftp://**_** के माध्यम से निकालने का प्रयास कर सकते हैं)। यह व्याख्या** [**यहां पोर्टस्विगर्स लैब से ली गई है**](https://portswigger.net/web-security/xxe/blind)**।**
*`/etc/passwd` फ़ाइल की सामग्री को समेत करने वाले एक XML पैरामीटर एंटिटी `file` को परिभाषित करता है।
* एक और XML पैरामीटर एंटिटी `exfiltrate` के लिए एक गतिशील घोषणा समेत करने वाली एक XML पैरामीटर एंटिटी `eval` को परिभाषित करता है। `exfiltrate` एंटिटी का मूल्य URL क्वेरी स्ट्रिंग के भीतर `file` एंटिटी के मान को समायोजित करने वाले हमलेवार की वेब सर्वर को HTTP अनुरोध भेजकर मूल्यांकन किया जाएगा।
*`eval` एंटिटी का उपयोग करता है, जिससे `exfiltrate` एंटिटी की गतिशील घोषणा की प्रदर्शनी की जाती है।
* निर्दिष्ट URL का अनुरोध करके इसका मूल्यांकन करने के लिए `exfiltrate` एंटिटी का उपयोग करता है।
अटैकर को फिर इसे अपने नियंत्रण में एक सिस्टम पर होस्ट करना होगा, आमतौर पर इसे अपने खुद के वेब सर्वर पर लोड करके। उदाहरण के लिए, अटैकर निम्नलिखित URL पर हमलेवार DTD की सेवा कर सकता है:\
यह XXE पेलोड `xxe` नामक एक XML पैरामीटर एंटिटी घोषित करता है और फिर DTD में इस एंटिटी का उपयोग करता है। इससे XML पार्सर को हमलावर्धक के सर्वर से बाहरी DTD को लाने और इसे इनलाइन अनुप्रयोग करने के लिए प्रेरित किया जाएगा। दुष्प्रभावी DTD में परिभाषित चरणों को फिर से निष्पादित किया जाता है, और `/etc/passwd` फ़ाइल हमलावर्धक के सर्वर पर भेजी जाती है।
**इस मामले में हम सर्वर को एक दुष्प्रभावी DTD लोड कराने के लिए जाएंगे जो एक त्रुटि संदेश में एक फ़ाइल की सामग्री दिखाएगा (यह केवल तभी मान्य होगा जब आप त्रुटि संदेश देख सकते हो)।** [**यहां से उदाहरण।**](https://portswigger.net/web-security/xxe/blind)
*`/etc/passwd` फ़ाइल की सामग्री को समेत करने वाले एक XML पैरामीटर एंटिटी `file` को परिभाषित करता है।
* एक और XML पैरामीटर एंटिटी `error` के एक गतिशील घोषणा को समेत करने वाली एक XML पैरामीटर एंटिटी `eval` को परिभाषित करता है। `error` एंटिटी की मूल्यांकन के लिए एक अस्तित्व नहीं रखने वाली फ़ाइल को लोड करके किया जाएगा, जिसका नाम `file` एंटिटी के मान को समायोजित करता है।
*`eval` एंटिटी का उपयोग करता है, जिससे `error` एंटिटी की गतिशील घोषणा की प्रदर्शनी की जाती है।
*`error` एंटिटी का उपयोग करता है, ताकि इसका मूल्य अस्तित्व नहीं रखने वाली फ़ाइल को लोड करने का प्रयास करके मूल्यांकन किया जाए, जिससे एक त्रुटि संदेश उत्पन्न होता है जिसमें अस्तित्व नहीं रखने वाली फ़ाइल का नाम होता है, जो `/etc/passwd` फ़ाइल की सामग्री होती है।
_**कृपया ध्यान दें कि बाहरी DTD हमें दूसरे (****`eval`****) एंटिटी को शामिल करने की अनुमति देता है, लेकिन आंतरिक DTD में यह निषिद्ध है। इसलिए, आप बाहरी DTD का उपयोग किए बिना त्रुटि को बलवान नहीं कर सकते हैं (आमतौर पर)।**_
तो बाइंड XXE सुरक्षा दुर्बलताओं के बारे में क्या? जब **बाहरी कनेक्शन उपलब्ध नहीं होते हैं** (बाहरी कनेक्शन उपलब्ध नहीं होते हैं), तो क्या होता है? [यहां से जानकारी](https://portswigger.net/web-security/xxe/blind) मिलती है।
इस स्थिति में, यदि एक दस्तावेज़ का **DTD आंतरिक और बाहरी DTD घोषणाएं का मिश्रण उपयोग करता है**, तो **आंतरिक DTD उपयोग करके हम बाहरी DTD में घोषित एंटिटी को पुनः परिभाषित कर सकते हैं**। जब ऐसा होता है, तो दूसरे पैरामीटर एंटिटी की परिभाषा में XML पैरामीटर एंटिटी का उपयोग करने पर लगाम हट जाती है।
इसका मतलब है कि एक हमलावर एक **आंतरिक DTD से त्रुटि आधारित XXE तकनीक का उपयोग कर सकता है**, यदि वे उपयोग करते हैं XML पैरामीटर एंटिटी को **बाहरी DTD में घोषित एंटिटी को पुनः परिभाषित करने के लिए**। बेशक, यदि बाहरी कनेक्शन ब्लॉक होते हैं, तो बाहरी DTD को दूरस्थ स्थान से लोड नहीं किया जा सकता है। इसके बजाय, इसे एक **ऐप्लिकेशन सर्वर के लिए स्थानीय बाहरी DTD फ़ाइल होनी चाहिए**। _मूल रूप से, हमला एक DTD फ़ाइल को आह्वान करने का शामिल होता है जो स्थानीय फ़ाइल सिस्टम पर मौजूद होती है और इसे एक मौजूदा एंटिटी को पुनः परिभाषित करने के लिए पुनः उपयोग करने के तरीके से उपयोग करता है जो संवेदनशील डेटा को समारोहित करने वाली एक पार्सिंग त्रुटि को ट्रिगर करता है।_
उदाहरण के लिए, सोचें कि सर्वर फ़ाइल सिस्टम पर `/usr/local/app/schema.dtd` स्थान पर एक DTD फ़ाइल है, और इस DTD फ़ाइल में `custom_entity` नामक एक एंटिटी को परिभाषित किया गया है। एक हमलावर `/etc/passwd` फ़ाइल की सामग्री शामिल करने वाली एक XML पार्सिंग त्रुटि संदेश को ट्रिगर कर सकता है जब वे निम्नलिखित तरह का हाइब्रिड DTD सबमिट करते हैं:
*`local_dtd` नामक एक XML पैरामीटर एंटिटी को परिभाषित करता है, जिसमें सर्वर फ़ाइलसिस्टम पर मौजूद बाह्य DTD फ़ाइल की सामग्री होती है।
*`custom_entity` नामक XML पैरामीटर एंटिटी को पुनः परिभाषित करता है, जो पहले से ही बाह्य DTD फ़ाइल में परिभाषित है। इस एंटिटी को `/etc/passwd` फ़ाइल की सामग्री को समावेश करने वाले [error-based XXE exploit](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages) के रूप में पुनः परिभाषित किया जाता है, जो एक त्रुटि संदेश को उत्पन्न करने के लिए उपयोग किया जाता है जिसमें `/etc/passwd` फ़ाइल की सामग्री होती है।
*`local_dtd` एंटिटी का उपयोग करता है, ताकि बाह्य DTD को व्याख्या किया जा सके, जिसमें `custom_entity` एंटिटी के पुनः परिभाषित मान को भी शामिल किया जाता है। इससे आवश्यक त्रुटि संदेश प्राप्त होता है।
**वास्तविक दुनिया का उदाहरण:** GNOME डेस्कटॉप परिवेश का उपयोग करने वाले सिस्टमों में अक्सर `/usr/share/yelp/dtd/docbookx.dtd` पर एक DTD होता है, जिसमें `ISOamso` नामक एंटिटी होती है।
इस तकनीक का उपयोग करने के लिए **आपको पहले एक मान्य DTD खोजने की आवश्यकता होती है**। आप इसे कर सकते हैं **जब आप सर्वर का उपयोग कर रहे हैं वही ओएस / सॉफ्टवेयर स्थापित करके** और **कुछ डिफ़ॉल्ट DTDs खोजने** या **सिस्टम में मौजूद डिफ़ॉल्ट DTDs की एक सूची** प्राप्त करके **जांचें** यदि उनमें से कोई मौजूद है:
इसके अलावा, यदि आपके पास **पीडीएफ छवि** का विक्टिम सिस्टम का डॉकर इमेज है, तो आप इसी रेपो के उपकरण का उपयोग करके **इमेज को स्कैन कर सकते हैं** और सिस्टम में मौजूद **DTDs के पथ को खोज सकते हैं**। [गिटहब के Readme](https://github.com/GoSecure/dtd-finder) को पढ़ें और जानें कैसे।
([**यहां से**](https://labs.detectify.com/2021/09/30/10-types-web-vulnerabilities-often-missed/) कॉपी किया गया है)\
कई वेब एप्लिकेशन आपको माइक्रोसॉफ्ट ऑफिस दस्तावेज़ अपलोड करने की अनुमति देती हैं, और फिर वे उनमें से कुछ विवरणों को पार्स करती हैं। उदाहरण के लिए, आपके पास एक वेब एप्लिकेशन हो सकती है जो आपको XLSX प्रारूप में एक स्प्रेडशीट अपलोड करके डेटा आयात करने की अनुमति देती है। किसी बिंदु पर, स्प्रेडशीट से डेटा निकालने के लिए पार्सर को कम से कम एक XML फ़ाइल को पार्स करने की आवश्यकता होगी।
इसका परीक्षण करने का एकमात्र तरीका एक **Microsoft Office फ़ाइल उत्पन्न करना है जिसमें एक XXE पेलोड होता है**, तो चलिए ऐसा करते हैं। पहले, अपने दस्तावेज़ को अनज़िप करने के लिए एक खाली निर्देशिका बनाएं, और इसे अनज़िप करें!
अपने पसंदीदा पाठ संपादक (विम) में `./unzipped/word/document.xml` खोलें और **अपने पसंदीदा XXE पेलोड** को XML में संपादित करें। मैं पहली चीज़ जो मैं करता हूँ वह HTTP अनुरोध होता है, जैसे इस प्रकार:
अब फ़ाइल को अपलोड करें अपने (आशा है) संकटग्रस्त वेब एप्लिकेशन पर और अपने बर्प कॉलेबोरेटर लॉग में एक अनुरोध के लिए हैकिंग देवताओं के लिए प्रार्थना करें।
`jar` प्रोटोकॉल केवल **जावा एप्लिकेशन** पर उपलब्ध है। इसकी मदद से एक **PKZIP** फ़ाइल (`.zip`, `.jar`, ...) के भीतर फ़ाइलों तक पहुंच संभव होती है और यह स्थानीय और दूरस्थ फ़ाइलों के लिए काम करता है:
एक्सेस करने के लिए PKZIP फ़ाइलों के अंदर फ़ाइलों तक पहुंचना **XXE का दुरुपयोग करने के लिए बहुत उपयोगी है।** [इस खंड की जांच करें ताकि आप सिस्टम DTD फ़ाइलों का दुरुपयोग कैसे कर सकते हैं](xxe-xee-xml-external-entity.md#error-based-system-dtd)।
ध्यान दें कि दूसरे चरण में फ़्लो को रोकना संभव है। यह चाल होने पर कनेक्शन को कभी बंद न करें। [यह उपकरण उपयोगी हो सकते हैं](https://github.com/GoSecure/xxe-workshop/tree/master/24\_write\_xxe/solution): एक पायथन में `slow_http_server.py` और एक जावा में `slowserver.jar`।
जब सर्वर ने आपकी फ़ाइल को डाउनलोड कर लिया हो, तो आपको उसकी स्थान पता लगाने की आवश्यकता होती है जहां आपकी फ़ाइल संग्रहीत हुई है। यह यादृच्छिक होने के कारण, फ़ाइल पथ पहले से पूर्वानुमान नहीं किया जा सकता है।
एक अस्थायी निर्देशिका में फ़ाइलें लिखने से एक और संकट को बढ़ाने में मदद मिल सकती है जो एक पथ ट्रावर्सल (जैसे स्थानीय फ़ाइल शामिल करें, टेम्पलेट इंजेक्शन, XSLT RCE, डेसीरियलाइज़ेशन, आदि) को बढ़ा सकती है।
यामल हमला एक अद्यतनीय यामल फ़ाइल में एक विशेष यामल दिए जाने के माध्यम से एक आक्रमण है। इस उदाहरण में, हम एक `os.system` कॉल करके "Yaml Attack" शब्दों को छाप रहे हैं।
कुछ ऐप्लिकेशन **ग्राहक-प्रस्तुत डेटा प्राप्त करते हैं, इसे सर्वर-साइड पर एक XML दस्तावेज़ में सम्मिलित करते हैं और फिर दस्तावेज़ को पार्स करते हैं**। इसका एक उदाहरण यह होता है जब ग्राहक-प्रस्तुत डेटा को **बैकएंड SOAP अनुरोध** में रखा जाता है, जिसे फिर बैकएंड SOAP सेवा द्वारा प्रोसेस किया जाता है।
इस स्थिति में, आप एक क्लासिक XXE हमला नहीं कर सकते हैं, क्योंकि **आप पूरे XML** दस्तावेज़ को नियंत्रित नहीं करते हैं और इसलिए एक `DOCTYPE` तत्व को परिभाषित या संशोधित नहीं कर सकते हैं। हालांकि, आप `XInclude` का उपयोग कर सकते हैं। `XInclude` XML निर्देशिका का एक हिस्सा है जो एक XML दस्तावेज़ को उप-दस्तावेज़ों से बनाने की अनुमति देता है। आप किसी भी डेटा मान में `XInclude` हमला रख सकते हैं, इसलिए हमला केवल उन स्थितियों में किया जा सकता है जहां आप केवल एक आइटम डेटा को नियंत्रित करते हैं जो सर्वर-साइड XML दस्तावेज़ में रखा जाता है।
कुछ ऐप्लिकेशन उपयोगकर्ताओं को फ़ाइलें अपलोड करने की अनुमति देती हैं जो फिर सर्वर-साइड प्रोसेस की जाती हैं। कुछ सामान्य फ़ाइल प्रारूप XML का उपयोग करते हैं या XML उपघटकों को शामिल करते हैं। XML आधारित प्रारूपों के उदाहरण हैं डॉक्स जैसे कार्यालय दस्तावेज़ प्रारूप और एसवीजी जैसे छवि प्रारूप।
उदाहरण के लिए, एक ऐप्लिकेशन उपयोगकर्ताओं को **छवियाँ अपलोड करने की अनुमति देती हैं**, और इन्हें अपलोड करने के बाद सर्वर पर प्रोसेस या सत्यापित करती हैं। हालांकि, यदि ऐप्लिकेशन को PNG या JPEG जैसे प्रारूप प्राप्त करने की उम्मीद होती है, तो **छवि प्रसंस्करण पुस्तकालय जो उपयोग की जा रही है, एसवीजी छवियों का समर्थन कर सकती हैं**। एसवीजी प्रारूप XML का उपयोग करता है, इसलिए एक हमलावर एक विक्षिप्त एसवीजी छवि सबमिट कर सकता हैं और इस तरह XXE संबंधित सुरक्षा के लिए छिपी हुई हमला सतह तक पहुंच सकता हैं।
**नोट: फ़ाइल के पहले पंक्ति या नतीजे की निष्पादन की पंक्ति निर्मित छवि के अंदर दिखाई देगी। इसलिए आपको छवि एसवीजी द्वारा बनाई गई तक पहुंचने की क्षमता होनी चाहिए।**
यदि एक POST अनुरोध XML प्रारूप में डेटा स्वीकार करता है, तो आप उस अनुरोध में एक XXE को शोषण करने का प्रयास कर सकते हैं। उदाहरण के लिए, यदि एक साधारण अनुरोध में निम्नलिखित शामिल होता है:
अनुरोध को बदलने के लिए आप एक बर्प एक्सटेंशन उपयोग कर सकते हैं जिसका नाम है "Content Type Converter"। [यहां](https://exploitstube.com/xxe-for-fun-and-profit-converting-json-request-to-xml.html) आप इस उदाहरण को देख सकते हैं:
आप यहां \[**"Encode Recipe**" of cyberchef here ]\(\[[https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7) %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4)to]\([https://gchq.github.io/CyberChef/#recipe=Encode\_text%28'UTF-7 %2865000%29'%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to](https://gchq.github.io/CyberChef/#recipe=Encode\_text%28%27UTF-7%20%2865000%29%27%29\&input=PCFET0NUWVBFIGZvbyBbPCFFTlRJVFkgZXhhbXBsZSBTWVNURU0gIi9ldGMvcGFzc3dkIj4gXT4KPHN0b2NrQ2hlY2s%2BPHByb2R1Y3RJZD4mZXhhbXBsZTs8L3Byb2R1Y3RJZD48c3RvcmVJZD4xPC9zdG9yZUlkPjwvc3RvY2tDaGVjaz4%29to)) UTF-7 में बदलने के लिए उपयोग कर सकते हैं।
यदि वेब PHP का उपयोग कर रहा है, तो `file:/` की बजाय आप **php wrappers**`php://filter/convert.base64-encode/resource=` का उपयोग करके **आंतरिक फ़ाइलों तक पहुंच सकते हैं**।
[**https://github.com/Ambrotd/XXE-Notes**](https://github.com/Ambrotd/XXE-Notes) से ट्रिक\
आप **एक एंटिटी के भीतर एक एंटिटी** बना सकते हैं, इसे **HTML entities** के साथ एनकोड करें और फिर इसे **एक DTD लोड करने के लिए कॉल** करें।
ध्यान दें कि उपयोग किए जाने वाले **HTML Entities** को **संख्यात्मक** होना चाहिए (जैसे \[इस उदाहरण में]\([https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,'Numeric entities'%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B)\\](https://gchq.github.io/CyberChef/#recipe=To\_HTML\_Entity%28true,%27Numeric%20entities%27%29\&input=PCFFTlRJVFkgJSBkdGQgU1lTVEVNICJodHRwOi8vMTcyLjE3LjAuMTo3ODc4L2J5cGFzczIuZHRkIiA%2B\)%5C))।
एक्सटर्नल एंटिटी एक्सप्लोइटेशन (XEE) एक वेब अनुप्रयोग के लिए एक सुरक्षा गड़बड़ी है जो SOAP (Simple Object Access Protocol) पर आधारित होती है। XEE हमेशा XML पार्सिंग के दौरान होती है और इसमें एक अनुप्रयोग को ध्वज फ़ाइल या अन्य बाहरी संसाधनों को पढ़ने और लिखने की अनुमति होती है।
एक XEE हमला करने के लिए, हमलावर एक अनुप्रयोग में XML डेटा को इंजेक्ट करता है जिसमें एक एंटिटी डेक्लेरेशन होती है। इस डेक्लेरेशन में, एक एंटिटी नाम और उसके साथ जुड़े संदर्भ का उपयोग करके एक बाहरी एंटिटी फ़ाइल को लोड किया जा सकता है। इस तरह, हमलावर अनुप्रयोग के संदर्भ में बाहरी संसाधनों को पढ़ने और लिखने की अनुमति प्राप्त करता है।
एक XEE हमला के द्वारा, हमलावर गोपनीय डेटा को पढ़ सकता है, अनुप्रयोग को अवांछित तरीके से बंद कर सकता है, और अनुप्रयोग के लिए अनुमति नहीं होने वाले संसाधनों को अपने नियंत्रण में ले सकता है।
एक XEE हमला को शुरू करने के लिए, हमलावर को अनुप्रयोग के संदर्भ में एक एंटिटी डेक्लेरेशन इंजेक्ट करनी होती है। इसके बाद, वे बाहरी संसाधनों को पढ़ने और लिखने के लिए उपयोग किए जाने वाले संदर्भों को उपयोग करके एंटिटी फ़ाइल को लोड कर सकते हैं। इसके परिणामस्वरूप, हमलावर अनुप्रयोग के संदर्भ में बाहरी संसाधनों को पढ़ने और लिखने की अनुमति प्राप्त करता है।
यह खंड [https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe](https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe) से लिया गया है।
[Wikipedia](https://en.wikipedia.org/wiki/XLIFF) के अनुसार:
> XLIFF (XML Localization Interchange File Format) एक XML-आधारित बाइटेक्स्ट प्रारूप है जो स्थानीयकरण प्रक्रिया के दौरान और उपकरणों के बीच स्थानीयकरण डेटा को पास करने के तरीके को मानकीकृत करने के लिए बनाया गया है और CAT उपकरण विनिमय के लिए एक सामान्य प्रारूप है।
{"status":500,"error":"Internal Server Error","message":"Error systemId: http://redacted.burpcollaborator.net/?xxe_test; The markup declarations contained or pointed to by the document type declaration must be well-formed."}
बर्प कॉलेबोरेटर द्वारा प्रदर्शित उपयोगकर्ता एजेंट के आधार पर, ऐसा लगता है कि यह **जावा 1.8** का उपयोग कर रहा है। इस जावा संस्करण के एक समस्या में से एक है कि हम **आउट ऑफ बैंड तकनीक का उपयोग करके `/etc/passwd` जैसे `नई पंक्ति` वाले फ़ाइलें प्राप्त नहीं कर सकते हैं**।
एक आम टेक्निक है जिसका उपयोग एक एक्सएमएल द्वारा किया जाता है जिसमें बाहरी संबंधित इकाई (ईई) शामिल होती है। यह टेक्निक एक अवधारणा का उपयोग करती है जिसे "बाहरी संबंधित इकाई" (ईई) कहा जाता है, जो एक एक्सएमएल दस्तावेज़ के भीतर संगठित डेटा को लोड करने की क्षमता प्रदान करती है। इस तकनीक का उपयोग करके, हैकर एक बाहरी एक्सएमएल फ़ाइल को लोड करके उसमें संगठित डेटा को पढ़ सकता है। यह उन ऐप्लिकेशनों में एक सुरक्षा समस्या उत्पन्न कर सकता है जो एक्सएमएल दस्तावेज़ को पार्स करते हैं और बाहरी ईई को स्वीकार करते हैं।
बाहरी ईई का उपयोग करके, हैकर एक्सएमएल दस्तावेज़ के भीतर संगठित डेटा को पढ़ सकता है, जिसमें सामान्यतः संग्रहीत डेटा, फ़ाइलों के नाम, फ़ाइलों की सामग्री, डेटाबेस कनेक्शन विवरण और अन्य संग्रहीत जानकारी शामिल हो सकती है। यह जानकारी हैकर को अनुचित रूप से उपयोग करने की अनुमति देती है और उन्हें अनधिकृत उपयोगकर्ताओं के लिए उपयोगी हो सकती है।
इस तकनीक का उपयोग करने के लिए, हैकर एक एक्सएमएल दस्तावेज़ को तैयार करता है जिसमें बाहरी ईई को संदर्भित किया जाता है। फिर, वे इस दस्तावेज़ को उस ऐप्लिकेशन में सबमिट करते हैं जो एक्सएमएल दस्तावेज़ को पार्स करता है और बाहरी ईई को स्वीकार करता है। जब ऐप्लिकेशन बाहरी ईई को स्वीकार करता है, तो वह बाहरी एक्सएमएल फ़ाइल को लोड करता है और उसमें संगठित डेटा को पढ़ता है।
इस तकनीक का उपयोग करने के लिए, एक्सएमएल दस्तावेज़ को तैयार करने के लिए एक एक्सएमएल एडिटर का उपयोग किया जा सकता है, जैसे कि एक्सएमएल स्पाइडर, एक्सएमएल प्रो या एक्सएमएल एडिटर। इन एडिटर का उपयोग करके, एक्सएमएल दस्तावेज़ को तैयार करें और बाहरी ईई को संदर्भित करें। फिर, ऐप्लिकेशन में इस दस्तावेज़ को सबमिट करें और बाहरी एक्सएमएल फ़ाइल को लोड करें और संगठित डेटा पढ़ें।
XMLDecoder एक जावा कक्षा है जो XML संदेश पर आधारित ऑब्जेक्ट बनाती है। यदि एक दुष्ट उपयोगकर्ता को एक अनुरोध में आवश्यक डेटा का उपयोग करने के लिए एक अनुप्रयोग को प्राप्त कर सकता है, तो वह सर्वर पर कोड निष्पादन प्राप्त करेगा।
ProcessBuilder एक जावा कक्षा है जो एक नया प्रक्रिया शुरू करने के लिए उपयोग की जाती है। यह एक विशेषता है जो एक निर्दिष्ट आरएनएमएल (यूआरएल) पर एक निर्दिष्ट एक्सएमएल (एक्सईई) दस्तावेज़ को लोड करने की क्षमता प्रदान करती है। इसका उपयोग करके, आप एक एक्सएमएल एंटिटी को एक प्रक्रिया में लोड कर सकते हैं और उसे प्रोसेस कर सकते हैं। यह एक उच्च स्तरीय तकनीक है जो एक्सएमएल बाहरी इकाई (एक्सईई) हमलों के लिए उपयोग की जा सकती है।
एक उदाहरण के रूप में, आप निम्नलिखित कोड का उपयोग करके एक एक्सएमएल एंटिटी को प्रोसेस कर सकते हैं:
ProcessBuilder processBuilder = new ProcessBuilder("curl", "-d", xmlPayload, "http://example.com/api");
Process process = processBuilder.start();
```
इस उदाहरण में, हमने एक एक्सएमएल एंटिटी को बनाया है जो एक बाहरी डीटीडी (डीटीडी) फ़ाइल को लोड करता है। यह फ़ाइल एक एक्सएमएल एंटिटी को परिभाषित करती है जो हमारे निर्दिष्ट यूआरएल पर एक एक्सएमएल दस्तावेज़ को लोड करता है। इसके बाद, हमने `curl` कमांड का उपयोग करके एक प्रक्रिया शुरू की है जिसमें हमने एक डेटा बॉडी के रूप में एक्सएमएल पेलोड को भेजा है। इस प्रक्रिया के माध्यम से, हम एक एक्सएमएल एंटिटी को प्रोसेस कर सकते हैं और उसे अपनी इच्छानुसार उपयोग कर सकते हैं।
अपने बाहरी DTD का उपयोग करके HTTP के माध्यम से जानकारी निकालें: [https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/](https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/)\
* क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी कंपनी को **HackTricks** में विज्ञापित करना चाहते हैं? या क्या आप **PEASS के नवीनतम संस्करण का उपयोग करना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं**? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
* खोजें [**The PEASS Family**](https://opensea.io/collection/the-peass-family), हमारा विशेष [**NFT**](https://opensea.io/collection/the-peass-family) संग्रह
* प्राप्त करें [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या मुझे **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)** का पालन करें।**
* **अपने हैकिंग ट्रिक्स साझा करें, PRs के माध्यम से** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **को सबमिट करके।**