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

416 lines
22 KiB
Markdown
Raw Normal View History

2023-06-06 18:56:34 +00:00
# Tutorial do Drozer
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
2023-06-06 18:56:34 +00:00
* 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 Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo 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** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
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 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**!
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
2023-06-06 18:56:34 +00:00
* [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)
2023-06-06 18:56:34 +00:00
## Instalação
Instale o Cliente Drozer em seu host. Faça o download da [última versão](https://github.com/mwrlabs/drozer/releases).
```bash
pip install drozer-2.4.4-py2-none-any.whl
pip install twisted
pip install service_identity
```
2023-06-06 18:56:34 +00:00
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
```
2023-06-06 18:56:34 +00:00
### Iniciando o Servidor
O agente está sendo executado na porta 31415, precisamos fazer um [redirecionamento 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:
```
adb forward tcp:31415 tcp:31415
```
Finalmente, **inicie** o **aplicativo** e pressione o botão "**ON**"
![](<../../../.gitbook/assets/image (63).png>)
2023-06-06 18:56:34 +00:00
E conecte-se a ele:
```
drozer console connect
```
2023-06-06 18:56:34 +00:00
## Comandos Interessantes
2023-06-06 18:56:34 +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 os módulos para os quais 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 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 qualquer shell Linux que ele inicia. |
| **set** | Armazena um valor em uma variável que será passada como uma variável de ambiente para qualquer shell Linux iniciado 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 executar 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:
```
dz> run app.package.list -f sieve
com.mwr.example.sieve
```
2023-06-06 18:56:34 +00:00
**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 **Manifesto**:
```
run app.package.manifest jakhar.aseem.diva
```
2023-06-06 18:56:34 +00:00
**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 impedir você de lançá-la.
* **Provedores de conteúdo**: Talvez você possa acessar dados privados ou explorar alguma vulnerabilidade (Injeção de SQL ou Traversão de Caminho).
2023-06-06 18:56:34 +00:00
* **Serviços**:
* **is debuggable**: [Saiba mais](./#is-debuggeable)
2023-06-06 18:56:34 +00:00
### Atividades
2023-06-06 18:56:34 +00:00
O valor "android:exported" de um componente de atividade exportado é definido como **"true"** no arquivo AndroidManifest.xml:
```markup
<activity android:name="com.my.app.Initial" android:exported="true">
</activity>
```
2023-06-06 18:56:34 +00:00
**Listar atividades exportadas**:
To list the exported activities of an Android application, you can use the `drozer` tool. This tool allows you to perform various security assessments on Android apps.
To list the exported activities, follow these steps:
1. Install `drozer` on your machine.
2. Connect your Android device to your machine using a USB cable.
3. Enable USB debugging on your Android device.
4. Open a terminal or command prompt and navigate to the `drozer` installation directory.
5. Run the following command to start the `drozer` console:
```
drozer console connect
```
6. Once the `drozer` console is open, run the following command to start the app you want to assess:
```
run app.package.list -f <package_name>
```
Replace `<package_name>` with the package name of the app you want to assess.
7. After the app is started, run the following command to list the exported activities:
```
run app.activity.info -a <package_name>
```
Replace `<package_name>` with the package name of the app you want to assess.
8. The `drozer` tool will display a list of exported activities along with their corresponding details, such as the activity name, package name, and intent filters.
By listing the exported activities of an Android app, you can identify potential security vulnerabilities and assess the app's overall security posture.
```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
```
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 %}
2023-06-06 18:56:34 +00:00
Você também pode iniciar uma atividade exportada pelo **adb**:
2023-06-06 18:56:34 +00:00
* O nome do pacote é com.example.demo
* O nome da atividade exportada é com.example.test.MainActivity
```bash
adb shell am start -n com.example.demo/com.example.test.MainActivity
```
2023-06-06 18:56:34 +00:00
### Provedores de Conteúdo
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).
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
```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
```
2023-06-06 18:56:34 +00:00
#### **Interagir** com um serviço
To interact with a service, you can use the `run` command in drozer. This command allows you to execute various actions on the target application.
Para interagir com um serviço, você pode usar o comando `run` no drozer. Esse comando permite que você execute várias ações no aplicativo alvo.
The basic syntax for the `run` command is as follows:
A sintaxe básica para o comando `run` é a seguinte:
```
run <module> <action> [options]
```
Where:
- `<module>` is the name of the module you want to run.
- `<action>` is the action you want to perform on the module.
- `[options]` are additional options or parameters required by the module.
Onde:
- `<module>` é o nome do módulo que você deseja executar.
- `<action>` é a ação que você deseja realizar no módulo.
- `[options]` são opções ou parâmetros adicionais necessários pelo módulo.
For example, to list all the activities in the target application, you can use the following command:
Por exemplo, para listar todas as atividades no aplicativo alvo, você pode usar o seguinte comando:
```
run app.activity.info
```
This will display a list of activities along with their corresponding package names.
Isso exibirá uma lista de atividades juntamente com seus respectivos nomes de pacote.
You can also specify additional options or parameters depending on the module and action you are using. For example, to launch a specific activity, you can use the following command:
Você também pode especificar opções ou parâmetros adicionais dependendo do módulo e ação que você está usando. Por exemplo, para iniciar uma atividade específica, você pode usar o seguinte comando:
```
run app.activity.start --component <package_name> <activity_name>
```
Replace `<package_name>` with the package name of the target application and `<activity_name>` with the name of the activity you want to launch.
Substitua `<package_name>` pelo nome do pacote do aplicativo alvo e `<activity_name>` pelo nome da atividade que você deseja iniciar.
By using the `run` command, you can interact with various services and components of the target application, allowing you to perform actions such as starting activities, sending intents, accessing content providers, and more.
Ao usar o comando `run`, você pode interagir com vários serviços e componentes do aplicativo alvo, permitindo que você execute ações como iniciar atividades, enviar intents, acessar provedores de conteúdo e muito mais.
```
app.service.send Send a Message to a service, and display the reply
app.service.start Start Service
app.service.stop Stop Service
```
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>)
Observe 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)`
```
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>)
2023-06-06 18:56:34 +00:00
### 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 é inicializado 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 do seu interesse (por exemplo, algum novo dado foi baixado).
Os aplicativos podem se registrar para receber transmissões específicas. Quando uma transmissão é enviada, o sistema automaticamente encaminha as transmissões para os aplicativos que se inscreveram para receber aquele tipo específico de transmissão.
2023-06-06 18:56:34 +00:00
Isso pode aparecer dentro do arquivo Manifest.xml:
```markup
<receiver android:name=".MyBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
<action android:name="android.intent.action.INPUT_METHOD_CHANGED" />
</intent-filter>
</receiver>
```
2023-06-06 18:56:34 +00:00
De: [https://developer.android.com/guide/components/broadcasts](https://developer.android.com/guide/components/broadcasts)
Após descobrir esses Receptores de Transmissão, você deve **verificar o código** deles. Preste atenção especial na função **`onReceive`**, pois ela será responsável por lidar com as mensagens recebidas.
2023-06-06 18:56:34 +00:00
#### **Detectar todos** os receptores de transmissão
```bash
run app.broadcast.info #Detects all
```
2023-06-06 18:56:34 +00:00
#### Verificar receptores de transmissão de um aplicativo
To check the broadcast receivers of an app, you can use the `drozer` tool. Broadcast receivers are components in an Android app that listen for system-wide events or custom events sent by other apps. They can be potential entry points for attackers to exploit.
2023-06-06 18:56:34 +00:00
To list the broadcast receivers of an app, follow these steps:
2023-06-06 18:56:34 +00:00
1. Install and set up `drozer` on your machine.
2. Connect your Android device to your machine using a USB cable.
3. Open a terminal and run the following command to start a `drozer` session:
2023-06-06 18:56:34 +00:00
```
drozer console connect
```
4. Once the session is started, run the following command to list the broadcast receivers of the target app:
```
run app.broadcast.info -a <package_name>
```
2023-06-06 18:56:34 +00:00
Replace `<package_name>` with the package name of the app you want to test.
5. `drozer` will display a list of broadcast receivers along with their corresponding permissions and exported status. Analyze the output to identify any potential security vulnerabilities.
By checking the broadcast receivers of an app, you can identify any insecure or misconfigured receivers that may pose a risk to the app's security.
```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
```
2023-06-06 18:56:34 +00:00
#### Interações de Broadcast
Broadcasts são uma forma de comunicação entre componentes de um aplicativo Android. Eles permitem que um componente envie uma mensagem para todos os outros componentes registrados para receber esse tipo específico de mensagem. Essas mensagens podem ser usadas para iniciar ações em outros componentes, como iniciar uma atividade, exibir uma notificação ou executar um serviço em segundo plano.
No contexto da segurança, os broadcasts podem ser explorados por hackers para realizar ataques em aplicativos Android. Os hackers podem interceptar e manipular broadcasts para obter acesso não autorizado a informações confidenciais ou para executar ações maliciosas no dispositivo.
Neste tutorial, vamos explorar técnicas de pentesting para identificar e explorar vulnerabilidades relacionadas a interações de broadcast em aplicativos Android. Vamos usar a ferramenta Drozer, uma poderosa ferramenta de teste de segurança para aplicativos Android, para realizar esses testes.
Vamos começar examinando os diferentes tipos de interações de broadcast e como eles podem ser explorados em um contexto de pentesting.
```
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
```
2023-06-06 18:56:34 +00:00
#### Enviar uma mensagem
Neste exemplo, abusando do [apk FourGoats](https://github.com/linkedin/qark/blob/master/tests/goatdroid.apk) do 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 (199).png>)
2022-10-22 15:26:54 +00:00
![](<../../../.gitbook/assets/image (197) (1).png>)
2023-06-06 18:56:34 +00:00
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!"
```
### Está depurável
Um APK de produção nunca deve estar 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-application.md) sobre como investigar mais a fundo 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:
```html
<application theme="@2131296387" debuggable="true"
```
2023-06-06 18:56:34 +00:00
Você pode encontrar todos os aplicativos depuráveis com o **Drozer**:
```bash
run app.package.debuggable
```
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)
* [http://mobiletools.mwrinfosecurity.com/Using-Drozer-for-application-security-assessments/](http://mobiletools.mwrinfosecurity.com/Using-Drozer-for-application-security-assessments/)
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 **recompensa por bugs 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**!
2022-10-27 23:22:18 +00:00
{% embed url="https://go.intigriti.com/hacktricks" %}
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? Ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
2023-06-06 18:56:34 +00:00
* 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 Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo 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 para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
2022-04-28 16:01:33 +00:00
</details>