Exploiting Content Providers
Wykorzystywanie dostawców treści
Wprowadzenie
Dane są dostarczane z jednej aplikacji do innych na żądanie przez komponent znanym jako dostawca treści. Te żądania są obsługiwane za pomocą metod klasy ContentResolver. Dostawcy treści mogą przechowywać swoje dane w różnych lokalizacjach, takich jak baza danych, pliki lub przez sieć.
W pliku Manifest.xml konieczne jest zadeklarowanie dostawcy treści. Na przykład:
Aby uzyskać dostęp do content://com.mwr.example.sieve.DBContentProvider/Keys
, wymagane jest uprawnienie READ_KEYS
. Warto zauważyć, że ścieżka /Keys/
jest dostępna w następującej sekcji, która nie jest chroniona z powodu błędu programisty, który zabezpieczył /Keys
, ale zadeklarował /Keys/
.
Być może będziesz mógł uzyskać dostęp do prywatnych danych lub wykorzystać jakieś podatności (wstrzyknięcie SQL lub Traversal ścieżki).
Pobierz informacje z odsłoniętych dostawców treści
Możliwe jest złożenie w całość sposobu dotarcia do DBContentProvider poprzez rozpoczęcie URI od "content://". Ten podejście opiera się na wglądach uzyskanych podczas korzystania z Drozera, gdzie kluczowe informacje zostały zlokalizowane w katalogu /Keys.
Drozer może zgadywać i próbować kilku URI:
Należy również sprawdzić kod ContentProvidera w poszukiwaniu zapytań:
Jeśli nie można znaleźć pełnych zapytań, można sprawdzić, jakie nazwy są deklarowane przez ContentProvider w metodzie onCreate
:
Zapytanie będzie wyglądać tak: content://nazwa.pakietu.klasy/nazwa_zadeklarowana
Content Providery oparte na bazie danych
Prawdopodobnie większość Content Providerów jest używana jako interfejs dla bazy danych. Dlatego, jeśli uzyskasz do niej dostęp, będziesz mógł wydobywać, aktualizować, wstawiać i usuwać informacje. Sprawdź, czy możesz uzyskać dostęp do poufnych informacji lub spróbować je zmienić, aby obejść mechanizmy autoryzacji.
Podczas sprawdzania kodu Content Providera zwróć uwagę również na funkcje o nazwach: query, insert, update i delete:
Ponieważ będziesz mógł je wywołać
Zapytanie o zawartość
Wstawianie zawartości
Przeszukując bazę danych dowiesz się nazw kolumn, następnie będziesz mógł wstawić dane do bazy danych:
Zauważ, że podczas wstawiania i aktualizacji możesz użyć --string, aby wskazać ciąg znaków, --double, aby wskazać liczbę zmiennoprzecinkową, --float, --integer, --long, --short, --boolean
Aktualizacja zawartości
Znając nazwy kolumn, możesz również modyfikować wpisy:
Usuwanie zawartości
Wstrzykiwanie SQL
Łatwo przetestować wstrzykiwanie SQL (SQLite) manipulując projekcją i pola selekcji, które są przekazywane do dostawcy treści. Podczas zapytania dostawcę treści istnieją 2 interesujące argumenty do wyszukiwania informacji: --selection i --projection:
Możesz spróbować nadużyć tych parametrów do testowania wstrzykiwania SQL:
Automatyczne odkrywanie wstrzykiwania SQL przez Drozera
Dostawcy treści oparte na systemie plików
Dostawcy treści mogą być również używani do dostępu do plików:
Odczytaj plik
Możesz odczytywać pliki z dostawcy treści
Przechodzenie ścieżek
Jeśli masz dostęp do plików, możesz spróbować nadużyć Przechodzenia ścieżek (w tym przypadku nie jest to konieczne, ale możesz spróbować użyć "../" i podobne sztuczki).
Automatyczne odkrywanie ścieżek w podatności na przechodzenie do katalogów przez Drozera
Odnośniki
Last updated