Oracle injection
इस पोस्ट को https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/ से हटाए गए पोस्ट की वे बैक मशीन कॉपी सर्व करें।
SSRF
ओरेकल का उपयोग Out of Band HTTP और DNS अनुरोध करने के लिए अच्छी तरह दस्तावेजीकृत है, लेकिन इंजेक्शन में SQL डेटा को बाहर निकालने के एक साधन के रूप में। हम हमेशा इन तकनीकों/फ़ंक्शनों को बदल सकते हैं ताकि अन्य SSRF/XSPA किया जा सके।
ओरेकल को इंस्टॉल करना वास्तव में बहुत पीड़ादायक हो सकता है, खासकर अगर आप त्वरित उदाहरण सेट करना चाहते हैं। मेरे दोस्त और सहकर्मी Appsecco पर, Abhisek Datta, ने मुझे https://github.com/MaksymBilenko/docker-oracle-12c पर पहुंचाया जिसने मुझे एक t2.large AWS Ubuntu मशीन और डॉकर पर एक उदाहरण सेटअप करने की अनुमति दी।
मैंने --network="host"
फ़्लैग के साथ डॉकर कमांड चलाई ताकि मैं ओरेकल को एक स्थानिक स्थापना के रूप में पूर्ण नेटवर्क एक्सेस के साथ मिमिक कर सकूं, इस ब्लॉगपोस्ट के दौरान।
उन Oracle पैकेजेस को जो URL या Hostname/Port Number निर्दिष्टि का समर्थन करते हैं
किसी भी पैकेज और फ़ंक्शन को खोजने के लिए जो होस्ट और पोर्ट निर्दिष्टि का समर्थन करते हैं, मैंने Oracle डेटाबेस ऑनलाइन दस्तावेज़ीकरण पर गूगल खोज चलाई। विशेष रूप से,
खोज ने निम्नलिखित परिणाम वापस किए (बाहरी नेटवर्क कार्रवाई करने के लिए सभी का उपयोग नहीं किया जा सकता)
DBMS_NETWORK_ACL_ADMIN
UTL_SMTP
DBMS_XDB
DBMS_SCHEDULER
DBMS_XDB_CONFIG
DBMS_AQ
UTL_MAIL
DBMS_AQELM
DBMS_NETWORK_ACL_UTILITY
DBMS_MGD_ID_UTL
UTL_TCP
DBMS_MGWADM
DBMS_STREAMS_ADM
UTL_HTTP
यह क्रूड खोज स्पष्ट रूप से DBMS_LDAP
जैसे पैकेजों को छोड़ देता है (जो एक होस्टनाम और पोर्ट नंबर पास करने की अनुमति देता है) क्योंकि दस्तावेज़ पृष्ठ आपको बस एक विभिन्न स्थान पर ले जाता है। इसलिए, ऐसे अन्य ओरेकल पैकेज हो सकते हैं जिनका उपयोग बाहरी अनुरोध करने के लिए किया जा सकता है जिन्हें मैंने छूटा सकता है।
हर गति, चलो हम कुछ पैकेजों पर एक नज़र डालते हैं जिन्हें हमने खोजा और ऊपर सूचीबद्ध किया है।
DBMS_LDAP.INIT
DBMS_LDAP
पैकेज LDAP सर्वर से डेटा तक पहुंचने की अनुमति देता है। init()
फ़ंक्शन एक LDAP सर्वर के साथ एक सत्र को प्रारंभ करता है और एक होस्टनाम और पोर्ट नंबर को एक तर्क के रूप में लेता है।
इस फ़ंक्शन को पहले से ही डोक्यूमेंट किया गया है ताकि डेटा को DNS के माध्यम से बाहर ले जाया जा सके, जैसे की नीचे दिखाया गया है
हालांकि, यह फ़ंक्शन एक होस्टनाम और एक पोर्ट नंबर को तर्क के रूप में स्वीकार करता है, आप इसका उपयोग पोर्ट स्कैनर की तरह करने के लिए भी कर सकते हैं।
यहाँ कुछ उदाहरण हैं:
ORA-31203: DBMS_LDAP: PL/SQL - प्रारंभ विफल हुआ।
दिखाता है कि पोर्ट बंद है जबकि एक सत्र मान खुले पोर्ट की ओर पोइंट करता है।
UTL_SMTP
UTL_SMTP
पैकेज को SMTP के माध्यम से ई-मेल भेजने के लिए डिज़ाइन किया गया है। ओरेकल दस्तावेज़ साइट पर दिए गए उदाहरण में दिखाया गया है कि आप इस पैकेज का उपयोग कैसे कर सकते हैं। हालांकि, हमारे लिए, दिलचस्प बात है होस्ट और पोर्ट विनिर्देश करने की क्षमता के साथ।
एक कच्चा उदाहरण नीचे दिखाया गया है UTL_SMTP.OPEN_CONNECTION
फ़ंक्शन के साथ, जिसमें 2 सेकंड का समय सीमा है।
UTL_TCP
UTL_TCP
पैकेज और इसकी प्रक्रियाएँ और फ़ंक्शन सेवाओं के साथ TCP/IP आधारित संचार की अनुमति देते हैं। यदि किसी विशेष सेवा के लिए प्रोग्राम किया गया है, तो यह पैकेज आसानी से नेटवर्क में प्रवेश के लिए एक तरीका बन सकता है या पूर्ण सर्वर साइड अनुरोध कर सकता है क्योंकि एक TCP/IP कनेक्शन के सभी पहलुओं को नियंत्रित किया जा सकता है।
उदाहरण ऑरेकल दस्तावेज़ साइट पर दिखाया गया है कि आप इस पैकेज का उपयोग कैसे कर सकते हैं ताकि आप एक रॉ TCP कनेक्शन बना सकें और एक वेब पेज ला सकें। हम इसे और भी सरल बना सकते हैं और उसे मिटाकर उदाहरण के लिए मेटाडेटा इंस्टेंस या किसी अन्य TCP/IP सेवा के लिए अनुरोध करने के लिए उपयोग कर सकते हैं।
UTL_HTTP और वेब अनुरोध
दिलचस्पी से, क्योंकि रॉ TCP अनुरोधों को तैयार करने की क्षमता है, इस पैकेज का उपयोग सभी क्लाउड प्रदाताओं की इंस्टेंस मेटा-डेटा सेवा का पूछताछ करने के लिए भी किया जा सकता है क्योंकि विधि प्रकार और अतिरिक्त हेडर सभी TCP अनुरोध के भीतर पारित किए जा सकते हैं।
आप इसका उपयोग करके कुछ प्राथमिक पोर्ट स्कैनिंग भी कर सकते हैं जैसे कि क्वेरीज़ के साथ
ORA-12541: TNS:no listener
या TNS:operation timed out
एक संकेत है कि TCP पोर्ट बंद है, जबकि ORA-29263: HTTP protocol error
या डेटा एक संकेत है कि पोर्ट खुला है।
मैंने पिछले में एक अन्य पैकेज का उपयोग किया है जिसमें विभिन्न सफलता थी, वह है GETCLOB()
मेथड का उपयोग करना HTTPURITYPE
ओरेकल अबस्ट्रैक्ट टाइप जो आपको एक URL के साथ बातचीत करने और HTTP प्रोटोकॉल के लिए समर्थन प्रदान करता है। GETCLOB()
मेथड का उपयोग किया जाता है एक URL से GET प्रतिक्रिया को एक CLOB डेटा प्रकार के रूप में प्राप्त करने के लिए। [select HTTPURITYPE('http://169.254.169.254/latest/meta-data/instance-id').getclob() from dual;
Last updated