mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-24 03:53:29 +00:00
385 lines
18 KiB
Markdown
385 lines
18 KiB
Markdown
# Drozer Tutorial
|
|
|
|
<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ł](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
|
|
<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>
|