Drozer Tutorial

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Bug-Bounty-Tipp: Melden Sie sich an bei Intigriti, einer Premium-Bug-Bounty-Plattform, die von Hackern für Hacker erstellt wurde! Treten Sie uns heute bei https://go.intigriti.com/hacktricks und beginnen Sie, Prämien von bis zu $100.000 zu verdienen!

APKs zum Testen

Teile dieses Tutorials wurden aus der Drozer-Dokumentation pdf** extrahiert.**

Installation

Installieren Sie den Drozer-Client auf Ihrem Host. Laden Sie ihn von den neuesten Versionen herunter.

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

Laden Sie die drozer APK von den neueste Versionen herunter und installieren Sie sie. Im Moment ist es dieses.

adb install drozer.apk

Starting the Server

Agent läuft auf Port 31415, wir müssen Port-Forwarding einrichten, um die Kommunikation zwischen dem Drozer Client und Agent herzustellen, hier ist der Befehl dazu:

adb forward tcp:31415 tcp:31415

Schließlich starten Sie die Anwendung und drücken Sie die Schaltfläche "EIN"

Und verbinden Sie sich damit:

drozer console connect

Interessante Befehle

Befehle

Beschreibung

Help MODULE

Zeigt die Hilfe des ausgewählten Moduls

list

Zeigt eine Liste aller drozer-Module, die in der aktuellen Sitzung ausgeführt werden können. Dies blendet Module aus, für die Sie nicht die entsprechenden Berechtigungen haben.

shell

Startet eine interaktive Linux-Shell auf dem Gerät, im Kontext des Agenten.

clean

Entfernt temporäre Dateien, die von drozer auf dem Android-Gerät gespeichert wurden.

load

Lädt eine Datei mit drozer-Befehlen und führt sie nacheinander aus.

module

Findet und installiert zusätzliche drozer-Module aus dem Internet.

unset

Entfernt eine benannte Variable, die drozer an alle Linux-Shells übergibt, die es startet.

set

Speichert einen Wert in einer Variablen, die als Umgebungsvariable an alle von drozer gestarteten Linux-Shells übergeben wird.

shell

Startet eine interaktive Linux-Shell auf dem Gerät, im Kontext des Agenten

run MODULE

Führt ein drozer-Modul aus

exploit

Drozer kann Exploits erstellen, die im Gerät ausgeführt werden. drozer exploit list

payload

Die Exploits benötigen eine Payload. drozer payload list

Paket

Finden Sie den Namen des Pakets, indem Sie nach einem Teil des Namens filtern:

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

Grundlegende Informationen des Pakets:

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

Lese Manifest:

run app.package.manifest jakhar.aseem.diva

Angriffsfläche des Pakets:

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
  • Aktivitäten: Vielleicht kannst du eine Aktivität starten und eine Art von Autorisierung umgehen, die dich daran hindern sollte, sie zu starten.

  • Inhaltsanbieter: Vielleicht kannst du auf private Daten zugreifen oder eine Schwachstelle ausnutzen (SQL-Injection oder Path Traversal).

  • Dienste:

  • is debuggable: Mehr erfahren

Aktivitäten

Der Wert des exportierten Aktivitätskomponenten “android:exported” ist in der AndroidManifest.xml-Datei auf “true” gesetzt:

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

Liste exportierter Aktivitäten:

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

Startaktivität:

Vielleicht kannst du eine Aktivität starten und eine Art von Autorisierung umgehen, die dich daran hindern sollte, sie zu starten.

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

Sie können auch eine exportierte Aktivität von adb starten:

  • Paketname ist com.example.demo

  • Exportierte Aktivitätsname ist com.example.test.MainActivity

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

Content Providers

Dieser Beitrag war so umfangreich, dass er hier nicht passt, also kannst du ihn auf seiner eigenen Seite hier aufrufen.

Services

Ein exportierter Dienst wird in der Manifest.xml deklariert:

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

Überprüfen Sie im Code die **handleMessage** Funktion, die die **Nachricht** empfängt:

Listendienst

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

Interagieren Sie mit einem Dienst

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

Beispiel

Schauen Sie sich die drozer Hilfe für app.service.send an:

Beachten Sie, dass Sie zuerst die Daten in "msg.what" senden, dann "msg.arg1" und "msg.arg2", Sie sollten im Code überprüfen, welche Informationen verwendet werden und wo. Mit der Option --extra können Sie etwas senden, das von "msg.replyTo" interpretiert wird, und mit --bundle-as-obj erstellen Sie ein Objekt mit den bereitgestellten Details.

Im folgenden Beispiel:

  • 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-Empfänger

Im Abschnitt über grundlegende Android-Informationen können Sie sehen, was ein Broadcast-Empfänger ist.

Nachdem Sie diese Broadcast-Empfänger entdeckt haben, sollten Sie den Code von ihnen überprüfen. Achten Sie besonders auf die onReceive-Funktion, da sie die empfangenen Nachrichten verarbeitet.

Alle Broadcast-Empfänger erkennen

run app.broadcast.info #Detects all

Überprüfen Sie die Broadcast-Receiver einer App

#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 Interaktionen

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

Nachricht senden

In diesem Beispiel wird der FourGoats apk Content Provider missbraucht, um eine beliebige SMS an ein nicht-premium Ziel ohne Erlaubnis des Benutzers zu senden.

Wenn Sie den Code lesen, müssen die Parameter "phoneNumber" und "message" an den Content Provider gesendet werden.

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

Ist debuggeable

Eine Produktions-APK sollte niemals debuggeable sein. Das bedeutet, dass Sie einen Java-Debugger an die laufende Anwendung anhängen, sie zur Laufzeit inspizieren, Haltepunkte setzen, Schritt für Schritt vorgehen, Variablenwerte sammeln und sogar ändern können. Das InfoSec-Institut hat einen ausgezeichneten Artikel darüber, wie man tiefer gräbt, wenn Ihre Anwendung debuggeable ist und zur Laufzeit Code injiziert.

Wenn eine Anwendung debuggeable ist, wird sie im Manifest angezeigt:

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

Sie können alle debugbaren Anwendungen mit Drozer finden:

run app.package.debuggable

Tutorials

Mehr Informationen

Bug-Bounty-Tipp: Melden Sie sich an für Intigriti, eine Premium-Bug-Bounty-Plattform, die von Hackern für Hacker erstellt wurde! Treten Sie uns bei https://go.intigriti.com/hacktricks heute bei und beginnen Sie, Prämien von bis zu 100.000 $ zu verdienen!

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Unterstützen Sie HackTricks

Last updated