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