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
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
APKs to test
Μέρη αυτού του tutorial έχουν εξαχθεί από το Drozer documentation pdf.
Installation
Εγκαταστήστε τον Drozer Client μέσα στον υπολογιστή σας. Κατεβάστε τον από τις latest releases.
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
Κατεβάστε και εγκαταστήστε το drozer APK από τις latest releases. Αυτή τη στιγμή είναι this.
adb install drozer.apk
Ξεκινώντας τον Διακομιστή
Ο πράκτορας εκτελείται στη θύρα 31415, πρέπει να port forward για να καθιερώσουμε την επικοινωνία μεταξύ του Drozer Client και του Πράκτορα, εδώ είναι η εντολή για να το κάνουμε:
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 και τις εκτελεί διαδοχικά. |
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).
- Υπηρεσίες:
- is debuggable: Μάθετε περισσότερα
Δραστηριότητες
Η τιμή “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"/>
Μέσα στον κώδικα check για τη συνάρτηση 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
Παράδειγμα
Δείτε τη βοήθεια του 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)
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
Ελέγξτε τους δέκτες εκπομπής μιας εφαρμογής
#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
Μεταδόσεις Αλληλεπιδράσεις
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!"
Είναι debuggeable
Ένα παραγωγικό APK δεν θα πρέπει ποτέ να είναι debuggeable.
Αυτό σημαίνει ότι μπορείτε να συνδέσετε τον java debugger στην τρέχουσα εφαρμογή, να την επιθεωρήσετε σε πραγματικό χρόνο, να ορίσετε σημεία διακοπής, να προχωρήσετε βήμα προς βήμα, να συγκεντρώσετε τιμές μεταβλητών και ακόμη και να τις αλλάξετε. Το InfoSec institute έχει ένα εξαιρετικό άρθρο για το πώς να εμβαθύνετε όταν η εφαρμογή σας είναι debuggeable και να εισάγετε κώδικα σε πραγματικό χρόνο.
Όταν μια εφαρμογή είναι debuggeable, θα εμφανίζεται στο Manifest:
<application theme="@2131296387" debuggable="true"
Μπορείτε να βρείτε όλες τις εφαρμογές που μπορούν να αποσφαλματωθούν με Drozer:
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
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
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.