Exploiting Content Providers
Exploiting Content Providers
Intro
Podaci se dostavljaju iz jedne aplikacije u druge na zahtev putem komponente poznate kao content provider. Ovi zahtevi se upravljaju putem metoda ContentResolver class. 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:
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
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 Drozera, gde su ključne informacije bile locirane u /Keys direktorijumu.
Drozer može pogoditi i isprobati nekoliko URI-ja:
Trebalo bi da proverite ContentProvider kod da biste tražili upite:
Takođe, ako ne možete da pronađete 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 joj 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, pazite takođe na funkcije nazvane kao: query, insert, update i delete:
Jer ćete moći da ih pozovete
Upit sadržaja
Insert content
Upitom u bazu podataka saznaćete ime kolona, zatim, moći ćete da ubacite podatke u DB:
Napomena da u insert i update možete koristiti --string da označite string, --double da označite double, --float, --integer, --long, --short, --boolean
Update content
Poznavajući ime kolona takođe možete modifikovati unose:
Delete content
SQL Injection
Jednostavno je testirati za SQL injection (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 injections:
Automatsko otkrivanje SQLInjection od strane Drozera
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
Putanja Prelaz
Ako možete pristupiti datotekama, možete pokušati da iskoristite Putanju Prelaz (u ovom slučaju to nije neophodno, ali možete pokušati da koristite "../" i slične trikove).
Automatsko otkrivanje prolaza putem Drozera
Reference
Last updated