hacktricks/mobile-pentesting/android-app-pentesting/drozer-tutorial
2023-06-03 13:10:46 +00:00
..
exploiting-content-providers.md Translated to French 2023-06-03 13:10:46 +00:00
README.md Translated to French 2023-06-03 13:10:46 +00:00

Tutoriel Drozer

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥

Astuce de prime de bug : inscrivez-vous à Intigriti, une plateforme de prime de bug premium créée par des pirates, pour les pirates ! Rejoignez-nous sur https://go.intigriti.com/hacktricks 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. Pour le moment, il s'agit de celle-ci.

adb install drozer.apk

Démarrage du serveur

L'agent fonctionne sur le port 31415, nous devons rediriger le 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 à l'application :

drozer console connect

Commandes intéressantes

Commandes Description
Help MODULE Affiche l'aide du module sélectionné.
list Affiche une liste de tous les modules drozer qui peuvent ê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.
clean Supprime les fichiers temporaires stockés par drozer sur l'appareil Android.
load Charge un fichier contenant des commandes drozer et les exécute en séquence.
module Trouve et installe des modules drozer supplémentaires depuis Internet.
unset Supprime une variable nommée que drozer passe à tous les shells Linux qu'il génère.
set 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.
run MODULE Exécute un module drozer.
exploit Drozer peut créer des exploits à exécuter sur l'appareil. drozer exploit list
payload Les exploits ont besoin d'un payload. drozer payload list

Package

Trouver 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 :

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

Lire 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: Il est possible que vous puissiez démarrer une activité et contourner une sorte d'autorisation qui devrait vous empêcher de la lancer.
  • Fournisseurs de contenu: Il est possible que vous puissiez accéder à des données privées ou exploiter une vulnérabilité (Injection SQL ou Traversal 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:

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 de contourner une sorte d'autorisation qui devrait vous empêcher de la lancer.

dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList

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 grand pour être ici, donc vous pouvez y accéder sur sa propre page ici.

Services

Un service exporté est déclaré dans le Manifest.xml :

<service android:name=".AuthService" android:exported="true" android:process=":remote"/>

À 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

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, 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 pour recevoir ce type particulier de diffusion.

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 le code de chacun d'eux. 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

#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)

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 à n'importe quelle 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 des valeurs de 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éboguables avec Drozer:

run app.package.debuggable

Tutoriels

Plus d'informations

Astuce de prime de bug: inscrivez-vous sur Intigriti, une plateforme de prime de bug premium créée par des hackers, pour les hackers! Rejoignez-nous sur https://go.intigriti.com/hacktricks aujourd'hui et commencez à gagner des primes allant jusqu'à 100 000 $!

{% embed url="https://go.intigriti.com/hacktricks" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