mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
254 lines
14 KiB
Markdown
254 lines
14 KiB
Markdown
# 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
|
||
```
|
||
Нарешті, **запустіть** **додаток** і натисніть кнопку "**УВІМКНУТО**"
|
||
|
||
.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`**, яка буде **отримувати** **повідомлення**:
|
||
|
||
.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`:
|
||
|
||
.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
|
||
```
|
||
.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** на будь-який непреміумний номер **без запиту** дозволу у користувача.
|
||
|
||
.png>)
|
||
|
||
.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}}
|