Drozer est un framework d'exploitation dédié à Android permettant de faire de l'analyse statique et dynamique via l'installation et la communication avec un agent .apk à installer sur la machine cible et qui va permettre de faire un grand nombre d'interactions allant de la collecte d'informations jusqu'à l'exploitation d'applications.
Installation
Prérequis
Python2.7 (Modules 2.6 ou supérieur, 16.2 ou supérieur, 10.2 ou supérieur)
Une fois l'agent téléchargé, on va pouvoir l'installer sur l'appareil Android avec adb comme ceci:
$ adb install agent.apk
Il reste ensuite à lancer le serveur dans l'application "drozer Agent" installée en switchant le bouton en bas à droite sur "ON".
L'agent Drozer s'exécute sur le port 31415, il faut donc transférer le port avec la commande ci-dessous pour établir la communication entre le client Drozer et l'agent.
$ adb forward tcp:31415 tcp:31415
Vérifier ensuite le bon fonctionnement du serveur en lancant la commande:
$ drozer console connect
Lister / Rechercher des packages
Dans le shell drozer:
dz> run app.package.list [-f exemple]
Renseignements sur un package
dz> run app.package.info -a com.example.targetapp
Lire le fichier AndroidManifest
dz> run app.package.manifest com.example.targetapp
Lister la surface d'attaque d'un package
dz> run app.package.attacksurface com.example.targetapp
Activities
Lister les activitiés exportées
dz> run app.activity.info -a com.example.targetapp
Lancer une activité
dz> run app.activity.start --component com.example.targetapp com.example.targetapp.MainActivity
Content providers
Lister les content providers
dz> run app.provider.info -a com.example.targetapp
Trouver des URIs
dz> run scanner.provider.finduris -a com.example.targetapp
Lire les fichiers dans le file system
dz> run app.provider.read content://com.example.targetapp...
Télécharger le contenu d'un fichier
dz> run app.provider.download content://com.example.targetapp...
Requêter un content provider
dz> run app.provider.query content://com.example.targetapp.DBContentProvider/Passwords/ --vertical
Envoyer de nouvelles données à un content provider
dz> run app.provider.insert content://com.example.targetapp.DBContentProvider/Passwords/ --string <DBcolumn> <contenu>
#Types de données
--string
--float
--integer
--long
--short
--boolean
dz> run app.provider.delete content://com.example.targetapp.DBContentProvider/Passwords/ --selection "<DBcolumn>=?" --selection-args <contenu>
Services
Lister les services
dz> run app.service.info -a com.example.targetapp
Interactions avec un service
dz> run app.service.send //Permet d'envoyer un message à un service et d'intercepter la réponse
dz> run app.service.start //Permet de lancer un service
dz> run app.service.stop //Permet de stopper un service
Broadcast Receivers
Lister les broadcast receivers
dz> run app.broadcast.info -a com.example.targetapp
Interactions avec les broadcast
dz> run app.broadcast.info //Permet d'obtenir des informations sur les boraidcast
dz> run app.broadcast.send //Permet d'envoyer un broadcast avec un intent
dz> run app.broadcast.sniff //Permet d'enregistrer un broadcast reveiver pouvant sniffer des intents particuliers
Lister les applications debuggable
dz> run app.package.debuggable
Autre
Ouvrir un shell sur la machine
dz> run shell.start
Télécharger / Envoyer un fichier sur la machine
dz> run tools.file.upload
dz> run tools.file.download