Exploiting Content Providers
Exploiting Content Providers
Intro
डेटा एक एप्लिकेशन से अन्य एप्लिकेशनों को अनुरोध पर एक घटक के माध्यम से संपर्क प्रदाता के रूप में प्रदान किया जाता है। इन अनुरोधों का प्रबंधन ContentResolver class विधियों के माध्यम से किया जाता है। संपर्क प्रदाता अपने डेटा को विभिन्न स्थानों पर संग्रहीत कर सकते हैं, जैसे कि डेटाबेस, फाइलें, या एक नेटवर्क पर।
Manifest.xml फ़ाइल में, संपर्क प्रदाता की घोषणा आवश्यक है। उदाहरण के लिए:
content://com.mwr.example.sieve.DBContentProvider/Keys
तक पहुँचने के लिए READ_KEYS
अनुमति आवश्यक है। यह ध्यान देने योग्य है कि /Keys/
पथ निम्नलिखित अनुभाग में पहुँच योग्य है, जो डेवलपर की एक गलती के कारण सुरक्षित नहीं है, जिसने /Keys
को सुरक्षित किया लेकिन /Keys/
को घोषित किया।
शायद आप निजी डेटा तक पहुँच सकते हैं या कुछ कमजोरियों (SQL Injection या Path Traversal) का लाभ उठा सकते हैं।
exposed content providers से जानकारी प्राप्त करें
यह संभव है कि DBContentProvider तक पहुँचने के लिए URI को “content://” से शुरू किया जाए। यह दृष्टिकोण Drozer का उपयोग करने से प्राप्त अंतर्दृष्टियों पर आधारित है, जहाँ महत्वपूर्ण जानकारी /Keys निर्देशिका में स्थित थी।
Drozer कई URIs का अनुमान लगा सकता है और कोशिश कर सकता है:
आपको ContentProvider कोड की जांच भी करनी चाहिए ताकि आप क्वेरीज़ खोज सकें:
इसके अलावा, यदि आप पूर्ण क्वेरीज़ नहीं ढूंढ पा रहे हैं, तो आप जांच सकते हैं कि ContentProvider द्वारा कौन से नाम घोषित किए गए हैं onCreate
विधि पर:
क्वेरी इस तरह होगी: content://name.of.package.class/declared_name
डेटाबेस-समर्थित कंटेंट प्रोवाइडर
संभवतः अधिकांश Content Providers का उपयोग डेटाबेस के लिए इंटरफेस के रूप में किया जाता है। इसलिए, यदि आप इसे एक्सेस कर सकते हैं, तो आप जानकारी निकालने, अपडेट करने, डालने और हटाने में सक्षम हो सकते हैं। जांचें कि क्या आप संवेदनशील जानकारी तक पहुँच सकते हैं या इसे अधिकार प्राधिकरण तंत्र को बायपास करने के लिए बदलने की कोशिश करें।
Content Provider के कोड की जांच करते समय देखें कि क्या फंक्शंस इस तरह के नाम से हैं: query, insert, update और delete:
क्योंकि आप उन्हें कॉल करने में सक्षम होंगे
सामग्री क्वेरी
Insert content
डेटाबेस को क्वेरी करके आप कॉलम के नाम जानेंगे, फिर, आप DB में डेटा डालने में सक्षम होंगे:
ध्यान दें कि इनसर्ट और अपडेट में आप --string का उपयोग स्ट्रिंग को इंगित करने के लिए, --double को डबल को इंगित करने के लिए, --float, --integer, --long, --short, --boolean का उपयोग कर सकते हैं
Update content
कॉलम के नाम को जानकर आप एंट्रीज़ को भी संशोधित कर सकते हैं:
Delete content
SQL Injection
SQL इंजेक्शन (SQLite) के लिए परीक्षण करना सरल है प्रोजेक्शन और चयन फ़ील्ड्स को कंटेंट प्रोवाइडर को पास करके। कंटेंट प्रोवाइडर को क्वेरी करते समय जानकारी खोजने के लिए 2 दिलचस्प तर्क हैं: --selection और --projection:
आप SQL इंजेक्शन के लिए परीक्षण करने के लिए इस पैरामीटर्स का दुरुपयोग करने की कोशिश कर सकते हैं:
Drozer द्वारा स्वचालित SQLInjection खोज
फाइल सिस्टम-समर्थित सामग्री प्रदाता
सामग्री प्रदाता का उपयोग फाइलों तक पहुँचने के लिए भी किया जा सकता है:
पढ़ें फाइल
आप सामग्री प्रदाता से फाइलें पढ़ सकते हैं।
पथ यात्रा
यदि आप फ़ाइलों तक पहुँच सकते हैं, तो आप पथ यात्रा का दुरुपयोग करने की कोशिश कर सकते हैं (इस मामले में यह आवश्यक नहीं है लेकिन आप "../" और समान तरकीबों का उपयोग करने की कोशिश कर सकते हैं)।
Drozer द्वारा स्वचालित पथ यात्रा खोज
संदर्भ
Last updated