Oracle injection
इस पोस्ट को https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/ से हटाए गए पोस्ट की वेब आर्काइव कॉपी सर्व करें।
SSRF
Oracle का उपयोग Out of Band HTTP और DNS अनुरोध करने के लिए अच्छी तरह से प्रलेखित है लेकिन SQL डेटा को एक्सफिल्ट्रेट करने के एक साधन के रूप में। हम हमेशा इन तकनीकों/फंक्शंस को अन्य SSRF/XSPA करने के लिए संशोधित कर सकते हैं।
Oracle स्थापित करना वास्तव में दर्दनाक हो सकता है, विशेष रूप से यदि आप कमांड आजमाने के लिए एक त्वरित उदाहरण सेट करना चाहते हैं। मेरे दोस्त और सहयोगी Appsecco, Abhisek Datta, ने मुझे https://github.com/MaksymBilenko/docker-oracle-12c की ओर इशारा किया जिसने मुझे एक t2.large AWS Ubuntu मशीन और Docker पर एक उदाहरण सेट करने की अनुमति दी।
मैंने --network="host"
फ्लैग के साथ docker कमांड चलाया ताकि मैं इस ब्लॉग पोस्ट के दौरान Oracle को पूर्ण नेटवर्क एक्सेस के साथ एक मूल स्थापना के रूप में अनुकरण कर सकूं।
Oracle पैकेज जो URL या Hostname/Port Number विनिर्देशन का समर्थन करते हैं
किसी भी पैकेज और कार्यों को खोजने के लिए जो एक होस्ट और पोर्ट विनिर्देशन का समर्थन करते हैं, मैंने Oracle Database Online Documentation पर एक Google खोज की। विशेष रूप से,
The search returned the following results (not all can be used to perform outbound network)
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
जैसे पैकेजों को छोड़ देता है (जो एक होस्टनाम और पोर्ट नंबर पास करने की अनुमति देता है) क्योंकि डॉक्यूमेंटेशन पृष्ठ आपको एक अलग स्थान पर ले जाता है। इसलिए, अन्य Oracle पैकेज हो सकते हैं जिन्हें आउटबाउंड अनुरोध करने के लिए दुरुपयोग किया जा सकता है जिन्हें मैंने छोड़ दिया हो सकता है।
किसी भी मामले में, आइए उन कुछ पैकेजों पर नज़र डालते हैं जिन्हें हमने खोजा और ऊपर सूचीबद्ध किया है।
DBMS_LDAP.INIT
DBMS_LDAP
पैकेज LDAP सर्वरों से डेटा तक पहुंच की अनुमति देता है। init()
फ़ंक्शन एक LDAP सर्वर के साथ एक सत्र को प्रारंभ करता है और एक होस्टनाम और पोर्ट नंबर को एक तर्क के रूप में लेता है।
इस फ़ंक्शन को पहले DNS के माध्यम से डेटा के निष्कर्षण को दिखाने के लिए दस्तावेजित किया गया है, जैसे नीचे
हालांकि, यह देखते हुए कि यह फ़ंक्शन एक होस्टनाम और एक पोर्ट नंबर को तर्क के रूप में स्वीकार करता है, आप इसका उपयोग पोर्ट स्कैनर की तरह भी कर सकते हैं।
यहाँ कुछ उदाहरण हैं
A ORA-31203: DBMS_LDAP: PL/SQL - Init Failed.
यह दिखाता है कि पोर्ट बंद है जबकि एक सत्र मान पोर्ट को खुला दिखाता है।
UTL_SMTP
UTL_SMTP
पैकेज SMTP के माध्यम से ई-मेल भेजने के लिए डिज़ाइन किया गया है। Oracle दस्तावेज़ साइट पर प्रदान किया गया उदाहरण दिखाता है कि आप इस पैकेज का उपयोग करके ई-मेल कैसे भेज सकते हैं। हमारे लिए, हालांकि, दिलचस्प बात यह है कि एक होस्ट और पोर्ट विनिर्देशन प्रदान करने की क्षमता है।
एक कच्चा उदाहरण नीचे UTL_SMTP.OPEN_CONNECTION
फ़ंक्शन के साथ दिखाया गया है, जिसमें 2 सेकंड का टाइमआउट है।
A ORA-29276: transfer timeout
यह दिखाता है कि पोर्ट खुला है लेकिन कोई SMTP कनेक्शन स्थापित नहीं हुआ जबकि एक ORA-29278: SMTP transient error: 421 Service not available
यह दिखाता है कि पोर्ट बंद है।
UTL_TCP
UTL_TCP
पैकेज और इसके प्रक्रियाएँ और फ़ंक्शन सेवाओं के साथ TCP/IP आधारित संचार की अनुमति देते हैं। यदि किसी विशेष सेवा के लिए प्रोग्राम किया गया है, तो यह पैकेज नेटवर्क में प्रवेश करने का एक आसान तरीका बन सकता है या पूर्ण सर्वर साइड अनुरोध कर सकता है क्योंकि TCP/IP कनेक्शन के सभी पहलुओं को नियंत्रित किया जा सकता है।
उदाहरण Oracle दस्तावेज़ साइट पर दिखाता है कि आप इस पैकेज का उपयोग करके एक कच्चा TCP कनेक्शन कैसे बना सकते हैं ताकि एक वेब पृष्ठ को प्राप्त किया जा सके। हम इसे थोड़ा और सरल बना सकते हैं और इसका उपयोग मेटाडेटा उदाहरण के लिए या किसी मनमाने TCP/IP सेवा के लिए अनुरोध करने के लिए कर सकते हैं।
दिलचस्प बात यह है कि कच्चे TCP अनुरोध बनाने की क्षमता के कारण, इस पैकेज का उपयोग सभी क्लाउड प्रदाताओं के Instance मेटा-डेटा सेवा को क्वेरी करने के लिए भी किया जा सकता है क्योंकि विधि प्रकार और अतिरिक्त हेडर सभी TCP अनुरोध के भीतर पास किए जा सकते हैं।
UTL_HTTP और वेब अनुरोध
शायद हर Out of Band Oracle SQL Injection ट्यूटोरियल में सबसे सामान्य और व्यापक रूप से प्रलेखित तकनीक UTL_HTTP
पैकेज है। इस पैकेज को प्रलेखन द्वारा इस प्रकार परिभाषित किया गया है - UTL_HTTP पैकेज SQL और PL/SQL से हाइपरटेक्स्ट ट्रांसफर प्रोटोकॉल (HTTP) कॉलआउट करता है। आप इसका उपयोग HTTP के माध्यम से इंटरनेट पर डेटा तक पहुँचने के लिए कर सकते हैं।
आप इसके साथ कुछ मौलिक पोर्ट स्कैनिंग करने के लिए भी इसका उपयोग कर सकते हैं, जैसे कि प्रश्नों के साथ
A ORA-12541: TNS:no listener
या TNS:operation timed out
यह संकेत है कि TCP पोर्ट बंद है, जबकि ORA-29263: HTTP protocol error
या डेटा यह संकेत है कि पोर्ट खुला है।
एक और पैकेज जिसका मैंने अतीत में विभिन्न सफलताओं के साथ उपयोग किया है वह है GETCLOB()
विधि HTTPURITYPE
Oracle अमूर्त प्रकार की जो आपको एक URL के साथ इंटरैक्ट करने की अनुमति देती है और HTTP प्रोटोकॉल के लिए समर्थन प्रदान करती है। GETCLOB()
विधि का उपयोग एक URL से GET प्रतिक्रिया को CLOB डेटा प्रकार के रूप में लाने के लिए किया जाता है। [select HTTPURITYPE('http://169.254.169.254/latest/meta-data/instance-id').getclob() from dual;
Last updated