Drozer Tutorial

Reading time: 8 minutes

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks

APKs to test

Μέρη αυτού του tutorial έχουν εξαχθεί από το Drozer documentation pdf.

Installation

Εγκαταστήστε τον Drozer Client μέσα στον υπολογιστή σας. Κατεβάστε τον από τις latest releases.

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

Κατεβάστε και εγκαταστήστε το drozer APK από τις latest releases. Αυτή τη στιγμή είναι this.

bash
adb install drozer.apk

Ξεκινώντας τον Διακομιστή

Ο πράκτορας εκτελείται στη θύρα 31415, πρέπει να port forward για να καθιερώσουμε την επικοινωνία μεταξύ του Drozer Client και του Πράκτορα, εδώ είναι η εντολή για να το κάνουμε:

bash
adb forward tcp:31415 tcp:31415

Τέλος, εκκινήστε την εφαρμογή και πατήστε το κουμπί "ON"

Και συνδεθείτε σε αυτήν:

bash
drozer console connect

Interesting Commands

CommandsDescription
Help MODULEΕμφανίζει βοήθεια για το επιλεγμένο module
listΕμφανίζει μια λίστα με όλα τα drozer modules που μπορούν να εκτελούνται στην τρέχουσα συνεδρία. Αυτό κρύβει modules που δεν έχετε κατάλληλες άδειες για να εκτελέσετε.
shellΞεκινά μια διαδραστική Linux shell στη συσκευή, στο πλαίσιο του Agent.
cleanΑφαιρεί τα προσωρινά αρχεία που αποθηκεύει το drozer στη συσκευή Android.
loadΦορτώνει ένα αρχείο που περιέχει εντολές drozer και τις εκτελεί διαδοχικά.
moduleΒρίσκει και εγκαθιστά επιπλέον drozer modules από το Διαδίκτυο.
unsetΑφαιρεί μια ονομαστική μεταβλητή που περνάει το drozer σε οποιαδήποτε Linux shells που δημιουργεί.
setΑποθηκεύει μια τιμή σε μια μεταβλητή που θα περαστεί ως περιβαλλοντική μεταβλητή σε οποιαδήποτε Linux shells που δημιουργεί το drozer.
shellΞεκινά μια διαδραστική Linux shell στη συσκευή, στο πλαίσιο του Agent
run MODULEΕκτελεί ένα drozer module
exploitΤο Drozer μπορεί να δημιουργήσει exploits για εκτέλεση στη συσκευή. drozer exploit list
payloadΤα exploits χρειάζονται ένα payload. drozer payload list

Package

Βρείτε το όνομα του πακέτου φιλτράροντας με βάση ένα μέρος του ονόματος:

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

Βασικές Πληροφορίες του πακέτου:

bash
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

Διαβάστε Manifest:

bash
run app.package.manifest jakhar.aseem.diva

Επιφάνεια επίθεσης του πακέτου:

bash
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
  • Δραστηριότητες: Ίσως μπορείτε να ξεκινήσετε μια δραστηριότητα και να παρακάμψετε κάποιο είδος εξουσιοδότησης που θα έπρεπε να σας αποτρέπει από το να την εκκινήσετε.
  • Πάροχοι περιεχομένου: Ίσως μπορείτε να αποκτήσετε πρόσβαση σε ιδιωτικά δεδομένα ή να εκμεταλλευτείτε κάποια ευπάθεια (SQL Injection ή Path Traversal).
  • Υπηρεσίες:
  • is debuggable: Μάθετε περισσότερα

Δραστηριότητες

Η τιμή “android:exported” ενός εξαγόμενου συστατικού δραστηριότητας είναι ρυθμισμένη σε “true” στο αρχείο AndroidManifest.xml:

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

Λίστα εξαγόμενων δραστηριοτήτων:

bash
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

Έναρξη δραστηριότητας:

Ίσως μπορείτε να ξεκινήσετε μια δραστηριότητα και να παρακάμψετε κάποιο είδος εξουσιοδότησης που θα έπρεπε να σας αποτρέπει από το να την εκκινήσετε.

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

