Drozer Tutorial

Support HackTricks

Bug bounty tip: sign up for Intigriti, μια premium bug bounty platform created by hackers, for hackers! Join us at https://go.intigriti.com/hacktricks today, and start earning bounties up to $100,000!

APKs to test

Parts of this tutorial were extracted from the Drozer documentation pdf.

Installation

Install Drozer Client inside your host. Download it from the latest releases.

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

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

adb install drozer.apk

Starting the Server

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

adb forward tcp:31415 tcp:31415

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

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

drozer console connect

Interesting Commands

Commands

Description

Help MODULE

Εμφανίζει βοήθεια για το επιλεγμένο module

list

Εμφανίζει μια λίστα με όλα τα drozer modules που μπορούν να εκτελούνται στην τρέχουσα συνεδρία. Αυτό κρύβει modules που δεν έχετε κατάλληλες άδειες για να εκτελέσετε.

shell

Ξεκινά μια διαδραστική Linux shell στη συσκευή, στο πλαίσιο του Agent.

clean

Αφαιρεί τα προσωρινά αρχεία που αποθηκεύει το drozer στη συσκευή Android.

load

Φορτώνει ένα αρχείο που περιέχει drozer commands και τα εκτελεί διαδοχικά.

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

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

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

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

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:

run app.package.manifest jakhar.aseem.diva

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

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).

  • Υπηρεσίες:

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

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

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

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

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

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

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

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

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

Content Providers

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

Services

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

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

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

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

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

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

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

Παράδειγμα

Take a look to the drozer help for app.service.send:

Note that you will be sending first the data inside "msg.what", then "msg.arg1" and "msg.arg2", you should check inside the code ποια πληροφορία χρησιμοποιείται και πού. Using the --extra option you can send something interpreted by "msg.replyTo", and using --bundle-as-obj you create and object with the provided details.

In the following example:

  • 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

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

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

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

run app.broadcast.info #Detects all

Έλεγχος των broadcast receivers μιας εφαρμογής

#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 Αλληλεπιδράσεις

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.

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

Is debuggeable

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

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

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

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

run app.package.debuggable

Tutorials

More info

Bug bounty tip: εγγραφείτε για Intigriti, μια premium πλατφόρμα bug bounty που δημιουργήθηκε από hackers, για hackers! Ελάτε μαζί μας στο https://go.intigriti.com/hacktricks σήμερα, και αρχίστε να κερδίζετε βραβεία έως $100,000!

Support HackTricks

Last updated