Drozer Tutorial

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Wskazówka dotycząca nagród za błędy: Zarejestruj się na platformie Intigriti, premium platformie nagród za błędy stworzonej przez hakerów, dla hakerów! Dołącz do nas na https://go.intigriti.com/hacktricks już dziś i zacznij zarabiać nagrody aż do 100 000 USD!

APKs do testowania

Części tego samouczka zostały wyodrębnione z dokumentacji Drozera w formacie pdf.

Instalacja

Zainstaluj klienta Drozera w swoim hostingu. Pobierz go z najnowszych wydań.

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

Pobierz i zainstaluj plik APK drozera z najnowszych wydań. W tym momencie jest to ten.

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 do wykonania:

adb forward tcp:31415 tcp:31415

Wreszcie uruchom aplikację i naciśnij przycisk "ON" na dole

Następnie połącz się z nią:

drozer console connect

Interesujące polecenia

Pakiet

Znajdź nazwę pakietu, filtrowanie po części nazwy:

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

Podstawowe informacje o pakiecie:

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:

run app.package.manifest jakhar.aseem.diva

Powierzchnia ataku pakietu:

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: Być może możesz uruchomić aktywność i ominąć pewnego rodzaju autoryzację, która powinna cię powstrzymać przed jej uruchomieniem.

  • Dostawcy treści: Być może możesz uzyskać dostęp do prywatnych danych lub wykorzystać jakieś podatności (wstrzyknięcie SQL lub Traversal ścieżki).

  • Usługi:

  • is debuggable: Dowiedz się więcej

Aktywności

Wartość "android:exported" skonfigurowana na "true" dla składowej aktywności eksportowanej w pliku AndroidManifest.xml:

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

Lista wyeksportowanych aktywności:

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

Rozpoczęcie aktywności:

Być może możesz rozpocząć aktywność i ominąć pewnego rodzaju autoryzację, która powinna cię powstrzymać przed jej uruchomieniem.

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

Możesz także uruchomić wyeksportowaną aktywność za pomocą adb:

  • Nazwa pakietu to com.example.demo

  • Nazwa wyeksportowanej aktywności to com.example.test.MainActivity

adb shell am start -n com.example.demo/com.example.test.MainActivity

Dostawcy treści

Ten post był tak duży, żeby być tutaj, więc możesz uzyskać do niego dostęp na własnej stronie tutaj.

Usługi

Usługa eksportowana jest deklarowana wewnątrz Manifest.xml:

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

Wewnątrz kodu sprawdź funkcję **handleMessage**, która będzie odbierać wiadomość:

Lista usług

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

Komunikacja z usługą

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

Spójrz na pomoc drozera dla app.service.send:

Zauważ, że najpierw zostaną wysłane dane znajdujące się w "msg.what", następnie "msg.arg1" i "msg.arg2", powinieneś sprawdzić w kodzie jakie informacje są używane i gdzie. Korzystając z opcji --extra, możesz wysłać coś zinterpretowanego przez "msg.replyTo", a korzystając z --bundle-as-obj tworzysz obiekt z podanymi szczegółami.

W poniższym przykładzie:

  • 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

Odbiorniki nadawcze

W sekcji podstawowych informacji o Androidzie możesz zobaczyć, co to jest odbiornik nadawczy.

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

Wykryj wszystkie odbiorniki nadawcze

run app.broadcast.info #Detects all

Sprawdź odbiorniki nadawcze aplikacji

#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

Interakcje 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

Wyślij wiadomość

W tym przykładzie wykorzystując apkę FourGoats apk Content Provider możesz wysłać dowolny SMS do dowolnego niepremiumowego odbiorcy bez pytania użytkownika o zgodę.

Jeśli przeczytasz kod, parametry "phoneNumber" i "message" muszą zostać przesłane do Content Providera.

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!"

Jest możliwe debugowanie

Produkcyjny plik APK nigdy nie powinien być debuggowalny. Oznacza to, że możesz dołączyć debugger Javy do działającej aplikacji, inspekcjonować ją w czasie rzeczywistym, ustawiać punkty przerwania, krok po kroku przechodzić przez kod, zbierać wartości zmiennych, a nawet je zmieniać. Instytut InfoSec ma doskonały artykuł na temat zagłębiania się w aplikację debuggowalną i wstrzykiwania kodu w czasie wykonania.

Gdy aplikacja jest debuggowalna, pojawi się to w manifeście:

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

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

run app.package.debuggable

Samouczki

Więcej informacji

Wskazówka dotycząca nagrody za błąd: zarejestruj się na platformie Intigriti, premium platformie do nagród za błędy stworzonej przez hakerów, dla hakerów! Dołącz do nas na https://go.intigriti.com/hacktricks już dziś i zacznij zarabiać nagrody aż do $100,000!

Zacznij od zera i zostań ekspertem AWS w dziedzinie hakerskiej z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated