254 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Drozer Tutorial
{{#include ../../../banners/hacktricks-training.md}}
## APKs to test
- [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (від mrwlabs)
- [DIVA](https://payatu.com/wp-content/uploads/2016/01/diva-beta.tar.gz)
**Частини цього посібника були витягнуті з** [**документації Drozer pdf**](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf)**.**
## Installation
Встановіть Drozer Client на вашому хості. Завантажте його з [останніх релізів](https://github.com/mwrlabs/drozer/releases).
```bash
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
```
Завантажте та встановіть drozer APK з [останніх релізів](https://github.com/mwrlabs/drozer/releases). На даний момент це [цей](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk).
```bash
adb install drozer.apk
```
### Запуск сервера
Агент працює на порту 31415, нам потрібно [port forward](https://en.wikipedia.org/wiki/Port_forwarding), щоб встановити зв'язок між клієнтом Drozer та агентом, ось команда для цього:
```bash
adb forward tcp:31415 tcp:31415
```
Нарешті, **запустіть** **додаток** і натисніть кнопку "**УВІМКНУТО**"
![](<../../../images/image (459).png>)
І підключіться до нього:
```bash
drozer console connect
```
## Цікаві команди
| **Команди** | **Опис** |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Help MODULE** | Показує допомогу вибраного модуля |
| **list** | Показує список всіх модулів drozer, які можна виконати в поточній сесії. Це приховує модулі, для яких у вас немає відповідних дозволів на виконання. |
| **shell** | Запускає інтерактивну оболонку Linux на пристрої в контексті Агенту. |
| **clean** | Видаляє тимчасові файли, збережені drozer на Android-пристрої. |
| **load** | Завантажує файл, що містить команди drozer, і виконує їх послідовно. |
| **module** | Знаходить і встановлює додаткові модулі drozer з Інтернету. |
| **unset** | Видаляє названу змінну, яку drozer передає будь-яким оболонкам Linux, які він створює. |
| **set** | Зберігає значення в змінній, яка буде передана як змінна середовища будь-яким оболонкам Linux, створеним drozer. |
| **shell** | Запускає інтерактивну оболонку Linux на пристрої в контексті Агенту |
| **run MODULE** | Виконує модуль drozer |
| **exploit** | Drozer може створювати експлойти для виконання на пристрої. `drozer exploit list` |
| **payload** | Експлойти потребують корисного навантаження. `drozer payload list` |
### Пакет
Знайдіть **ім'я** пакету, фільтруючи за частиною імені:
```bash
dz> run app.package.list -f sieve
com.mwr.example.sieve
```
**Основна інформація** про пакет:
```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
```
Прочитайте **Manifest**:
```bash
run app.package.manifest jakhar.aseem.diva
```
**Атакувальна поверхня** пакету:
```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
```
- **Дії**: Можливо, ви можете розпочати дію та обійти якусь авторизацію, яка повинна заважати вам її запускати.
- **Постачальники контенту**: Можливо, ви можете отримати доступ до приватних даних або експлуатувати якусь вразливість (SQL Injection або Path Traversal).
- **Сервіси**:
- **is debuggable**: [Дізнатися більше](#is-debuggeable)
### Дії
Значення “android:exported” експортованого компоненту дії встановлено на **“true”** у файлі AndroidManifest.xml:
```html
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>
```
**Список експортованих активностей**:
```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
```
**Почати активність**:
Можливо, ви можете почати активність і обійти якийсь вид авторизації, яка повинна заважати вам її запускати.
```bash
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
```
Ви також можете запустити експортовану активність з **adb**:
- PackageName - com.example.demo
- Exported ActivityName - com.example.test.MainActivity
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
### Content Providers
Цей пост був занадто великим, щоб бути тут, тому **ви можете** [**доступити його на окремій сторінці тут**](exploiting-content-providers.md).
### Services
Експортована служба оголошується в Manifest.xml:
```html
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
```
У коді **перевірте** функцію **`handleMessage`**, яка буде **отримувати** **повідомлення**:
![](<../../../images/image (82).png>)
#### Список сервісів
```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
```
#### **Взаємодіяти** з сервісом
```bash
app.service.send Send a Message to a service, and display the reply
app.service.start Start Service
app.service.stop Stop Service
```
#### Приклад
Подивіться на допомогу **drozer** для `app.service.send`:
![](<../../../images/image (1079).png>)
Зверніть увагу, що спочатку ви будете надсилати дані всередині "_msg.what_", потім "_msg.arg1_" і "_msg.arg2_", вам слід перевірити в коді **яка інформація використовується** і де.\
Використовуючи опцію `--extra`, ви можете надіслати щось, що інтерпретується "_msg.replyTo_", а використовуючи `--bundle-as-obj`, ви створюєте об'єкт з наданими деталями.
У наступному прикладі:
- `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
```
![](<../../../images/image (647).png>)
### Broadcast Receivers
**У розділі основної інформації Android ви можете побачити, що таке Broadcast Receiver**.
Після виявлення цих Broadcast Receivers вам слід **перевірити код** цих компонентів. Зверніть особливу увагу на функцію **`onReceive`**, оскільки вона оброблятиме отримані повідомлення.
#### **Виявити всі** broadcast receivers
```bash
run app.broadcast.info #Detects all
```
#### Перевірте приймачі широкомовлення програми
```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
```
#### Трансляція **Взаємодій**
```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
```
#### Відправити повідомлення
У цьому прикладі, зловживаючи [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) Content Provider, ви можете **відправити довільне SMS** на будь-який непреміумний номер **без запиту** дозволу у користувача.
![](<../../../images/image (415).png>)
![](<../../../images/image (573).png>)
Якщо ви прочитаєте код, параметри "_phoneNumber_" та "_message_" повинні бути надіслані до Content Provider.
```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!"
```
### Чи є можливість налагодження
Продуктова APK ніколи не повинна бути налагоджуваною.\
Це означає, що ви можете **підключити java налагоджувач** до запущеного додатку, перевірити його в режимі виконання, встановити точки зупинки, крок за кроком, збирати значення змінних і навіть змінювати їх. [InfoSec institute має відмінну статтю](../exploiting-a-debuggeable-applciation.md) про те, як глибше дослідити, коли ваш додаток є налагоджуваним і впроваджувати код під час виконання.
Коли додаток є налагоджуваним, він з'явиться в Маніфесті:
```xml
<application theme="@2131296387" debuggable="true"
```
Ви можете знайти всі додатки, що підлягають налагодженню, за допомогою **Drozer**:
```bash
run app.package.debuggable
```
## Туторіали
- [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)
## Більше інформації
- [https://blog.dixitaditya.com/android-pentesting-cheatsheet/](https://blog.dixitaditya.com/android-pentesting-cheatsheet/)
{{#include ../../../banners/hacktricks-training.md}}