Drozer Tutorial

Reading time: 7 minutes

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks

APKs do testowania

Części tego samouczka zostały wyciągnięte z dokumentacji Drozer pdf.

Instalacja

Zainstaluj Drozer Client na swoim hoście. Pobierz go z najnowszych wydań.

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

Pobierz i zainstaluj APK drozer z najnowszych wydań. W tej chwili jest to to.

bash
adb install drozer.apk

Uruchamianie serwera

Agent działa na porcie 31415, musimy przekierować port, aby nawiązać komunikację między klientem Drozer a agentem, oto polecenie, aby to zrobić:

bash
adb forward tcp:31415 tcp:31415

Na koniec, uruchom aplikację i naciśnij przycisk "ON"

I połącz się z nią:

bash
drozer console connect

Ciekawe Komendy

KomendyOpis
Help MODULEPokazuje pomoc wybranego modułu
listPokazuje listę wszystkich modułów drozer, które można wykonać w bieżącej sesji. Ukrywa moduły, do których nie masz odpowiednich uprawnień.
shellUruchamia interaktywną powłokę Linux na urządzeniu, w kontekście Agenta.
cleanUsuwa tymczasowe pliki przechowywane przez drozer na urządzeniu z Androidem.
loadŁaduje plik zawierający polecenia drozer i wykonuje je w kolejności.
moduleZnajduje i instaluje dodatkowe moduły drozer z Internetu.
unsetUsuwa nazwaną zmienną, którą drozer przekazuje do dowolnych powłok Linux, które uruchamia.
setPrzechowuje wartość w zmiennej, która zostanie przekazana jako zmienna środowiskowa do dowolnych powłok Linux uruchamianych przez drozer.
shellUruchamia interaktywną powłokę Linux na urządzeniu, w kontekście Agenta.
run MODULEWykonuje moduł drozer
exploitDrozer może tworzyć exploity do wykonania na urządzeniu. drozer exploit list
payloadExploity potrzebują ładunku. drozer payload list

Pakiet

Znajdź nazwę pakietu filtrując według części nazwy:

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

Podstawowe informacje o pakiecie:

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

Przeczytaj Manifest:

bash
run app.package.manifest jakhar.aseem.diva

Powierzchnia ataku pakietu:

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
  • Aktywności: Może uda ci się uruchomić aktywność i obejść jakiś rodzaj autoryzacji, która powinna uniemożliwić jej uruchomienie.
  • Dostawcy treści: Może uda ci się uzyskać dostęp do prywatnych danych lub wykorzystać jakąś lukę (SQL Injection lub Path Traversal).
  • Usługi:
  • jest debugowalny: Dowiedz się więcej

Aktywności

Wartość „android:exported” komponentu aktywności eksportowanej jest ustawiona na „true” w pliku AndroidManifest.xml:

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

Lista eksportowanych aktywności:

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

Rozpocznij aktywność:

Możesz spróbować rozpocząć aktywność i obejść pewnego rodzaju autoryzację, która powinna uniemożliwić jej uruchomienie.

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

Możesz również uruchomić wyeksportowaną aktywność z adb:

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

Content Providers

Ten post był zbyt duży, aby tutaj go umieścić, więc możesz uzyskać do niego dostęp na osobnej stronie tutaj.

Services

Eksportowana usługa jest zadeklarowana w pliku Manifest.xml:

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

W kodzie sprawdź funkcję handleMessage, która odbierze wiadomość:

Lista usług

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

Interakcja z usługą

bash
app.service.send            Send a Message to a service, and display the reply
app.service.start           Start Service
app.service.stop            Stop Service

Przykład

Zobacz pomoc drozer dla app.service.send:

Zauważ, że najpierw wyślesz dane wewnątrz "msg.what", następnie "msg.arg1" i "msg.arg2", powinieneś sprawdzić w kodzie jakie informacje są używane i gdzie.
Używając opcji --extra, możesz wysłać coś interpretowanego przez "msg.replyTo", a używając --bundle-as-obj, tworzysz obiekt z podanymi szczegółami.

W następującym przykładzie:

  • 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

Odbiorniki Rozgłoszeniowe

W sekcji podstawowych informacji o Androidzie możesz zobaczyć, czym jest Odbiornik Rozgłoszeniowy.

Po odkryciu tych Odbiorników Rozgłoszeniowych powinieneś sprawdzić kod ich. Zwróć szczególną uwagę na funkcję onReceive, ponieważ będzie ona obsługiwać otrzymane wiadomości.

Wykryj wszystkie odbiorniki rozgłoszeniowe

bash
run app.broadcast.info #Detects all

Sprawdź odbiorniki rozgłoszeniowe aplikacji

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

Broadcast Interakcje

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

Wyślij wiadomość

W tym przykładzie, wykorzystując FourGoats apk Content Provider, możesz wysłać dowolny SMS na dowolny niepremium cel bez pytania użytkownika o pozwolenie.

Jeśli przeczytasz kod, parametry "phoneNumber" i "message" muszą być wysłane do 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!"

Czy jest debugowalny

Produkcja APK nigdy nie powinna być debugowalna.
Oznacza to, że możesz przyłączyć debugger java do działającej aplikacji, sprawdzić ją w czasie rzeczywistym, ustawić punkty przerwania, przechodzić krok po kroku, zbierać wartości zmiennych, a nawet je zmieniać. Instytut InfoSec ma doskonały artykuł na temat głębszego badania, gdy twoja aplikacja jest debugowalna i wstrzykiwania kodu w czasie rzeczywistym.

Gdy aplikacja jest debugowalna, pojawi się w Manifeście:

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

Możesz znaleźć wszystkie aplikacje z możliwością debugowania za pomocą Drozer:

bash
run app.package.debuggable

Tutorials

More info

tip

Ucz się i ćwicz AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Wsparcie HackTricks