MySQL File priv to SSRF/RCE
यह https://ibreak.software/2020/06/using-sql-injection-to-perform-ssrf-xspa-attacks/ से MySQL/MariaDB/Percona तकनीकों का सारांश है.
SQL Functions के माध्यम से सर्वर-साइड रिक्वेस्ट फ़र्ज़री (SSRF)
SQL Out of Band डेटा निकालने के अन्वेषण में, LOAD_FILE()
फ़ंक्शन का उपयोग नेटवर्क रिक्वेस्ट प्रारंभ करने के लिए सामान्य रूप से किया जाता है। यह फ़ंक्शन, हालांकि, ऑपरेटिंग सिस्टम और डेटाबेस की स्टार्टअप कॉन्फ़िगरेशन के द्वारा प्रतिबंधित है।
secure_file_priv
ग्लोबल वेरिएबल, अगर असेट नहीं है, तो /var/lib/mysql-files/
पर डिफ़ॉल्ट होता है, जो इस निर्दिष्ट निर्देशिका तक की फ़ाइल पहुंच को सीमित करता है जब तक इसे खाली स्ट्रिंग (""
) पर सेट नहीं किया जाता। यह समायोजन डेटाबेस की कॉन्फ़िगरेशन फ़ाइल या स्टार्टअप पैरामीटर में परिवर्तन की आवश्यकता है।
यदि secure_file_priv
अक्षम है (""
), और यदि आवश्यक फ़ाइल और file_priv
अनुमतियाँ प्रदान की गई हैं, तो निर्दिष्ट निर्देशिका के बाहर की फ़ाइलें पढ़ी जा सकती हैं। फिर भी, इन फ़ंक्शनों को नेटवर्क कॉल करने की क्षमता ऑपरेटिंग सिस्टम पर अत्यधिक निर्भर है। Windows सिस्टमों पर, UNC पथों को नेटवर्क कॉल करना संभव है क्योंकि ऑपरेटिंग सिस्टम UNC नामकरण नियमों को समझता है, जो NTLMv2 हैशों की निकासी की ओर संभावित रूप से ले जा सकता है।
यह SSRF विधि TCP पोर्ट 445 तक सीमित है और पोर्ट नंबर संशोधन की अनुमति नहीं देती है, हालांकि इसका उपयोग पूर्ण पढ़ने की अनुमति वाले शेयरों तक पहुंचने के लिए किया जा सकता है और पिछले शोध में दिखाया गया है कि इसका उपयोग और हैश चोरी के लिए किया जा सकता है जिसका अधिक शोध किया जा सकता है।
उपयोगकर्ता परिभाषित फ़ंक्शनों (UDF) के माध्यम से दूरस्थ कोड निष्पादन (RCE)
MySQL डेटाबेस विदेशी लाइब्रेरी फ़ाइलों से उपयोगकर्ता परिभाषित फ़ंक्शन (UDF) का उपयोग प्रदान करते हैं। यदि ये लाइब्रेरी विशेष निर्दिष्ट निर्देशिकाओं या सिस्टम के $PATH
में पहुंचने योग्य हैं, तो वे MySQL के अंदर से आमंत्रित किए जा सकते हैं।
यह तकनीक नेटवर्क/HTTP रिक्वेस्ट का निष्पादन करने की अनुमति देती है एक UDF के माध्यम से, प्रदान की गई कई शर्तों के साथ, जिसमें @@plugin_dir
को लिखने की पहुंच, file_priv
को Y
पर सेट करना, और secure_file_priv
को अक्षम करना शामिल है।
उदाहरण के लिए, lib_mysqludf_sys
लाइब्रेरी या अन्य UDF लाइब्रेरी जो HTTP रिक्वेस्ट को संभालने की अनुमति देती है, SSRF करने के लिए लोड की जा सकती है। लाइब्रेरी को सर्वर पर स्थानांतरित किया जाना चाहिए, जो लाइब्रेरी की सामग्री को हेक्स या बेस64 इनकोडिंग के माध्यम से प्राप्त करके और फिर उचित निर्देशिका में लिखकर संभव है।
यदि @@plugin_dir
लिखने की योग्य नहीं है, खासकर MySQL संस्करण v5.0.67
से ऊपर के लिए, तो इस प्रक्रिया में विभिन्न पथों का उपयोग किया जाना चाहिए जो लिखने योग्य हों।
इन प्रक्रियाओं की स्वचालनीकरण को SQLMap जैसे उपकरण द्वारा सुविधाजनक बनाया जा सकता है, जो UDF इन्जेक्शन का समर्थन करता है, और ब्लाइंड SQL इंजेक्शन के लिए, आउटपुट पुनर्निर्देशन या DNS रिक्वेस्ट स्मगलिंग तकनीक का उपयोग किया जा सकता है।
Last updated