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

365 lines
26 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Οδηγός χρήσης του Drozer
<details>
<summary><strong>Μάθετε το χάκινγκ του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι για να υποστηρίξετε το HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΣΧΕΔΙΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα χάκινγκ κόλπα σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
<img src="../../../.gitbook/assets/i3.png" alt="" data-size="original">
**Συμβουλή για bug bounty**: **εγγραφείτε** στο **Intigriti**, μια προηγμένη **πλατφόρμα bug bounty που δημιουργήθηκε από χάκερς, για χάκερς**! Γίνετε μέλος μας στο [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) σήμερα και αρχίστε να κερδίζετε αμοιβές έως και **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
## APKs για δοκιμή
* [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (από την mrwlabs)
* [DIVA](https://payatu.com/wp-content/uploads/2016/01/diva-beta.tar.gz)
**Μέρη αυτού του οδηγού εξήχθησαν από το [αρχείο τεκμηρίωσης του Drozer](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf).**
## Εγκατάσταση
Εγκαταστήστε τον πελάτη Drozer μέσα στον υπολογιστή σας. Κατεβάστε το από τις [τελευταίες εκδόσεις](https://github.com/mwrlabs/drozer/releases).
```bash
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
```
Κατεβάστε και εγκαταστήστε το drozer APK από τις [τελευταίες εκδόσεις](https://github.com/mwrlabs/drozer/releases). Αυτή τη στιγμή είναι [αυτό](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk).
```bash
adb install drozer.apk
```
### Έναρξη του Διακομιστή
Ο πράκτορας λειτουργεί στη θύρα 31415, χρειαζόμαστε [προώθηση θύρας](https://en.wikipedia.org/wiki/Port\_forwarding) για να εγκαθιδρύσουμε την επικοινωνία μεταξύ του πελάτη Drozer και του πράκτορα. Εδώ είναι η εντολή για να το κάνετε:
```bash
adb forward tcp:31415 tcp:31415
```
Τέλος, **εκκινήστε** την **εφαρμογή** και πατήστε το κουμπί "**ON**"
![](<../../../.gitbook/assets/image (63).png>)
Και συνδεθείτε σε αυτήν:
```bash
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` |
### Πακέτο
Βρείτε το **όνομα** του πακέτου φιλτράροντας με βάση μέρος του ονόματος:
```bash
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
```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).
* **Υπηρεσίες**:
* **είναι ενεργοποιημένη η λειτουργία αποσφαλμάτωσης**: [Μάθετε περισσότερα](./#είναι-ενεργοποιημένη-η-λειτουργία-αποσφαλμάτωσης)
### Δραστηριότητες
Η τιμή "android:exported" ενός εξαγόμενου στοιχείου δραστηριότητας έχει οριστεί σε **"true"** στο αρχείο AndroidManifest.xml:
```markup
<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.
```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
```
**Έναρξη δραστηριότητας**:
Ίσως μπορείτε να ξεκινήσετε μια δραστηριότητα και να παρακάμψετε κάποιον τύπο εξουσιοδότησης που θα έπρεπε να σας εμποδίσει από την εκκίνησή της.
{% code overflow="wrap" %}
```bash
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
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
### Παροχείς Περιεχομένου
Αυτή η ανάρτηση ήταν τόσο μεγάλη για να είναι εδώ, οπότε **μπορείτε** [**να την ανοίξετε σε ξεχωριστή σελίδα εδώ**](exploiting-content-providers.md).
### Υπηρεσίες
Μια εξαγόμενη υπηρεσία δηλώνεται μέσα στο Manifest.xml:
{% code overflow="wrap" %}
```markup
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
```
{% endcode %}
Μέσα στον κώδικα **ελέγξτε** την συνάρτηση \*\*`handleMessage`\*\* που θα **λάβει** το **μήνυμα**:
![](<../../../.gitbook/assets/image (194).png>)
#### Λίστα υπηρεσιών
```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
```
#### **Αλληλεπίδραση** με έναν υπηρεσία
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.
```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`:
![](<../../../.gitbook/assets/image (196) (1).png>)
Σημειώστε ότι θα στείλετε πρώτα τα δεδομένα μέσα στο "_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
```
![](<../../../.gitbook/assets/image (195).png>)
### Ανιχνεύστε όλους τους δέκτες εκπομπής
**Στην ενότητα βασικών πληροφοριών Android μπορείτε να δείτε τι είναι ένας δέκτης εκπομπής**.
Αφού ανακαλύψετε αυτούς τους δέκτες εκπομπής, θα πρέπει να **ελέγξετε τον κώδικά τους**. Δώστε ιδιαίτερη προσοχή στη συνάρτηση **`onReceive`** καθώς αυτή θα χειρίζεται τα μηνύματα που λαμβάνονται.
```bash
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>` για να ελέγξετε τους δέκτες εκπομπής της συγκεκριμένης εφαρμογής.
Θα λάβετε μια λίστα με όλους τους δέκτες εκπομπής που χρησιμοποιεί η εφαρμογή. Αυτό μπορεί να σας βοηθήσει να εντοπίσετε πιθανές ευπάθειες ασφαλείας ή προβλήματα ιδιωτικότητας.
```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
```
#### Διαδικασίες **Εκπομπής**
Broadcast είναι ένας τρόπος επικοινωνίας μεταξύ εφαρμογών στο Android σύστημα. Μπορεί να χρησιμοποιηθεί για την αποστολή μηνυμάτων ή την ειδοποίηση άλλων εφαρμογών για συμβάντα που συμβαίνουν στο σύστημα. Οι εφαρμογές μπορούν να λαμβάνουν ή να αποστέλλουν διάφορα είδη εκπομπών.
Οι εκπομπές μπορούν να είναι δημόσιες ή ιδιωτικές. Οι δημόσιες εκπομπές είναι προσβάσιμες από οποιαδήποτε εφαρμογή στο σύστημα, ενώ οι ιδιωτικές εκπομπές είναι προσβάσιμες μόνο από εφαρμογές που έχουν το ίδιο όνομα πακέτου.
Οι εκπομπές μπορούν να περιέχουν δεδομένα που μεταδίδονται με το μήνυμα. Αυτά τα δεδομένα μπορούν να είναι σε μορφή κειμένου, αριθμού, λίστας, JSON κλπ. Οι εφαρμογές μπορούν να εγγραφούν για να λάβουν εκπομπές που περιέχουν συγκεκριμένα δεδομένα ή να αποστείλουν εκπομπές με συγκεκριμένα δεδομένα.
Οι εκπομπές μπορούν να χρησιμοποιηθούν για διάφορους σκοπούς, όπως η επικοινωνία μεταξύ εφαρμογών, η ειδοποίηση για αλλαγές στο σύστημα, η αποστολή δεδομένων σε άλλες εφαρμογές κλπ. Ωστόσο, οι εκπομπές μπορούν να αποτελέσουν και μια ασφαλείς ευπάθεια, καθώς μπορεί να υπάρχει η δυνατότητα για κακόβουλες εφαρμογές να παρακολουθούν ή να παρεμβαίνουν στις εκπομπές άλλων εφαρμογών.
```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](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) Content Provider μπορείτε να **στείλετε ένα αυθαίρετο SMS** σε οποιοδήποτε μη-προνομιούχο προορισμό **χωρίς να ζητήσετε** άδεια από τον χρήστη.
![](<../../../.gitbook/assets/image (199).png>)
![](<../../../.gitbook/assets/image (197) (1).png>)
Αν διαβάσετε τον κώδικα, οι παράμετροι "_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!"
```
### Είναι ενεργοποιημένη η αποσφαλμάτωση
Ένα APK παραγωγής δεν πρέπει ποτέ να είναι ενεργοποιημένη η αποσφαλμάτωση.\
Αυτό σημαίνει ότι μπορείτε να **συνδεθείτε με έναν αποσφαλματωτή Java** στην εκτελούμενη εφαρμογή, να την επιθεωρήσετε κατά τη διάρκεια της εκτέλεσης, να τοποθετήσετε σημεία διακοπής, να προχωρήσετε βήμα-βήμα, να συλλέξετε τιμές μεταβλητών και ακόμα και να τις αλλάξετε. [Το InfoSec institute έχει ένα εξαιρετικό άρθρο](../exploiting-a-debuggeable-applciation.md) για να εξερευνήσετε περισσότερο όταν η εφαρμογή σας είναι ενεργοποιημένη για αποσφαλμάτωση και για να εισάγετε κώδικα κατά τη διάρκεια της εκτέλεσης.
Όταν μια εφαρμογή είναι ενεργοποιημένη για αποσφαλμάτωση, θα εμφανιστεί στο Manifest:
```xml
<application theme="@2131296387" debuggable="true"
```
Μπορείτε να βρείτε όλες τις εφαρμογές που μπορούν να αποσφαλματώθουν με το **Drozer**:
```bash
run app.package.debuggable
```
## Οδηγοί
* [https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref](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://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://www.hackingarticles.in/android-penetration-testing-drozer/)
* [https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac](https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac)
## Περισσότερες πληροφορίες
* [https://blog.dixitaditya.com/android-pentesting-cheatsheet/](https://blog.dixitaditya.com/android-pentesting-cheatsheet/)
<img src="../../../.gitbook/assets/i3.png" alt="" data-size="original">
**Συμβουλή για bug bounty**: **εγγραφείτε** στο **Intigriti**, μια προηγμένη **πλατφόρμα bug bounty που δημιουργήθηκε από χάκερς, για χάκερς**! Γίνετε μέλος στο [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) σήμερα και αρχίστε να κερδίζετε αμοιβές έως και **$100,000**!
{% embed url="https://go.intigriti.com/hacktricks" %}
<details>
<summary><strong>Μάθετε το hacking του AWS από το μηδέν μέχρι τον ήρωα με το</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Άλλοι τρόποι υποστήριξης του HackTricks:
* Εάν θέλετε να δείτε την **εταιρεία σας να διαφημίζεται στο HackTricks** ή να **κατεβάσετε το HackTricks σε μορφή PDF** ελέγξτε τα [**ΠΑΚΕΤΑ ΣΥΝΔΡΟΜΗΣ**](https://github.com/sponsors/carlospolop)!
* Αποκτήστε το [**επίσημο PEASS & HackTricks swag**](https://peass.creator-spring.com)
* Ανακαλύψτε [**την Οικογένεια PEASS**](https://opensea.io/collection/the-peass-family), τη συλλογή μας από αποκλειστικά [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Εγγραφείτε στη** 💬 [**ομάδα Discord**](https://discord.gg/hRep4RUj7f) ή στη [**ομάδα telegram**](https://t.me/peass) ή **ακολουθήστε** μας στο **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Μοιραστείτε τα hacking tricks σας υποβάλλοντας PRs στα** [**HackTricks**](https://github.com/carlospolop/hacktricks) και [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>