hacktricks/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md

336 lines
15 KiB
Markdown
Raw Normal View History

2024-04-06 19:38:49 +00:00
# Drozer Tutorial
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Outras maneiras de apoiar o HackTricks:
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* 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)
2024-04-06 19:38:49 +00:00
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
2022-04-28 16:01:33 +00:00
</details>
2022-10-27 23:22:18 +00:00
<img src="../../../.gitbook/assets/i3.png" alt="" data-size="original">
**Dica de recompensa por bugs**: **inscreva-se** no **Intigriti**, uma plataforma de **bug bounty premium 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**!
2022-10-27 23:22:18 +00:00
{% embed url="https://go.intigriti.com/hacktricks" %}
2023-06-06 18:56:34 +00:00
## APKs para testar
* [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)
2024-04-06 19:38:49 +00:00
**Partes deste tutorial foram extraídas do** [**pdf de documentação do Drozer**](https://labs.withsecure.com/content/dam/labs/docs/mwri-drozer-user-guide-2015-03-23.pdf)**.**
2023-06-06 18:56:34 +00:00
## Instalação
Instale o Cliente Drozer dentro do seu host. Baixe-o das [últimas versões](https://github.com/mwrlabs/drozer/releases).
2024-04-06 19:38:49 +00:00
```bash
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
```
2024-04-06 19:38:49 +00:00
Baixe e instale o arquivo APK do drozer nas [ú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).
2024-04-06 19:38:49 +00:00
```bash
adb install drozer.apk
```
2024-04-06 19:38:49 +00:00
2023-06-06 18:56:34 +00:00
### Iniciando o Servidor
O agente está em execução na porta 31415, precisamos fazer [encaminhamento de 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:
2024-04-06 19:38:49 +00:00
```bash
adb forward tcp:31415 tcp:31415
```
2024-04-06 19:38:49 +00:00
Finalmente, **inicie** o **aplicativo** e pressione o botão "**ON**" na parte inferior
![](<../../../.gitbook/assets/image (63).png>)
2023-06-06 18:56:34 +00:00
E conecte-se a ele:
2024-04-06 19:38:49 +00:00
```bash
drozer console connect
```
2024-04-06 19:38:49 +00:00
2023-06-06 18:56:34 +00:00
## Comandos Interessantes
2024-04-06 19:38:49 +00:00
| **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 para os quais você não tem permissões apropriadas para executar. |
2024-04-06 19:38:49 +00:00
| **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 do drozer e os executa em sequência. |
| **module** | Encontra e instala módulos adicionais do drozer 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 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 do drozer. |
| **exploit** | O Drozer pode criar exploits para serem executados no dispositivo. `drozer exploit list` |
| **payload** | Os exploits precisam de um payload. `drozer payload list` |
2023-06-06 18:56:34 +00:00
### Pacote
Encontre o **nome** do pacote filtrando por parte do nome:
2024-04-06 19:38:49 +00:00
```bash
dz> run app.package.list -f sieve
com.mwr.example.sieve
```
2024-04-06 19:38:49 +00:00
**Informações Básicas** do pacote:
2024-04-06 19:38:49 +00:00
```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
```
2024-04-06 19:38:49 +00:00
Leia **Manifest**:
2024-04-06 19:38:49 +00:00
```bash
run app.package.manifest jakhar.aseem.diva
```
2024-04-06 19:38:49 +00:00
2023-06-06 18:56:34 +00:00
**Superfície de ataque** do pacote:
2024-04-06 19:38:49 +00:00
```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
```
2024-04-06 19:38:49 +00:00
* **Atividades**: Talvez você consiga iniciar uma atividade e contornar algum tipo de autorização que deveria impedir você de lançá-la.
* **Provedores de conteúdo**: Talvez você consiga acessar dados privados ou explorar alguma vulnerabilidade (SQL Injection ou Traversão de Caminho).
* **Serviços**:
2023-06-06 18:56:34 +00:00
* **is debuggable**: [Saiba mais](./#is-debuggeable)
### Atividades
O valor "android:exported" de um componente de atividade exportado é definido como **"true"** no arquivo AndroidManifest.xml:
2024-04-06 19:38:49 +00:00
```markup
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>
```
2024-04-06 19:38:49 +00:00
2023-06-06 18:56:34 +00:00
**Listar atividades exportadas**:
2024-04-06 19:38:49 +00:00
```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
```
2024-04-06 19:38:49 +00:00
2023-06-06 18:56:34 +00:00
**Iniciar atividade**:
Talvez você possa iniciar uma atividade e contornar algum tipo de autorização que deveria impedir você 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 pelo **adb**:
* PackageName é com.example.demo
* Nome da Atividade Exportada é com.example.test.MainActivity
2024-04-06 19:38:49 +00:00
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
2024-04-06 19:38:49 +00:00
2023-06-06 18:56:34 +00:00
### Provedores de Conteúdo
Este post foi muito grande para estar aqui, então **você pode** [**acessá-lo em sua própria página aqui**](exploiting-content-providers.md).
2023-06-06 18:56:34 +00:00
### Serviços
2023-06-06 18:56:34 +00:00
Um serviço exportado é declarado dentro do Manifest.xml:
{% code overflow="wrap" %}
```markup
<service android:name=".AuthService" android:exported="true" android:process=":remote"/>
```
{% endcode %}
Dentro do código **verifique** a função \*\*`handleMessage`\*\* que irá **receber** a **mensagem**:
![](<../../../.gitbook/assets/image (194).png>)
2023-06-06 18:56:34 +00:00
#### Listar serviço
2024-04-06 19:38:49 +00:00
```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
```
2024-04-06 19:38:49 +00:00
2023-06-06 18:56:34 +00:00
#### **Interagir** com um serviço
2024-04-06 19:38:49 +00:00
```bash
app.service.send Send a Message to a service, and display the reply
app.service.start Start Service
app.service.stop Stop Service
```
2024-04-06 19:38:49 +00:00
2023-06-06 18:56:34 +00:00
#### Exemplo
2023-06-06 18:56:34 +00:00
Dê uma olhada na ajuda do **drozer** para `app.service.send`:
2022-10-22 15:26:54 +00:00
![](<../../../.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.
2023-06-06 18:56:34 +00:00
No exemplo a seguir:
* `what == 2354`
* `arg1 == 9234`
* `arg2 == 1`
* `replyTo == object(string com.mwr.example.sieve.PIN 1337)`
2024-04-06 19:38:49 +00:00
```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
```
2024-04-06 19:38:49 +00:00
![](<../../../.gitbook/assets/image (195).png>)
### Receptores de Transmissão
**Na seção de informações básicas do Android, você pode ver o que é um Receptor de Transmissão**.
Após descobrir esses Receptores de Transmissão, você deve **verificar o código** deles. Preste atenção especial na função **`onReceive`** pois será responsável por lidar com as mensagens recebidas.
#### **Detectar todos** os receptores de transmissão
2024-04-06 19:38:49 +00:00
```bash
run app.broadcast.info #Detects all
```
2024-04-06 19:38:49 +00:00
#### Verificar receptores de transmissão de um aplicativo
2024-04-06 19:38:49 +00:00
```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
```
2024-04-06 19:38:49 +00:00
#### Interações de **Transmissão**
2024-04-06 19:38:49 +00:00
```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
```
2024-04-06 19:38:49 +00:00
2023-06-06 18:56:34 +00:00
#### Enviar uma mensagem
Neste exemplo, abusando do provedor de conteúdo 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>)
2022-10-22 15:26:54 +00:00
![](<../../../.gitbook/assets/image (197) (1).png>)
Se você ler o código, os parâmetros "_phoneNumber_" e "_message_" devem ser enviados para o provedor de conteúdo.
2024-04-06 19:38:49 +00:00
```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!"
```
2024-04-06 19:38:49 +00:00
### Está depurável
Um APK de produção nunca deve estar depurável.\
2024-04-06 19:38:49 +00:00
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, reunir valores de variáveis e até mesmo alterá-los. [O InfoSec Institute tem um excelente artigo](https://github.com/carlospolop/hacktricks/blob/pt/mobile-pentesting/android-app-pentesting/exploiting-a-debuggeable-application.md) sobre aprofundar quando sua aplicação está depurável e injetar código em tempo de execução.
Quando uma aplicação está depurável, ela aparecerá no Manifesto:
2024-04-06 19:38:49 +00:00
```xml
<application theme="@2131296387" debuggable="true"
```
2024-04-06 19:38:49 +00:00
Você pode encontrar todas as aplicações depuráveis com o **Drozer**:
2024-04-06 19:38:49 +00:00
```bash
run app.package.debuggable
```
2024-04-06 19:38:49 +00:00
2023-06-06 18:56:34 +00:00
## Tutoriais
* [https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref](https://resources.infosecinstitute.com/android-penetration-tools-walkthrough-series-drozer/#gref)
2024-04-06 19:38:49 +00:00
* [https://github.com/mgcfish/mobiletools/blob/master/\_posts/2016-08-01-Using-Drozer-for-application-security-assessments.md](https://github.com/mgcfish/mobiletools/blob/master/\_posts/2016-08-01-Using-Drozer-for-application-security-assessments.md)
* [https://www.hackingarticles.in/android-penetration-testing-drozer/](https://www.hackingarticles.in/android-penetration-testing-drozer/)
* [https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac](https://medium.com/@ashrafrizvi3006/how-to-test-android-application-security-using-drozer-edc002c5dcac)
2023-06-06 18:56:34 +00:00
## Mais informações
* [https://blog.dixitaditya.com/android-pentesting-cheatsheet/](https://blog.dixitaditya.com/android-pentesting-cheatsheet/)
2022-04-28 16:01:33 +00:00
2022-10-27 23:22:18 +00:00
<img src="../../../.gitbook/assets/i3.png" alt="" data-size="original">
**Dica de recompensa por bugs**: **inscreva-se** na **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**!
2022-10-27 23:22:18 +00:00
{% embed url="https://go.intigriti.com/hacktricks" %}
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Aprenda hacking na AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Outras formas de apoiar o HackTricks:
2022-04-28 16:01:33 +00:00
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
* 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)
2024-04-06 19:38:49 +00:00
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus 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).
2022-04-28 16:01:33 +00:00
</details>