hacktricks/mobile-pentesting/android-app-pentesting/frida-tutorial/objection-tutorial.md

256 lines
13 KiB
Markdown
Raw Normal View History

2023-06-06 18:56:34 +00:00
# Tutorial do Objection
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
2023-06-06 18:56:34 +00:00
* 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 [**The PEASS Family**](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)**.
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">
2023-06-06 18:56:34 +00:00
**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**!
2022-10-27 23:22:18 +00:00
{% embed url="https://go.intigriti.com/hacktricks" %}
2023-06-06 18:56:34 +00:00
## **Introdução**
[![objection](https://github.com/sensepost/objection/raw/master/images/objection.png)](https://github.com/sensepost/objection)
2023-06-06 18:56:34 +00:00
**objection - Exploração de tempo de execução móvel**
2023-06-06 18:56:34 +00:00
`objection` é um kit de ferramentas de exploração móvel em tempo de execução, alimentado por [Frida](https://www.frida.re). Foi construído com o objetivo de ajudar a avaliar aplicativos móveis e sua postura de segurança sem a necessidade de um dispositivo móvel com jailbreak ou root.
2023-06-06 18:56:34 +00:00
**Nota:** Isso não é uma forma de bypass de jailbreak / root. Ao usar o `objection`, você ainda está limitado por todas as restrições impostas pelo sandbox aplicável que está enfrentando.
2023-06-06 18:56:34 +00:00
### Resumo
2023-06-06 18:56:34 +00:00
O **objetivo** do **objection** é permitir que o usuário chame as **principais ações que o Frida oferece**. **Caso contrário**, o usuário precisará criar um **único script para cada aplicativo** que deseja testar.
2022-09-01 21:06:19 +00:00
## Tutorial
2023-06-06 18:56:34 +00:00
Para este tutorial, vou usar o APK que você pode baixar aqui:
{% file src="../../../.gitbook/assets/app-release.zip" %}
2023-06-06 18:56:34 +00:00
Ou de seu [repositório original](https://github.com/asvid/FridaApp) (baixe o app-release.apk)
2023-06-06 18:56:34 +00:00
### Instalação
```
pip3 install objection
```
2023-06-06 18:56:34 +00:00
### Conexão
2023-06-06 18:56:34 +00:00
Faça uma **conexão ADB regular** e **inicie** o servidor **frida** no dispositivo (e verifique se o frida está funcionando tanto no cliente quanto no servidor).
2023-06-06 18:56:34 +00:00
Se você estiver usando um dispositivo **com root**, é necessário selecionar o aplicativo que deseja testar dentro da opção _**--gadget**_. Neste caso:
```
objection --gadget asvid.github.io.fridaapp explore
```
2023-06-06 18:56:34 +00:00
### Ações Básicas
2023-06-06 18:56:34 +00:00
Nem todos os comandos possíveis do Objection serão listados neste tutorial, apenas aqueles que eu achei mais úteis.
2023-06-06 18:56:34 +00:00
#### Ambiente
2023-06-06 18:56:34 +00:00
Algumas informações interessantes (como senhas ou caminhos) podem ser encontradas dentro do ambiente.
```
env
```
2023-06-06 18:56:34 +00:00
#### Informações sobre Frida
2023-06-06 18:56:34 +00:00
Frida is a dynamic instrumentation toolkit that allows developers, reverse-engineers, and security researchers to analyze and manipulate running applications on multiple platforms, including Windows, macOS, Linux, iOS, and Android.
2023-06-06 18:56:34 +00:00
Frida é um conjunto de ferramentas de instrumentação dinâmica que permite a desenvolvedores, engenheiros reversos e pesquisadores de segurança analisar e manipular aplicativos em execução em várias plataformas, incluindo Windows, macOS, Linux, iOS e Android.
```
frida
```
2022-09-01 21:06:19 +00:00
#### Upload/Download
2023-06-06 18:56:34 +00:00
#### Envio/Download
2021-04-12 10:24:17 +00:00
```bash
file download <remote path> [<local path>]
file upload <local path> [<remote path>]
```
2023-06-06 18:56:34 +00:00
#### Importar script do frida
2021-04-12 10:24:17 +00:00
```bash
import <local path frida-script>
```
2022-09-01 21:06:19 +00:00
#### SSLPinning
2023-06-06 18:56:34 +00:00
O SSL Pinning é uma técnica de segurança que consiste em fixar o certificado SSL do servidor para evitar ataques Man-in-the-Middle (MITM). Isso significa que o aplicativo cliente só confiará no certificado SSL específico do servidor, em vez de confiar em qualquer certificado emitido por uma autoridade de certificação confiável. Essa técnica é amplamente utilizada em aplicativos móveis para garantir a segurança da comunicação entre o aplicativo e o servidor.
2021-04-12 10:24:17 +00:00
```bash
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.
```
2023-06-06 18:56:34 +00:00
#### Detecção de Root
2021-04-12 10:24:17 +00:00
```bash
android root disable #Attempts to disable root detection on Android devices.
2021-01-13 09:35:52 +00:00
android root simulate #Attempts to simulate a rooted Android environment.
```
2023-06-06 18:56:34 +00:00
#### Executar Comando
2021-04-12 10:24:17 +00:00
```bash
android shell_exec whoami
```
2023-06-06 18:56:34 +00:00
#### Capturas de tela
2021-04-12 10:24:17 +00:00
```bash
android ui screenshot /tmp/screenshot
2021-04-12 10:24:17 +00:00
android ui FLAG_SECURE false #This may enable you to take screenshots using the hardware keys
```
2023-06-06 18:56:34 +00:00
### Análise estática tornada dinâmica
2023-06-06 18:56:34 +00:00
Em um aplicativo real, devemos conhecer todas as informações descobertas nesta parte antes de usar a objeção graças à **análise estática**. De qualquer forma, desta forma, talvez você possa ver **algo novo**, já que aqui você terá apenas uma lista completa de classes, métodos e objetos exportados.
2023-06-06 18:56:34 +00:00
Isso também é útil se, de alguma forma, você estiver **incapaz de obter algum código-fonte legível** do aplicativo.
2023-06-06 18:56:34 +00:00
#### Listar atividades, receptores e serviços
```
android hooking list activities
```
2022-09-01 22:02:18 +00:00
![](<../../../.gitbook/assets/image (78).png>)
2023-06-06 18:56:34 +00:00
Este tutorial irá mostrar como usar o Objection com o Frida para realizar testes de penetração em aplicativos Android. O Objection é uma ferramenta que permite a manipulação dinâmica de aplicativos Android, enquanto o Frida é uma estrutura de análise e instrumentação que permite a injeção de código em aplicativos em execução. Juntos, eles fornecem uma poderosa ferramenta para testes de penetração em aplicativos Android.
```
android hooking list services
android hooking list receivers
```
2023-06-06 18:56:34 +00:00
Frida lançará um erro se nenhum for encontrado
2023-06-06 18:56:34 +00:00
#### Obtendo a atividade atual
```
android hooking get current_activity
```
2023-06-06 18:56:34 +00:00
#### Procurar Classes
2023-06-06 18:56:34 +00:00
Vamos começar procurando por classes dentro do nosso aplicativo.
```
android hooking search classes asvid.github.io.fridaapp
```
2023-06-06 18:56:34 +00:00
#### Métodos de busca de uma classe
2023-06-06 18:56:34 +00:00
Agora vamos extrair os métodos dentro da classe _MainActivity:_
```
android hooking search methods asvid.github.io.fridaapp MainActivity
```
2023-06-06 18:56:34 +00:00
#### Listar métodos declarados de uma classe com seus parâmetros
2023-06-06 18:56:34 +00:00
Vamos descobrir quais parâmetros os métodos da classe precisam:
```
android hooking list class_methods asvid.github.io.fridaapp.MainActivity
```
2023-06-06 18:56:34 +00:00
#### Listar classes
2023-06-06 18:56:34 +00:00
Você também pode listar todas as classes que foram carregadas dentro da aplicação atual:
```
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.
```
2023-06-06 18:56:34 +00:00
Isso é muito útil se você quiser **interceptar o método de uma classe e só souber o nome da classe**. Você pode usar esta função para **procurar qual módulo possui a classe** e, em seguida, interceptar seu método.
2023-06-06 18:56:34 +00:00
### Interceptar é fácil
2023-06-06 18:56:34 +00:00
#### Interceptar (observar) um método
2023-06-06 18:56:34 +00:00
A partir do [código-fonte](https://github.com/asvid/FridaApp/blob/master/app/src/main/java/asvid/github/io/fridaapp/MainActivity.kt) do aplicativo, sabemos que a **função** _**sum()**_ **de** _**MainActivity**_ é executada **a cada segundo**. Vamos tentar **capturar todas as informações possíveis** cada vez que a função é chamada (argumentos, valor de retorno e backtrace):
```
android hooking watch class_method asvid.github.io.fridaapp.MainActivity.sum --dump-args --dump-backtrace --dump-return
```
2023-06-06 18:56:34 +00:00
#### Hooking (observando) uma classe inteira
2023-06-06 18:56:34 +00:00
Na verdade, eu acho todos os métodos da classe MainActivity realmente interessantes, vamos **observá-los todos**. Tenha cuidado, isso pode **crashar** um aplicativo.
```
android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --dump-return
```
2023-06-06 18:56:34 +00:00
Se você interagir com o aplicativo enquanto a classe estiver conectada, você verá quando **cada função é chamada**, seus **argumentos** e o valor de **retorno**.
![](<../../../.gitbook/assets/image (72).png>)
2023-06-06 18:56:34 +00:00
#### Alterando o valor booleano de retorno de uma função
2023-06-06 18:56:34 +00:00
A partir do código-fonte, você pode ver que a função _checkPin_ recebe uma _String_ como argumento e retorna um _boolean_. Vamos fazer a função **sempre retornar verdadeiro**:
![](<../../../.gitbook/assets/image (74).png>)
2023-06-06 18:56:34 +00:00
Agora, se você escrever qualquer coisa na caixa de texto para o código PIN, verá que qualquer coisa é válida:
![](<../../../.gitbook/assets/image (77).png>)
2023-06-06 18:56:34 +00:00
### Instâncias de classe
2023-06-06 18:56:34 +00:00
Procure e imprima **instâncias ativas de uma classe Java específica**, especificada por um nome de classe totalmente qualificado. Out é o resultado de uma tentativa de obter um valor de string para uma objeção descoberta que normalmente **contém valores de propriedade para o objeto**.
```
android heap print_instances <class>
```
2022-09-01 21:06:19 +00:00
### Keystore/Intents
2023-06-06 18:56:34 +00:00
Você pode manipular o keystore e intents usando:
```
android keystore list
android intents launch_activity
android intent launch_service
```
2023-06-06 18:56:34 +00:00
### Memória
2023-06-06 18:56:34 +00:00
#### Despejo
2021-02-20 13:33:50 +00:00
```bash
memory dump all <local destination> #Dump all memory
memory dump from_base <base_address> <size_to_dump> <local_destination> #Dump a part
```
2023-06-06 18:56:34 +00:00
#### Lista
```
memory list modules
```
2022-09-30 10:43:59 +00:00
![](<../../../.gitbook/assets/image (66).png>)
2023-06-06 18:56:34 +00:00
Na parte inferior da lista, você pode ver o frida:
2022-09-30 10:43:59 +00:00
![](<../../../.gitbook/assets/image (67).png>)
2023-06-06 18:56:34 +00:00
Vamos verificar o que o frida está exportando:
2022-09-30 10:43:59 +00:00
![](<../../../.gitbook/assets/image (68).png>)
2023-06-06 18:56:34 +00:00
#### Busca/Escrita
2023-06-06 18:56:34 +00:00
Você também pode buscar e escrever na memória com o objection:
```
memory search "<pattern eg: 41 41 41 ?? 41>" (--string) (--offsets-only)
memory write "<address>" "<pattern eg: 41 41 41 41>" (--string)
```
2022-09-01 21:06:19 +00:00
### SQLite
2023-06-06 18:56:34 +00:00
Você pode usar o comando `sqlite` para interagir com bancos de dados SQLite.
2023-06-06 18:56:34 +00:00
### Sair
```
exit
```
2023-06-06 18:56:34 +00:00
## O que falta no Objection
2023-06-06 18:56:34 +00:00
* Os métodos de hooking às vezes fazem com que o aplicativo falhe (isso também é por causa do Frida).
* Você não pode usar as instâncias das classes para chamar funções da instância. E você não pode criar novas instâncias de classes e usá-las para chamar funções.
* Não há um atalho (como o de sslpinnin) para hook todos os métodos de criptografia comuns usados pelo aplicativo para ver texto cifrado, texto simples, chaves, IVs e algoritmos usados.
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">
2023-06-06 18:56:34 +00:00
**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**!
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
2023-06-06 18:56:34 +00:00
* 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 [**The PEASS Family**](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)**.
2022-04-28 16:01:33 +00:00
</details>