hacktricks/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md

296 lines
15 KiB
Markdown
Raw Normal View History

# Samouczek Drozera
2022-04-28 16:01:33 +00:00
<details>
2024-02-11 01:46:25 +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
* 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-06 19:35:05 +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)**.**
2024-02-11 01:46:25 +00:00
* **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.
2022-04-28 16:01:33 +00:00
</details>
2022-10-27 23:22:18 +00:00
<img src="../../../.gitbook/assets/i3.png" alt="" data-size="original">
**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**!
2022-10-27 23:22:18 +00:00
{% embed url="https://go.intigriti.com/hacktricks" %}
## APKs do testowania
2024-02-11 01:46:25 +00:00
* [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)**.**
2024-02-08 03:08:28 +00:00
2024-02-11 01:46:25 +00:00
## 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).
2024-02-08 03:08:28 +00:00
```bash
adb install drozer.apk
```
2024-02-11 01:46:25 +00:00
### 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:
2024-02-08 03:08:28 +00:00
```bash
adb forward tcp:31415 tcp:31415
```
Wreszcie **uruchom** **aplikację** i naciśnij przycisk "**ON**"
2024-04-06 19:35:05 +00:00
![](<../../../.gitbook/assets/image (456).png>)
2024-02-11 01:46:25 +00:00
Następnie połącz się z nią:
2024-02-08 03:08:28 +00:00
```bash
drozer console connect
```
2024-02-11 01:46:25 +00:00
## 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` |
2024-02-11 01:46:25 +00:00
### Pakiet
Znajdź **nazwę** pakietu, filtrowanie po części nazwy:
2024-02-08 03:08:28 +00:00
```bash
2024-02-11 01:46:25 +00:00
dz> run app.package.list -f sieve
com.mwr.example.sieve
```
2024-02-11 01:46:25 +00:00
**Podstawowe informacje** o pakiecie:
2024-02-08 03:08:28 +00:00
```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:
2024-02-11 01:46:25 +00:00
- android.permission.READ_EXTERNAL_STORAGE
- android.permission.WRITE_EXTERNAL_STORAGE
- android.permission.INTERNET
Defines Permissions:
2024-02-11 01:46:25 +00:00
- com.mwr.example.sieve.READ_KEYS
- com.mwr.example.sieve.WRITE_KEYS
```
2024-02-11 01:46:25 +00:00
Przeczytaj **Manifest**:
2024-02-08 03:08:28 +00:00
```bash
run app.package.manifest jakhar.aseem.diva
```
2024-02-11 01:46:25 +00:00
**Powierzchnia ataku** pakietu:
2024-02-08 03:08:28 +00:00
```bash
dz> run app.package.attacksurface com.mwr.example.sieve
Attack Surface:
2024-02-11 01:46:25 +00:00
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).
2024-02-11 01:46:25 +00:00
* **Usługi**:
* **is debuggable**: [Dowiedz się więcej](./#is-debuggeable)
2024-02-11 01:46:25 +00:00
### Aktywności
Wartość "android:exported" skonfigurowana na **"true"** dla składowej aktywności eksportowanej w pliku AndroidManifest.xml:
```markup
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>
```
2024-02-11 01:46:25 +00:00
**Lista wyeksportowanych aktywności**:
```bash
dz> run app.activity.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
2024-02-11 01:46:25 +00:00
com.mwr.example.sieve.FileSelectActivity
com.mwr.example.sieve.MainLoginActivity
com.mwr.example.sieve.PWList
```
2024-02-11 01:46:25 +00:00
**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 %}
2024-02-11 01:46:25 +00:00
Możesz również uruchomić wyeksportowaną aktywność za pomocą **adb**:
2024-02-11 01:46:25 +00:00
* 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
```
2024-02-11 01:46:25 +00:00
### 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).
2024-02-11 01:46:25 +00:00
### Usługi
Usługa eksportowana jest deklarowana wewnątrz 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 **otrzyma** **wiadomość**:
![](<../../../.gitbook/assets/image (79).png>)
2024-02-11 01:46:25 +00:00
#### Lista usług
```bash
2024-02-11 01:46:25 +00:00
dz> run app.service.info -a com.mwr.example.sieve
Package: com.mwr.example.sieve
2024-02-11 01:46:25 +00:00
com.mwr.example.sieve.AuthService
Permission: null
com.mwr.example.sieve.CryptoService
Permission: null
```
2024-02-11 01:46:25 +00:00
#### **Komunikacja** z usługą
2024-02-08 03:08:28 +00:00
```bash
2024-02-11 01:46:25 +00:00
app.service.send Send a Message to a service, and display the reply
app.service.start Start Service
app.service.stop Stop Service
```
2024-02-11 01:46:25 +00:00
#### 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.
2024-02-11 01:46:25 +00:00
W poniższym przykładzie:
* `what == 2354`
* `arg1 == 9234`
* `arg2 == 1`
* `replyTo == object(string com.mwr.example.sieve.PIN 1337)`
2024-02-08 03:08:28 +00:00
```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>)
2024-04-06 19:35:05 +00:00
### 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.
2024-04-06 19:35:05 +00:00
#### **Wykryj wszystkie** odbiorniki nadawcze
```bash
run app.broadcast.info #Detects all
```
2024-02-11 01:46:25 +00:00
#### Sprawdź odbiorniki nadawcze aplikacji
```bash
#Check one negative
run app.broadcast.info -a jakhar.aseem.diva
Package: jakhar.aseem.diva
2024-02-11 01:46:25 +00:00
No matching receivers.
# Check one positive
run app.broadcast.info -a com.google.android.youtube
Package: com.google.android.youtube
2024-02-11 01:46:25 +00:00
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
2024-02-08 03:08:28 +00:00
```bash
2024-02-11 01:46:25 +00:00
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
```
2024-02-11 01:46:25 +00:00
#### 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>)
2024-04-06 19:35:05 +00:00
Jeśli przeczytasz kod, parametry "_phoneNumber_" i "_message_" muszą zostać przesłane do Content Providera.
2024-02-08 03:08:28 +00:00
```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
2024-04-06 19:35:05 +00:00
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.
2024-04-06 19:35:05 +00:00
Gdy aplikacja jest możliwa do debugowania, pojawi się to w manifeście:
2024-02-08 03:08:28 +00:00
```xml
<application theme="@2131296387" debuggable="true"
```
Możesz znaleźć wszystkie aplikacje z możliwością debugowania za pomocą **Drozera**:
```bash
run app.package.debuggable
```
2024-02-11 01:46:25 +00:00
## Samouczki
* [https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref](https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref)
2024-04-06 19:35:05 +00:00
* [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)
2024-02-11 01:46:25 +00:00
## Więcej informacji
* [https://blog.dixitaditya.com/android-pentesting-cheatsheet/](https://blog.dixitaditya.com/android-pentesting-cheatsheet/)
2022-04-28 16:01:33 +00:00
2022-10-27 23:22:18 +00:00
<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 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**!
2022-10-27 23:22:18 +00:00
{% embed url="https://go.intigriti.com/hacktricks" %}
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Zacznij od zera i zostań ekspertem AWS w dziedzinie hakerskiej 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
* 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-06 19:35:05 +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)**.**
2024-02-11 01:46:25 +00:00
* **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.
2022-04-28 16:01:33 +00:00
</details>