hacktricks/mobile-pentesting/android-app-pentesting/drozer-tutorial
2024-04-06 19:35:05 +00:00
..
exploiting-content-providers.md Translated to Polish 2024-02-11 01:46:25 +00:00
README.md GitBook: No commit message 2024-04-06 19:35:05 +00:00

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 bug bounty: zarejestruj się na platformie Intigriti, premium platformie bug bounty stworzonej przez hakerów, dla hakerów! Dołącz do nas na https://go.intigriti.com/hacktricks już dziś i zacznij zarabiać nagrody do 100 000 USD!

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

APK do testowania

Części tego samouczka zostały wyjęte z Drozer documentation pdf.

Instalacja

Zainstaluj klienta Drozer w swoim hoście. 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 drozer z najnowszych wydań. W tym momencie jest to ten.

adb install drozer.apk

Uruchamianie serwera

Agent działa na porcie 31415, musimy przekierować port w celu nawiązania komunikacji między klientem Drozer a Agentem. Oto polecenie, które należy wykonać:

adb forward tcp:31415 tcp:31415

W końcu, 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 dla wybranego modułu
list Wyświetla listę wszystkich modułów drozera, które można uruchomić w bieżącej sesji. Ukrywa moduły, do których nie masz odpowiednich uprawnień.
shell Uruchamia interaktywną powłokę Linux na urządzeniu, w kontekście agenta.
clean Usuwa tymczasowe pliki przechowywane przez drozera na urządzeniu 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 każdej powłoki Linux, którą uruchamia.
set Przechowuje wartość w zmiennej, która zostanie przekazana jako zmienna środowiskowa do każdej powłoki Linux uruchamianej 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ć exploity do wykonania na urządzeniu. drozer exploit list
payload Exploity wymagają payloadu. 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: Może można uruchomić aktywność i ominąć pewnego rodzaju autoryzację, która powinna Cię powstrzymać przed jej uruchomieniem.
  • Dostawcy treści: Może można uzyskać dostęp do prywatnych danych lub wykorzystać jakąś podatność (wstrzyknięcie SQL lub przechodzenie ścieżek).
  • Usługi:
  • is debuggable: Dowiedz się więcej

Aktywności

Wartość "android:exported" składnika aktywności jest ustawiona na "true" w pliku AndroidManifest.xml:

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

Lista wyeksportowanych aktywności:

Aby wyświetlić listę wyeksportowanych aktywności w aplikacji Android, wykonaj następujące kroki:

  1. Uruchom narzędzie drozer, wpisując polecenie drozer console connect.
  2. Po połączeniu z urządzeniem, wpisz polecenie run app.package.exported_activities -a <nazwa_pakietu>, gdzie <nazwa_pakietu> to nazwa pakietu aplikacji, której aktywności chcesz sprawdzić.
  3. Po wykonaniu polecenia, zostanie wyświetlona lista wszystkich wyeksportowanych aktywności w podanej aplikacji.

Przykład użycia:

run app.package.exported_activities -a com.example.app

Wynik:

Exported Activities:
- com.example.app.MainActivity
- com.example.app.SecondActivity
- com.example.app.SettingsActivity

Pamiętaj, że wyeksportowane aktywności mogą stanowić potencjalne zagrożenie dla bezpieczeństwa aplikacji, dlatego ważne jest, aby odpowiednio zabezpieczyć je przed nieautoryzowanym dostępem.

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:

Możesz spróbować 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 jest tak duży, że możesz uzyskać do niego dostęp na osobnej stronie tutaj.

Usługi

Usługa eksportowana jest deklarowana w pliku Manifest.xml:

{% code overflow="wrap" %}

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

{% endcode %}

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ą

To interact with a service, you need to establish a connection and send requests to it. In the case of Android app pentesting, you can use drozer to interact with the app's services.

A service is a component of an Android app that runs in the background without a user interface. It performs long-running operations or handles remote requests. By interacting with a service, you can gather information, manipulate data, or even exploit vulnerabilities.

Drozer provides a command-line interface to interact with Android app services. You can use the run command to execute drozer modules that interact with the app's services. These modules are designed to perform specific tasks, such as listing services, invoking methods, or querying content providers.

To interact with a service using drozer, follow these steps:

  1. Start drozer by running the command drozer console connect.
  2. Connect to the target device by running the command run app.package.list -f <package_name>.
  3. List the services available in the app by running the command run app.service.list -f <package_name>.
  4. Choose a service to interact with and gather information about it by running the command run app.service.info -f <package_name> -u <service_name>.
  5. Invoke methods on the service by running the command run app.service.send <package_name> <service_name> <method_name> <arguments>.
  6. Analyze the responses and gather any relevant information.

By interacting with an app's services, you can gain a deeper understanding of its functionality and identify potential security vulnerabilities. This knowledge can be used to enhance your pentesting efforts and ensure the app's security.

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

Zajrzyj do pomocy drozera dla app.service.send:

Zauważ, że najpierw wysyłasz 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ś, co zostanie zinterpretowane jako "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 transmisji

W sekcji podstawowych informacji o Androidzie możesz zobaczyć, czym jest odbiornik transmisji.

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

Wykrywanie wszystkich odbiorników transmisji

run app.broadcast.info #Detects all

Sprawdź odbiorniki nadawcze aplikacji

Aby sprawdzić odbiorniki nadawcze aplikacji, możesz użyć narzędzia drozer. drozer to framework do testowania penetracyjnego aplikacji mobilnych na platformie Android. Poniżej przedstawiono kroki, które należy podjąć, aby sprawdzić odbiorniki nadawcze aplikacji przy użyciu drozera:

  1. Uruchom drozera na swoim urządzeniu lub emulatorze Android.
  2. Połącz się z urządzeniem za pomocą polecenia connect <adres IP urządzenia>.
  3. Wyświetl listę zainstalowanych aplikacji za pomocą polecenia run app.package.list.
  4. Wybierz aplikację, której odbiorniki nadawcze chcesz sprawdzić, za pomocą polecenia run app.package.info -a <nazwa pakietu aplikacji>.
  5. Wyświetl listę odbiorników nadawczych aplikacji za pomocą polecenia run app.broadcast.info -a <nazwa pakietu aplikacji>.

Dzięki tym krokom będziesz mógł sprawdzić odbiorniki nadawcze aplikacji przy użyciu narzędzia drozer.

#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ów

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 i dostawcę treści, możesz wysłać dowolną wiadomość SMS do dowolnego niepremiumowego celu bez pytania użytkownika o zgodę.

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

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 możliwe debugowanie

Produkcyjne pliki APK nigdy nie powinny być debugowalne.
Oznacza to, że można podłączyć debugger javy do działającej aplikacji, przeglądać ją w czasie rzeczywistym, ustawiać punkty przerwania, krok po kroku analizować, zbierać wartości zmiennych, a nawet je zmieniać. InfoSec institute ma doskonały artykuł na temat zagłębiania się w aplikację, gdy jest ona debugowalna i wstrzykiwania kodu w czasie wykonania.

Gdy aplikacja jest debugowalna, pojawi się to w Manifest:

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

Możesz znaleźć wszystkie aplikacje, które można debugować 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 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 do 100 000 USD!

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

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

Inne sposoby wsparcia HackTricks: