hacktricks/mobile-pentesting/android-app-pentesting/drozer-tutorial
2024-07-19 11:49:31 +00:00
..
exploiting-content-providers.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 11:49:31 +00:00
README.md Translated ['macos-hardening/macos-security-and-privilege-escalation/mac 2024-07-19 11:49:31 +00:00

Drozer Tutorial

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}

Bug bounty tip: зареєструйтесь на Intigriti, преміум платформі для винагород за вразливості, створеній хакерами для хакерів! Приєднуйтесь до нас на https://go.intigriti.com/hacktricks сьогодні та почніть заробляти винагороди до $100,000!

{% embed url="https://go.intigriti.com/hacktricks" %}

APKs to test

Частини цього посібника були витягнуті з Drozer documentation pdf.

Installation

Встановіть Drozer Client на вашому хості. Завантажте його з останніх релізів.

pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity

Завантажте та встановіть drozer APK з останніх релізів. На даний момент це цей.

adb install drozer.apk

Запуск сервера

Агент працює на порту 31415, нам потрібно перенаправити порт, щоб встановити зв'язок між клієнтом Drozer та агентом, ось команда для цього:

adb forward tcp:31415 tcp:31415

Нарешті, запустіть додаток і натисніть кнопку "УВІМКНУТО"

І підключіться до нього:

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

Пакет

Знайдіть ім'я пакету, фільтруючи за частиною імені:

dz> run app.package.list -f sieve
com.mwr.example.sieve

Основна інформація про пакет:

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:

run app.package.manifest jakhar.aseem.diva

Атакувальна поверхня пакету:

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: Дізнатися більше

Дії

Значення “android:exported” компонента експортованої дії встановлено на “true” у файлі AndroidManifest.xml:

<activity android:name="com.my.app.Initial" android:exported="true">
</activity>

Список експортованих активностей:

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

Запустити активність:

Можливо, ви можете запустити активність і обійти якийсь вид авторизації, яка повинна заважати вам її запустити.

{% code overflow="wrap" %}

dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList

{% endcode %}

Ви також можете запустити експортовану активність з adb:

  • PackageName - com.example.demo
  • Exported ActivityName - com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity

Content Providers

Цей пост був занадто великим, щоб бути тут, тому ви можете доступити його на окремій сторінці тут.

Services

Експортована служба оголошується в Manifest.xml:

{% code overflow="wrap" %}

<service android:name=".AuthService" android:exported="true" android:process=":remote"/>

{% endcode %}

Всередині коду перевірте функцію **handleMessage**, яка буде отримувати повідомлення:

Список сервісів

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

Взаємодіяти з сервісом

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:

Зверніть увагу, що спочатку ви будете надсилати дані всередині "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)
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

Broadcast Receivers

У розділі основної інформації Android ви можете побачити, що таке Broadcast Receiver.

Після виявлення цих Broadcast Receivers вам слід перевірити код цих компонентів. Зверніть особливу увагу на функцію onReceive, оскільки вона оброблятиме отримані повідомлення.

Виявити всі broadcast receivers

run app.broadcast.info #Detects all

Перевірте приймачі широкомовлення програми

#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

Взаємодії Broadcast

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 Content Provider, ви можете відправити довільне SMS на будь-який непреміумний номер без запиту дозволу у користувача.

Якщо ви прочитаєте код, параметри "phoneNumber" та "message" повинні бути надіслані до Content Provider.

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 має відмінну статтю про те, як заглибитися, коли ваш додаток є налагоджуваним і інжектувати код під час виконання.

Коли додаток є налагоджуваним, він з'явиться в Маніфесті:

<application theme="@2131296387" debuggable="true"

Ви можете знайти всі додатки, які можна налагоджувати, за допомогою Drozer:

run app.package.debuggable

Tutorials

More info

Bug bounty tip: зареєструйтесь на Intigriti, преміум платформі для bug bounty, створеній хакерами для хакерів! Приєднуйтесь до нас на https://go.intigriti.com/hacktricks сьогодні та почніть заробляти винагороди до $100,000!

{% embed url="https://go.intigriti.com/hacktricks" %}

{% hint style="success" %} Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks
{% endhint %}