25 KiB
Tutoriel Drozer
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez La famille PEASS, notre collection exclusive de NFT
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.
Astuce pour les primes de bug : inscrivez-vous sur Intigriti, une plateforme premium de primes de bug créée par des pirates, pour des pirates ! Rejoignez-nous sur https://go.intigriti.com/hacktricks dès aujourd'hui et commencez à gagner des primes allant jusqu'à 100 000 $ !
{% embed url="https://go.intigriti.com/hacktricks" %}
APKs à tester
Installation
Installez le client Drozer sur votre hôte. Téléchargez-le depuis les dernières versions.
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
Téléchargez et installez l'APK de drozer à partir des dernières versions. À l'heure actuelle, il s'agit de celle-ci.
adb install drozer.apk
Démarrer le serveur
L'agent fonctionne sur le port 31415, nous devons effectuer une redirection de port pour établir la communication entre le client Drozer et l'agent. Voici la commande à utiliser :
adb forward tcp:31415 tcp:31415
Enfin, lancez l'application et appuyez sur le bouton "ON"
Et connectez-vous à celle-ci:
drozer console connect
Commandes intéressantes
Commandes | Description |
---|---|
Aide MODULE | Affiche l'aide du module sélectionné |
liste | Affiche une liste de tous les modules drozer pouvant être exécutés dans la session en cours. Cela masque les modules pour lesquels vous n'avez pas les autorisations appropriées pour les exécuter. |
shell | Démarre un shell Linux interactif sur l'appareil, dans le contexte de l'Agent. |
nettoyer | Supprime les fichiers temporaires stockés par drozer sur l'appareil Android. |
charger | Charge un fichier contenant des commandes drozer et les exécute en séquence. |
module | Recherche et installe des modules drozer supplémentaires depuis Internet. |
définir | Supprime une variable nommée que drozer transmet à tous les shells Linux qu'il génère. |
définir | Stocke une valeur dans une variable qui sera transmise en tant que variable d'environnement à tous les shells Linux générés par drozer. |
shell | Démarre un shell Linux interactif sur l'appareil, dans le contexte de l'Agent |
exécuter MODULE | Exécute un module drozer |
exploiter | Drozer peut créer des exploits à exécuter sur l'appareil. drozer exploit list |
charge utile | Les exploits ont besoin d'une charge utile. drozer payload list |
Package
Trouvez le nom du package en filtrant par partie du nom:
dz> run app.package.list -f sieve
com.mwr.example.sieve
Informations de base du package :
- Package Name: com.example.app
- Version: 1.0
- Target SDK: 28
- Min SDK: 21
- Permissions: INTERNET, ACCESS_NETWORK_STATE, READ_EXTERNAL_STORAGE, WRITE_EXTERNAL_STORAGE
- Activities: MainActivity, LoginActivity, ProfileActivity
- Services: None
- Broadcast Receivers: None
- Content Providers: None
- Exported Components: None
- Vulnerable Components: None
- Leaked Components: None
- Vulnerable Libraries: None
- Leaked Libraries: None
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
Lisez Manifeste :
run app.package.manifest jakhar.aseem.diva
Surface d'attaque du package :
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
- Activités: Peut-être pouvez-vous démarrer une activité et contourner une sorte d'autorisation qui devrait vous empêcher de la lancer.
- Fournisseurs de contenu: Peut-être pouvez-vous accéder à des données privées ou exploiter une vulnérabilité (injection SQL ou traversée de chemin).
- Services:
- is debuggable: En savoir plus
Activités
La valeur "android:exported" d'un composant d'activité exporté est définie sur "true" dans le fichier AndroidManifest.xml:
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>
Liste des activités exportées:
To list the exported activities of an Android application, you can use the drozer
tool. Drozer is a comprehensive security testing framework for Android applications. It allows you to interact with the Android operating system and perform various security assessments.
To list the exported activities, follow these steps:
-
Install and set up
drozer
on your machine. -
Connect your Android device to your machine using a USB cable.
-
Open a terminal or command prompt and navigate to the
drozer
installation directory. -
Run the following command to start the
drozer
console:drozer console connect
-
Once the
drozer
console is open, run the following command to list the exported activities of an application:run app.activity.info -a <package_name>
Replace
<package_name>
with the package name of the application you want to assess. -
The
drozer
tool will display a list of exported activities along with their corresponding package names.
By listing the exported activities of an Android application, you can identify potential security vulnerabilities and assess the overall security posture of the application.
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
Démarrer une activité:
Il est possible de démarrer une activité et contourner une forme d'autorisation qui devrait normalement vous empêcher de la lancer.
{% code overflow="wrap" %}
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
{% endcode %}
Vous pouvez également démarrer une activité exportée depuis adb:
- Le nom du package est com.example.demo
- Le nom de l'activité exportée est com.example.test.MainActivity
adb shell am start -n com.example.demo/com.example.test.MainActivity
Fournisseurs de contenu
Ce post était trop long pour être inclus ici, donc vous pouvez y accéder sur sa propre page ici.
Services
Un service exporté est déclaré dans le Manifest.xml:
{% code overflow="wrap" %}
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
{% endcode %}
À l'intérieur du code, recherchez la fonction **handleMessage
** qui recevra le message :
Liste des services
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
Interagir avec un service
To interact with a service, you can use the run
command in drozer. This command allows you to execute various actions on the target application.
Pour interagir avec un service, vous pouvez utiliser la commande run
dans drozer. Cette commande vous permet d'exécuter différentes actions sur l'application cible.
The basic syntax for the run
command is as follows:
La syntaxe de base de la commande run
est la suivante :
run <module> <action> [options]
Where:
<module>
is the name of the module you want to run.<action>
is the action you want to perform on the module.[options]
are any additional options or parameters required by the module.
Où :
<module>
est le nom du module que vous souhaitez exécuter.<action>
est l'action que vous souhaitez effectuer sur le module.[options]
sont toutes les options ou paramètres supplémentaires requis par le module.
For example, to list all the activities in the target application, you can use the following command:
Par exemple, pour lister toutes les activités de l'application cible, vous pouvez utiliser la commande suivante :
run app.activity.info
This will display a list of activities along with their corresponding package names.
Cela affichera une liste d'activités avec leurs noms de package correspondants.
You can also specify additional options or parameters depending on the module and action you are using. These options can be used to customize the behavior of the module or provide additional input.
Vous pouvez également spécifier des options ou des paramètres supplémentaires en fonction du module et de l'action que vous utilisez. Ces options peuvent être utilisées pour personnaliser le comportement du module ou fournir une entrée supplémentaire.
For example, to launch an activity in the target application, you can use the following command:
Par exemple, pour lancer une activité dans l'application cible, vous pouvez utiliser la commande suivante :
run app.activity.start --component <package_name> <activity_name>
Replace <package_name>
with the package name of the target application and <activity_name>
with the name of the activity you want to launch.
Remplacez <package_name>
par le nom du package de l'application cible et <activity_name>
par le nom de l'activité que vous souhaitez lancer.
By using the run
command with different modules and actions, you can interact with various services and functionalities of the target application.
En utilisant la commande run
avec différents modules et actions, vous pouvez interagir avec divers services et fonctionnalités de l'application cible.
app.service.send Send a Message to a service, and display the reply
app.service.start Start Service
app.service.stop Stop Service
Exemple
Jetez un coup d'œil à l'aide de drozer pour app.service.send
:
Notez que vous enverrez d'abord les données à l'intérieur de "msg.what", puis "msg.arg1" et "msg.arg2", vous devriez vérifier à l'intérieur du code quelles informations sont utilisées et où.
En utilisant l'option --extra
, vous pouvez envoyer quelque chose interprété par "msg.replyTo", et en utilisant --bundle-as-obj
, vous créez un objet avec les détails fournis.
Dans l'exemple suivant:
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
Récepteurs de diffusion
Les applications Android peuvent envoyer ou recevoir des messages de diffusion du système Android et d'autres applications Android, de manière similaire au modèle de conception publish-subscribe. Ces diffusions sont envoyées lorsqu'un événement d'intérêt se produit. Par exemple, le système Android envoie des diffusions lorsque divers événements système se produisent, tels que le démarrage du système ou le chargement de l'appareil. Les applications peuvent également envoyer des diffusions personnalisées, par exemple, pour notifier d'autres applications de quelque chose qui pourrait les intéresser (par exemple, de nouvelles données ont été téléchargées).
Les applications peuvent s'inscrire pour recevoir des diffusions spécifiques. Lorsqu'une diffusion est envoyée, le système achemine automatiquement les diffusions vers les applications qui se sont abonnées à ce type de diffusion particulier.
Cela pourrait apparaître à l'intérieur du fichier Manifest.xml :
<receiver android:name=".MyBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
</intent-filter>
</receiver>
Depuis: https://developer.android.com/guide/components/broadcasts
Après avoir découvert ces récepteurs de diffusion, vous devriez vérifier leur code. Portez une attention particulière à la fonction onReceive
car elle gère les messages reçus.
Détecter tous les récepteurs de diffusion
run app.broadcast.info #Detects all
Vérifier les récepteurs de diffusion d'une application
To check the broadcast receivers of an app, you can use the drozer
tool. This tool allows you to interact with Android apps and perform various security tests.
Pour vérifier les récepteurs de diffusion d'une application, vous pouvez utiliser l'outil drozer
. Cet outil vous permet d'interagir avec les applications Android et d'effectuer divers tests de sécurité.
First, you need to install drozer
on your machine. You can find the installation instructions in the drozer GitHub repository.
Tout d'abord, vous devez installer drozer
sur votre machine. Vous pouvez trouver les instructions d'installation dans le dépôt GitHub de drozer.
Once drozer
is installed, you can connect it to your Android device using the drozer console connect
command.
Une fois drozer
installé, vous pouvez le connecter à votre appareil Android en utilisant la commande drozer console connect
.
To check the broadcast receivers of an app, you can use the run app.broadcast.info -a <package_name>
command. Replace <package_name>
with the package name of the app you want to test.
Pour vérifier les récepteurs de diffusion d'une application, vous pouvez utiliser la commande run app.broadcast.info -a <nom_du_package>
. Remplacez <nom_du_package>
par le nom du package de l'application que vous souhaitez tester.
This command will display information about the broadcast receivers registered by the app, including their names, permissions, and exported status.
Cette commande affichera des informations sur les récepteurs de diffusion enregistrés par l'application, y compris leurs noms, leurs autorisations et leur statut d'exportation.
By analyzing this information, you can identify any potential security vulnerabilities related to the app's broadcast receivers.
En analysant ces informations, vous pouvez identifier d'éventuelles vulnérabilités de sécurité liées aux récepteurs de diffusion de l'application.
#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
Interactions de diffusion
Broadcast interactions refer to the communication between different components within an Android application through the use of broadcast messages. These messages can be sent by one component and received by one or more components, allowing for inter-component communication.
Les interactions de diffusion font référence à la communication entre différents composants au sein d'une application Android grâce à l'utilisation de messages de diffusion. Ces messages peuvent être envoyés par un composant et reçus par un ou plusieurs composants, permettant ainsi une communication inter-composants.
Broadcast messages are typically used to notify other components about events or to trigger specific actions. They can be sent either within the same application or across different applications, depending on the intent filters defined by the receiving components.
Les messages de diffusion sont généralement utilisés pour notifier d'autres composants d'événements ou pour déclencher des actions spécifiques. Ils peuvent être envoyés soit au sein de la même application, soit entre différentes applications, en fonction des filtres d'intention définis par les composants récepteurs.
Broadcast interactions can be exploited by attackers to gain unauthorized access or perform malicious actions within an application. Therefore, it is important for developers to properly secure and validate broadcast messages to prevent potential security vulnerabilities.
Les interactions de diffusion peuvent être exploitées par des attaquants pour obtenir un accès non autorisé ou effectuer des actions malveillantes au sein d'une application. Il est donc important que les développeurs sécurisent et valident correctement les messages de diffusion afin de prévenir les vulnérabilités potentielles en matière de sécurité.
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
Envoyer un message
Dans cet exemple, en abusant du Content Provider de l'apk FourGoats, vous pouvez envoyer un SMS arbitraire à une destination non premium sans demander la permission de l'utilisateur.
Si vous lisez le code, les paramètres "phoneNumber" et "message" doivent être envoyés au 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!"
Est débogable
Un APK de production ne devrait jamais être débogable.
Cela signifie que vous pouvez attacher un débogueur Java à l'application en cours d'exécution, l'inspecter en temps réel, définir des points d'arrêt, avancer pas à pas, recueillir les valeurs des variables et même les modifier. InfoSec institute a un excellent article sur comment creuser plus profondément lorsque votre application est débogable et injecter du code en temps d'exécution.
Lorsqu'une application est débogable, elle apparaîtra dans le Manifeste :
<application theme="@2131296387" debuggable="true"
Vous pouvez trouver toutes les applications débogables avec Drozer :
run app.package.debuggable
Tutoriels
- 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
Plus d'informations
Astuce pour les primes de bug : inscrivez-vous sur Intigriti, une plateforme premium de prime de bug créée par des hackers, pour des hackers ! Rejoignez-nous sur https://go.intigriti.com/hacktricks dès aujourd'hui et commencez à gagner des primes allant jusqu'à 100 000 $ !
{% embed url="https://go.intigriti.com/hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- Travaillez-vous dans une entreprise de cybersécurité ? Voulez-vous voir votre entreprise annoncée dans HackTricks ? ou voulez-vous avoir accès à la dernière version de PEASS ou télécharger HackTricks en PDF ? Consultez les PLANS D'ABONNEMENT !
- Découvrez The PEASS Family, notre collection exclusive de NFT
- Obtenez le swag officiel PEASS & HackTricks
- Rejoignez le 💬 groupe Discord ou le groupe Telegram ou suivez moi sur Twitter 🐦@carlospolopm.
- Partagez vos astuces de piratage en soumettant des PR au repo hacktricks et au repo hacktricks-cloud.