Μπορείτε επίσης να ξεκινήσετε μια εξαγόμενη δραστηριότητα από το adb:

  • PackageName είναι com.example.demo
  • Exported ActivityName είναι com.example.test.MainActivity
bash
adb shell am start -n com.example.demo/com.example.test.MainActivity

Content Providers

Αυτή η ανάρτηση ήταν τόσο μεγάλη για να είναι εδώ, οπότε μπορείτε να την αποκτήσετε στη δική της σελίδα εδώ.

Services

Μια εξαγόμενη υπηρεσία δηλώνεται μέσα στο Manifest.xml:

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

Μέσα στον κώδικα check για τη συνάρτηση handleMessage η οποία θα λάβει το μήνυμα:

Λίστα υπηρεσίας

bash
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

Αλληλεπίδραση με μια υπηρεσία

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

Παράδειγμα

Δείτε τη βοήθεια του drozer για το app.service.send:

Σημειώστε ότι θα στείλετε πρώτα τα δεδομένα μέσα στο "msg.what", στη συνέχεια "msg.arg1" και "msg.arg2", θα πρέπει να ελέγξετε μέσα στον κώδικα ποια πληροφορία χρησιμοποιείται και πού.
Χρησιμοποιώντας την επιλογή --extra μπορείτε να στείλετε κάτι που ερμηνεύεται από το "msg.replyTo", και χρησιμοποιώντας --bundle-as-obj δημιουργείτε ένα αντικείμενο με τις παρεχόμενες λεπτομέρειες.

Στο παρακάτω παράδειγμα:

  • what == 2354
  • arg1 == 9234
  • arg2 == 1
  • replyTo == object(string com.mwr.example.sieve.PIN 1337)
bash
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

Στην ενότητα βασικών πληροφοριών Android μπορείτε να δείτε τι είναι ένας Broadcast Receiver.

Αφού ανακαλύψετε αυτούς τους Broadcast Receivers, θα πρέπει να ελέγξετε τον κώδικα τους. Δώστε ιδιαίτερη προσοχή στη onReceive συνάρτηση καθώς θα διαχειρίζεται τα μηνύματα που λαμβάνονται.

Ανιχνεύστε όλους τους broadcast receivers

bash
run app.broadcast.info #Detects all

Ελέγξτε τους δέκτες εκπομπής μιας εφαρμογής

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

Μεταδόσεις Αλληλεπιδράσεις

bash
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

Στείλτε ένα μήνυμα

Σε αυτό το παράδειγμα, εκμεταλλευόμενοι τον FourGoats apk Content Provider, μπορείτε να στείλετε ένα αυθαίρετο SMS σε οποιονδήποτε μη premium προορισμό χωρίς να ζητήσετε άδεια από τον χρήστη.

Αν διαβάσετε τον κώδικα, οι παράμετροι "phoneNumber" και "message" πρέπει να σταλούν στον Content Provider.

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

Είναι debuggeable

Ένα παραγωγικό APK δεν θα πρέπει ποτέ να είναι debuggeable.
Αυτό σημαίνει ότι μπορείτε να συνδέσετε τον java debugger στην τρέχουσα εφαρμογή, να την επιθεωρήσετε σε πραγματικό χρόνο, να ορίσετε σημεία διακοπής, να προχωρήσετε βήμα προς βήμα, να συγκεντρώσετε τιμές μεταβλητών και ακόμη και να τις αλλάξετε. Το InfoSec institute έχει ένα εξαιρετικό άρθρο για το πώς να εμβαθύνετε όταν η εφαρμογή σας είναι debuggeable και να εισάγετε κώδικα σε πραγματικό χρόνο.

Όταν μια εφαρμογή είναι debuggeable, θα εμφανίζεται στο Manifest:

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

Μπορείτε να βρείτε όλες τις εφαρμογές που μπορούν να αποσφαλματωθούν με Drozer:

bash
run app.package.debuggable

Tutorials

More info

tip

Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Μάθετε & εξασκηθείτε στο Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Υποστηρίξτε το HackTricks