26 KiB
Οδηγός χρήσης του Drozer
Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
- Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στη 💬 ομάδα Discord ή στη ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @carlospolopm.
- Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Συμβουλή για bug bounty: εγγραφείτε στο Intigriti, μια προηγμένη πλατφόρμα bug bounty που δημιουργήθηκε από χάκερς, για χάκερς! Γίνετε μέλος μας στο https://go.intigriti.com/hacktricks σήμερα και αρχίστε να κερδίζετε αμοιβές έως και $100,000!
{% embed url="https://go.intigriti.com/hacktricks" %}
APKs για δοκιμή
Μέρη αυτού του οδηγού εξήχθησαν από το αρχείο τεκμηρίωσης του Drozer.
Εγκατάσταση
Εγκαταστήστε τον πελάτη Drozer μέσα στον υπολογιστή σας. Κατεβάστε το από τις τελευταίες εκδόσεις.
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
Κατεβάστε και εγκαταστήστε το drozer APK από τις τελευταίες εκδόσεις. Αυτή τη στιγμή είναι αυτό.
adb install drozer.apk
Έναρξη του Διακομιστή
Ο πράκτορας λειτουργεί στη θύρα 31415, χρειαζόμαστε προώθηση θύρας για να εγκαθιδρύσουμε την επικοινωνία μεταξύ του πελάτη Drozer και του πράκτορα. Εδώ είναι η εντολή για να το κάνετε:
adb forward tcp:31415 tcp:31415
Τέλος, εκκινήστε την εφαρμογή και πατήστε το κουμπί "ON"
Και συνδεθείτε σε αυτήν:
drozer console connect
Ενδιαφέρουσες Εντολές
Εντολές | Περιγραφή |
---|---|
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 |
Πακέτο
Βρείτε το όνομα του πακέτου φιλτράροντας με βάση μέρος του ονόματος:
dz> run app.package.list -f sieve
com.mwr.example.sieve
Βασικές πληροφορίες για το πακέτο:
- Package Name: com.example.app
- Version Name: 1.0
- Version Code: 1
- Target SDK Version: 28
- Min SDK Version: 21
- Permissions: android.permission.INTERNET, android.permission.ACCESS_NETWORK_STATE
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>
Λίστα εξαγόμενων δραστηριοτήτων:
To list the exported activities of an Android application, you can use the drozer
tool. The exported activities are components of an app that can be accessed by other apps or components. This information can be useful for understanding the app's functionality and potential security vulnerabilities.
To list the exported activities using drozer
, follow these steps:
- Install
drozer
on your machine. - Connect your Android device to your machine using a USB cable.
- Open a terminal and run the command
adb devices
to ensure that your device is connected and recognized bydrozer
. - Run the command
drozer console connect
to establish a connection betweendrozer
and your device. - Once connected, run the command
run app.activity.info -a <package_name>
to list the exported activities of the specified app. Replace<package_name>
with the package name of the app you want to analyze.
The output will display the exported activities along with their corresponding package names and other relevant information. This information can help you identify potential entry points for further analysis and exploitation during a penetration test.
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
Έναρξη δραστηριότητας:
Ίσως μπορείτε να ξεκινήσετε μια δραστηριότητα και να παρακάμψετε κάποιον τύπο εξουσιοδότησης που θα έπρεπε να σας εμποδίσει από την εκκίνησή της.
{% code overflow="wrap" %}
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
{% endcode %}
Μπορείτε επίσης να ξεκινήσετε μια εξαγόμενη δραστηριότητα από το adb:
- Το PackageName είναι com.example.demo
- Το όνομα της εξαγόμενης δραστηριότητας είναι com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity
Παροχείς Περιεχομένου
Αυτή η ανάρτηση ήταν τόσο μεγάλη για να είναι εδώ, οπότε μπορείτε να την ανοίξετε σε ξεχωριστή σελίδα εδώ.
Υπηρεσίες
Μια εξαγόμενη υπηρεσία δηλώνεται μέσα στο Manifest.xml:
{% code overflow="wrap" %}
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
{% endcode %}
Μέσα στον κώδικα ελέγξτε την συνάρτηση **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
Αλληλεπίδραση με έναν υπηρεσία
To interact with a service using drozer, you need to use the run
command followed by the package name of the target application and the name of the service you want to interact with. For example, to interact with the MyService
service in the com.example.app
package, you would use the following command:
run app.package.attacksurface com.example.app --component com.example.app.MyService
This command will start the MyService
service and allow you to interact with it. You can then use various drozer commands to interact with the service, such as list
, call
, or invoke
.
To list the methods available in the service, you can use the list
command followed by the package name and the service name:
run app.package.attacksurface com.example.app --component com.example.app.MyService list
This will display a list of methods that you can call or invoke on the service.
To call a method in the service, you can use the call
command followed by the package name, the service name, and the method name:
run app.package.attacksurface com.example.app --component com.example.app.MyService call methodName
Replace methodName
with the actual name of the method you want to call.
To invoke a method in the service, you can use the invoke
command followed by the package name, the service name, the method name, and any required arguments:
run app.package.attacksurface com.example.app --component com.example.app.MyService invoke methodName arg1 arg2 ...
Replace methodName
with the actual name of the method you want to invoke, and arg1
, arg2
, etc. with any required arguments for the method.
By using these commands, you can interact with services in Android applications and perform various actions or gather information from them.
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
Ανιχνεύστε όλους τους δέκτες εκπομπής
Στην ενότητα βασικών πληροφοριών Android μπορείτε να δείτε τι είναι ένας δέκτης εκπομπής.
Αφού ανακαλύψετε αυτούς τους δέκτες εκπομπής, θα πρέπει να ελέγξετε τον κώδικά τους. Δώστε ιδιαίτερη προσοχή στη συνάρτηση onReceive
καθώς αυτή θα χειρίζεται τα μηνύματα που λαμβάνονται.
run app.broadcast.info #Detects all
Έλεγχος δέκτες εκπομπής μιας εφαρμογής
Για να ελέγξετε τους δέκτες εκπομπής μιας εφαρμογής στο Android, μπορείτε να χρησιμοποιήσετε το εργαλείο drozer
. Ακολουθήστε τα παρακάτω βήματα:
- Εγκαταστήστε το
drozer
στον υπολογιστή σας. - Συνδεθείτε στη συσκευή Android σας μέσω USB Debugging.
- Ανοίξτε ένα τερματικό και εκτελέστε την εντολή
adb devices
για να βεβαιωθείτε ότι η συσκευή σας είναι συνδεδεμένη. - Εκτελέστε την εντολή
drozer console connect
για να συνδεθείτε στη συσκευή Android. - Εκτελέστε την εντολή
run app.package.broadcasts -a <package_name>
για να ελέγξετε τους δέκτες εκπομπής της συγκεκριμένης εφαρμογής.
Θα λάβετε μια λίστα με όλους τους δέκτες εκπομπής που χρησιμοποιεί η εφαρμογή. Αυτό μπορεί να σας βοηθήσει να εντοπίσετε πιθανές ευπάθειες ασφαλείας ή προβλήματα ιδιωτικότητας.
#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 είναι ένας τρόπος επικοινωνίας μεταξύ εφαρμογών στο Android σύστημα. Μπορεί να χρησιμοποιηθεί για την αποστολή μηνυμάτων ή την ειδοποίηση άλλων εφαρμογών για συμβάντα που συμβαίνουν στο σύστημα. Οι εφαρμογές μπορούν να λαμβάνουν ή να αποστέλλουν διάφορα είδη εκπομπών.
Οι εκπομπές μπορούν να είναι δημόσιες ή ιδιωτικές. Οι δημόσιες εκπομπές είναι προσβάσιμες από οποιαδήποτε εφαρμογή στο σύστημα, ενώ οι ιδιωτικές εκπομπές είναι προσβάσιμες μόνο από εφαρμογές που έχουν το ίδιο όνομα πακέτου.
Οι εκπομπές μπορούν να περιέχουν δεδομένα που μεταδίδονται με το μήνυμα. Αυτά τα δεδομένα μπορούν να είναι σε μορφή κειμένου, αριθμού, λίστας, JSON κλπ. Οι εφαρμογές μπορούν να εγγραφούν για να λάβουν εκπομπές που περιέχουν συγκεκριμένα δεδομένα ή να αποστείλουν εκπομπές με συγκεκριμένα δεδομένα.
Οι εκπομπές μπορούν να χρησιμοποιηθούν για διάφορους σκοπούς, όπως η επικοινωνία μεταξύ εφαρμογών, η ειδοποίηση για αλλαγές στο σύστημα, η αποστολή δεδομένων σε άλλες εφαρμογές κλπ. Ωστόσο, οι εκπομπές μπορούν να αποτελέσουν και μια ασφαλείς ευπάθεια, καθώς μπορεί να υπάρχει η δυνατότητα για κακόβουλες εφαρμογές να παρακολουθούν ή να παρεμβαίνουν στις εκπομπές άλλων εφαρμογών.
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 σε οποιοδήποτε μη-προνομιούχο προορισμό χωρίς να ζητήσετε άδεια από τον χρήστη.
Αν διαβάσετε τον κώδικα, οι παράμετροι "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!"
Είναι ενεργοποιημένη η αποσφαλμάτωση
Ένα APK παραγωγής δεν πρέπει ποτέ να είναι ενεργοποιημένη η αποσφαλμάτωση.
Αυτό σημαίνει ότι μπορείτε να συνδεθείτε με έναν αποσφαλματωτή Java στην εκτελούμενη εφαρμογή, να την επιθεωρήσετε κατά τη διάρκεια της εκτέλεσης, να τοποθετήσετε σημεία διακοπής, να προχωρήσετε βήμα-βήμα, να συλλέξετε τιμές μεταβλητών και ακόμα και να τις αλλάξετε. Το InfoSec institute έχει ένα εξαιρετικό άρθρο για να εξερευνήσετε περισσότερο όταν η εφαρμογή σας είναι ενεργοποιημένη για αποσφαλμάτωση και για να εισάγετε κώδικα κατά τη διάρκεια της εκτέλεσης.
Όταν μια εφαρμογή είναι ενεργοποιημένη για αποσφαλμάτωση, θα εμφανιστεί στο Manifest:
<application theme="@2131296387" debuggable="true"
Μπορείτε να βρείτε όλες τις εφαρμογές που μπορούν να αποσφαλματώθουν με το Drozer:
run app.package.debuggable
Οδηγοί
- 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
Περισσότερες πληροφορίες
Συμβουλή για bug bounty: εγγραφείτε στο Intigriti, μια προηγμένη πλατφόρμα bug bounty που δημιουργήθηκε από χάκερς, για χάκερς! Γίνετε μέλος στο https://go.intigriti.com/hacktricks σήμερα και αρχίστε να κερδίζετε αμοιβές έως και $100,000!
{% embed url="https://go.intigriti.com/hacktricks" %}
Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!
Άλλοι τρόποι υποστήριξης του HackTricks:
- Εάν θέλετε να δείτε την εταιρεία σας να διαφημίζεται στο HackTricks ή να κατεβάσετε το HackTricks σε μορφή PDF ελέγξτε τα ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ!
- Αποκτήστε το επίσημο PEASS & HackTricks swag
- Ανακαλύψτε την Οικογένεια PEASS, τη συλλογή μας από αποκλειστικά NFTs
- Εγγραφείτε στη 💬 ομάδα Discord ή στη ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @carlospolopm.
- Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.