# Tutorial de Drozer
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com) * **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
**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**](https://go.intigriti.com/hacktricks) hoy mismo y comienza a ganar recompensas de hasta **$100,000**. {% embed url="https://go.intigriti.com/hacktricks" %} ## APKs para probar * [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (de mrwlabs) * [DIVA](https://payatu.com/wp-content/uploads/2016/01/diva-beta.tar.gz) ## Instalación Instala el cliente Drozer en tu host. Descárgalo desde las [últimas versiones](https://github.com/mwrlabs/drozer/releases). ```bash 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](https://github.com/mwrlabs/drozer/releases). En este momento es [esta](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk). ``` adb install drozer.apk ``` ### Iniciando el servidor El agente se está ejecutando en el puerto 31415, necesitamos hacer [port forwarding](https://en.wikipedia.org/wiki/Port\_forwarding) para establecer la comunicación entre el cliente Drozer y el agente. Aquí está el comando para hacerlo: ``` adb forward tcp:31415 tcp:31415 ``` Finalmente, **lanza** la **aplicación** y presiona el botón "**ON**" ![](<../../../.gitbook/assets/image (63).png>) Y conéctate a ella: ``` drozer console connect ``` ## Comandos Interesantes | **Comandos** | **Descripción** | | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Help MODULE** | Muestra la ayuda del módulo seleccionado. | | **list** | Muestra una lista de todos los módulos de drozer que se pueden ejecutar en la sesión actual. Esto oculta los módulos que no tienes permisos apropiados para ejecutar. | | **shell** | Inicia una shell interactiva de Linux en el dispositivo, en el contexto del Agente. | | **clean** | Elimina los archivos temporales almacenados por drozer en el dispositivo Android. | | **load** | Carga un archivo que contiene comandos de drozer y los ejecuta en secuencia. | | **module** | Encuentra e instala módulos adicionales de drozer desde Internet. | | **unset** | Elimina una variable nombrada que drozer pasa a cualquier shell de Linux que inicia. | | **set** | Almacena un valor en una variable que se pasará como variable de entorno a cualquier shell de Linux iniciada por drozer. | | **shell** | Inicia una shell interactiva de Linux en el dispositivo, en el contexto del Agente. | | **run MODULE** | Ejecuta un módulo de drozer. | | **exploit** | Drozer puede crear exploits para ejecutar en el dispositivo. `drozer exploit list` | | **payload** | Los exploits necesitan un payload. `drozer payload list` | ### 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 ``` Leer **Manifest**: ``` 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**: * **is debuggable**: [Aprende más](./#is-debuggeable) ### Actividades El valor "android:exported" de un componente de actividad exportado se establece en **"true"** en el archivo AndroidManifest.xml: ```markup ``` **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 demasiado grande para estar aquí, así que **puedes** [**acceder a él en su propia página aquí**](exploiting-content-providers.md). ### Servicios Un servicio exportado se declara dentro del Manifest.xml: ```markup ``` Dentro del código, **busca** la función `handleMessage` que **recibirá** el **mensaje**: ![](<../../../.gitbook/assets/image (194).png>) #### Listar servicios ``` 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 Echa un vistazo a la ayuda de **drozer** para `app.service.send`: ![](<../../../.gitbook/assets/image (196) (1).png>) Ten en cuenta que primero enviarás los datos dentro de "_msg.what_", luego "_msg.arg1_" y "_msg.arg2_", debes verificar dentro del código **qué información se está utilizando** y dónde.\ Usando la opción `--extra` puedes 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 ``` ![](<../../../.gitbook/assets/image (195).png>) ### Receptores de difusión Las aplicaciones de Android pueden enviar o recibir mensajes de difusión del sistema Android y de otras aplicaciones de Android, similar al patrón de diseño [publicar-suscribir](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe\_pattern). Estas difusiones se envían cuando ocurre un evento de interés. Por ejemplo, el sistema Android envía difusiones cuando ocurren varios eventos del sistema, como cuando se inicia el sistema o el dispositivo comienza a cargarse. Las aplicaciones también pueden enviar difusiones personalizadas, por ejemplo, para notificar a otras aplicaciones algo que podrían estar interesadas (por ejemplo, se ha descargado algún dato nuevo). Las aplicaciones pueden registrarse para recibir difusiones específicas. Cuando se envía una difusión, el sistema enruta automáticamente las difusiones a las aplicaciones que se han suscrito para recibir ese tipo particular de difusión. Esto podría aparecer dentro del archivo Manifest.xml: ```markup ``` Desde: [https://developer.android.com/guide/components/broadcasts](https://developer.android.com/guide/components/broadcasts) Después de descubrir estos receptores de difusión, **debe verificar el código** de los mismos. Preste 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 ```bash run app.broadcast.info #Detects all ``` #### Verificar los receptores de difusión de una aplicación ```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 ``` #### Interacciones de Difusió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 Content Provider de la aplicación [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk), puedes **enviar un SMS arbitrario** a cualquier destino no premium **sin pedirle permiso** al usuario. ![](<../../../.gitbook/assets/image (199).png>) ![](<../../../.gitbook/assets/image (197) (1).png>) 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 depurable Un APK de producción nunca debería ser depurable. Esto significa que no se puede **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](../exploiting-a-debuggeable-applciation.md) sobre cómo profundizar cuando su aplicación es depurable e inyectar código en tiempo de ejecución. Cuando una aplicación es depurable, aparecerá en el Manifiesto: ``` **Consejo de recompensa por errores**: ¡**regístrese** en **Intigriti**, una plataforma premium de **recompensas por errores creada por hackers, para hackers**! ¡Únase a nosotros en [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoy mismo y comience a ganar recompensas de hasta **$100,000**! {% embed url="https://go.intigriti.com/hacktricks" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥 * ¿Trabaja en una **empresa de ciberseguridad**? ¿Quiere ver su **empresa anunciada en HackTricks**? ¿O quiere tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulte los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)! * Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family) * Obtenga el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com) * **Únase al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígame** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.** * **Comparta sus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.