hacktricks/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md
Translator workflow 35c6b081d2 Translated to Greek
2024-02-10 22:40:18 +00:00

26 KiB
Raw Blame History

Οδηγός χρήσης του Drozer

Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το htARTE (HackTricks AWS Red Team Expert)!

Άλλοι τρόποι για να υποστηρίξετε το HackTricks:

Συμβουλή για 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:

  1. Install drozer on your machine.
  2. Connect your Android device to your machine using a USB cable.
  3. Open a terminal and run the command adb devices to ensure that your device is connected and recognized by drozer.
  4. Run the command drozer console connect to establish a connection between drozer and your device.
  5. 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. Ακολουθήστε τα παρακάτω βήματα:

  1. Εγκαταστήστε το drozer στον υπολογιστή σας.
  2. Συνδεθείτε στη συσκευή Android σας μέσω USB Debugging.
  3. Ανοίξτε ένα τερματικό και εκτελέστε την εντολή adb devices για να βεβαιωθείτε ότι η συσκευή σας είναι συνδεδεμένη.
  4. Εκτελέστε την εντολή drozer console connect για να συνδεθείτε στη συσκευή Android.
  5. Εκτελέστε την εντολή 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

Οδηγοί

Περισσότερες πληροφορίες

Συμβουλή για 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: