Drozer Tutorial

Aprende a hackear AWS de cero a héroe con htARTE (Experto en Equipos Rojos de AWS de HackTricks)!

Otras formas de apoyar a HackTricks:

Consejo de recompensa por errores: Regístrate en Intigriti, una plataforma premium de recompensas por errores creada por hackers, para hackers! ¡Únete a nosotros en https://go.intigriti.com/hacktricks hoy, y comienza a ganar recompensas de hasta $100,000!

APKs para probar

Partes de este tutorial fueron extraídas de la documentación pdf de Drozer.

Instalación

Instala el Cliente Drozer dentro de tu host. Descárgalo desde las últimas versiones.

pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity

Descarga e instala el archivo APK de drozer desde las últimas versiones. En este momento es este.

adb install drozer.apk

Iniciando el Servidor

El agente se está ejecutando en el puerto 31415, necesitamos hacer reenvío de puertos para establecer la comunicación entre el Cliente de Drozer y el Agente, aquí está el comando para hacerlo:

adb forward tcp:31415 tcp:31415

Finalmente, inicia la aplicación y presiona el botón "ON"

Y conéctate a ella:

drozer console connect

Comandos Interesantes

Paquete

Encuentra el nombre del paquete filtrando por parte del nombre:

dz> run app.package.list -f sieve
com.mwr.example.sieve

Información básica del paquete:

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

Lee Manifiesto:

run app.package.manifest jakhar.aseem.diva

Superficie de ataque del paquete:

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
  • Actividades: Tal vez puedas iniciar una actividad y evitar algún tipo de autorización que debería impedirte lanzarla.

  • Proveedores de contenido: Tal vez puedas acceder a datos privados o explotar alguna vulnerabilidad (Inyección SQL o Traversal de Ruta).

  • Servicios:

  • es depurable: Más información

Actividades

El valor "android:exported" de un componente de actividad exportado está establecido en "true" en el archivo AndroidManifest.xml:

<activity android:name="com.my.app.Initial" android:exported="true">
</activity>

Listar actividades exportadas:

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

Iniciar actividad:

Tal vez puedas iniciar una actividad y evitar algún tipo de autorización que debería impedirte lanzarla.

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

También puedes iniciar una actividad exportada desde adb:

  • El nombre del paquete es com.example.demo

  • El nombre de la actividad exportada es com.example.test.MainActivity

adb shell am start -n com.example.demo/com.example.test.MainActivity

Proveedores de contenido

Este post era tan extenso que puedes acceder a él en su propia página aquí.

Servicios

Un servicio exportado se declara dentro del Manifest.xml:

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

Dentro del código verifica la función **handleMessage** que recibirá el mensaje:

Listar servicio

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

Interactuar con un servicio

app.service.send            Send a Message to a service, and display the reply
app.service.start           Start Service
app.service.stop            Stop Service

Ejemplo

Eche un vistazo a la ayuda de drozer para app.service.send:

Tenga en cuenta que primero enviará los datos dentro de "msg.what", luego "msg.arg1" y "msg.arg2", debe verificar dentro del código qué información se está utilizando y dónde. Usando la opción --extra puede enviar algo interpretado por "msg.replyTo", y usando --bundle-as-obj creas un objeto con los detalles proporcionados.

En el siguiente ejemplo:

  • 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

Receptores de difusión

En la sección de información básica de Android puedes ver qué es un receptor de difusión.

Después de descubrir estos receptores de difusión, debes verificar el código de los mismos. Presta especial atención a la función onReceive ya que será la encargada de manejar los mensajes recibidos.

Detectar todos los receptores de difusión

run app.broadcast.info #Detects all

Verificar receptores de difusión de una aplicación

#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

Interacciones de Transmisión

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

Enviar un mensaje

En este ejemplo abusando del apk de FourGoats Content Provider puedes enviar un SMS arbitrario a cualquier destino no premium sin pedir permiso al usuario.

Si lees el código, los parámetros "phoneNumber" y "message" deben ser enviados al 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!"

Es debuggeable

Un APK de producción nunca debería ser debuggeable. Esto significa que puedes adjuntar un depurador de Java a la aplicación en ejecución, inspeccionarla en tiempo de ejecución, establecer puntos de interrupción, avanzar paso a paso, recopilar valores de variables e incluso cambiarlos. InfoSec institute tiene un excelente artículo sobre cómo profundizar cuando tu aplicación es debuggable e inyectar código en tiempo de ejecución.

Cuando una aplicación es debuggable, aparecerá en el Manifiesto:

<application theme="@2131296387" debuggable="true"

Puedes encontrar todas las aplicaciones depurables con Drozer:

run app.package.debuggable

Tutoriales

Más información

Consejo de recompensa por errores: Regístrate en Intigriti, una plataforma de recompensas por errores premium creada por hackers, para hackers. ¡Únete a nosotros en https://go.intigriti.com/hacktricks hoy y comienza a ganar recompensas de hasta $100,000!

Aprende a hackear AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Otras formas de apoyar a HackTricks:

Última actualización