mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-23 21:24:06 +00:00
Translated ['mobile-pentesting/android-app-pentesting/apk-decompilers.md
This commit is contained in:
parent
09dcc3dfb1
commit
622b4d57ca
5 changed files with 156 additions and 96 deletions
|
@ -1,8 +1,8 @@
|
|||
# APK decompilers
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Aprenda e pratique Hacking AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprenda e pratique Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -14,26 +14,24 @@ Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data
|
|||
|
||||
</details>
|
||||
{% endhint %}
|
||||
{% endhint %}
|
||||
|
||||
**Para mais detalhes sobre cada ferramenta, confira o post original em [https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr](https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr)**
|
||||
|
||||
**Para mais detalhes sobre cada ferramenta, confira o post original em** [**https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr**](https://eiken.dev/blog/2021/02/how-to-break-your-jar-in-2021-decompilation-guide-for-jars-and-apks/#cfr)
|
||||
|
||||
### [JD-Gui](https://github.com/java-decompiler/jd-gui)
|
||||
|
||||
Como o pioneiro descompilador GUI Java, **JD-Gui** permite que você investigue o código Java dentro de arquivos APK. É simples de usar; após obter o APK, basta abri-lo com JD-Gui para inspecionar o código.
|
||||
Como o pioneiro descompilador GUI Java, **JD-Gui** permite que você investigue código Java dentro de arquivos APK. É simples de usar; após obter o APK, basta abri-lo com JD-Gui para inspecionar o código.
|
||||
|
||||
### [Jadx](https://github.com/skylot/jadx)
|
||||
|
||||
**Jadx** oferece uma interface amigável para descompilar código Java de aplicativos Android. É recomendado por sua facilidade de uso em diferentes plataformas.
|
||||
|
||||
- Para iniciar a GUI, navegue até o diretório bin e execute: `jadx-gui`
|
||||
- Para uso na linha de comando, descompile um APK com: `jadx app.apk`
|
||||
- Para especificar um diretório de saída ou ajustar opções de descompilação: `jadx app.apk -d <caminho para o diretório de saída> --no-res --no-src --no-imports`
|
||||
* Para iniciar a GUI, navegue até o diretório bin e execute: `jadx-gui`
|
||||
* Para uso em linha de comando, descompile um APK com: `jadx app.apk`
|
||||
* Para especificar um diretório de saída ou ajustar opções de descompilação: `jadx app.apk -d <caminho para o diretório de saída> --no-res --no-src --no-imports`
|
||||
|
||||
### [GDA-android-reversing-Tool](https://github.com/charles2gan/GDA-android-reversing-Tool)
|
||||
|
||||
**GDA**, uma ferramenta exclusiva para Windows, oferece recursos extensivos para engenharia reversa de aplicativos Android. Instale e execute o GDA em seu sistema Windows, em seguida, carregue o arquivo APK para análise.
|
||||
**GDA**, uma ferramenta apenas para Windows, oferece recursos extensivos para engenharia reversa de aplicativos Android. Instale e execute o GDA em seu sistema Windows, depois carregue o arquivo APK para análise.
|
||||
|
||||
### [Bytecode-Viewer](https://github.com/Konloch/bytecode-viewer/releases)
|
||||
|
||||
|
@ -43,31 +41,48 @@ Com **Bytecode-Viewer**, você pode analisar arquivos APK usando múltiplos desc
|
|||
|
||||
**Enjarify** traduz bytecode Dalvik para bytecode Java, permitindo que ferramentas de análise Java analisem aplicativos Android de forma mais eficaz.
|
||||
|
||||
- Para usar o Enjarify, execute: `enjarify app.apk`
|
||||
Isso gera o bytecode Java equivalente ao APK fornecido.
|
||||
* Para usar o Enjarify, execute: `enjarify app.apk` Isso gera o bytecode Java equivalente do APK fornecido.
|
||||
|
||||
### [CFR](https://github.com/leibnitz27/cfr)
|
||||
|
||||
**CFR** é capaz de descompilar recursos modernos do Java. Use-o da seguinte forma:
|
||||
|
||||
- Para descompilação padrão: `java -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
|
||||
- Para arquivos JAR grandes, ajuste a alocação de memória da JVM: `java -Xmx4G -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
|
||||
* Para descompilação padrão: `java -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
|
||||
* Para arquivos JAR grandes, ajuste a alocação de memória da JVM: `java -Xmx4G -jar ./cfr.jar "app.jar" --outputdir "output_directory"`
|
||||
|
||||
### [Fernflower](https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine)
|
||||
|
||||
**Fernflower**, um descompilador analítico, requer construção a partir do código-fonte. Após a construção:
|
||||
|
||||
- Descompile um arquivo JAR: `java -jar ./fernflower.jar "app.jar" "output_directory"`
|
||||
Em seguida, extraia os arquivos `.java` do JAR gerado usando `unzip`.
|
||||
* Descompile um arquivo JAR: `java -jar ./fernflower.jar "app.jar" "output_directory"` Em seguida, extraia os arquivos `.java` do JAR gerado usando `unzip`.
|
||||
|
||||
### [Krakatau](https://github.com/Storyyeller/Krakatau)
|
||||
|
||||
**Krakatau** oferece controle detalhado sobre a descompilação, especialmente para lidar com bibliotecas externas.
|
||||
|
||||
- Use Krakatau especificando o caminho da biblioteca padrão e o arquivo JAR a ser descompilado: `./Krakatau/decompile.py -out "output_directory" -skip -nauto -path "./jrt-extractor/rt.jar" "app.jar"`
|
||||
* Use Krakatau especificando o caminho da biblioteca padrão e o arquivo JAR a ser descompilado: `./Krakatau/decompile.py -out "output_directory" -skip -nauto -path "./jrt-extractor/rt.jar" "app.jar"`
|
||||
|
||||
### [procyon](https://github.com/mstrobel/procyon)
|
||||
|
||||
Para descompilação simples com **procyon**:
|
||||
|
||||
- Descompile um arquivo JAR para um diretório especificado: `procyon -jar "app.jar" -o "output_directory"`
|
||||
* Descompile um arquivo JAR para um diretório especificado: `procyon -jar "app.jar" -o "output_directory"`
|
||||
|
||||
### [frida-DEXdump](https://github.com/hluwa/frida-dexdump)
|
||||
|
||||
Esta ferramenta pode ser usada para despejar o DEX de um APK em execução na memória. Isso ajuda a superar a ofuscação estática que é removida enquanto a aplicação é executada na memória.
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprenda e pratique Hacking AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprenda e pratique Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
|
||||
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe 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).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# iOS Testing Environment
|
||||
|
||||
{% hint style="success" %}
|
||||
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Learn & practice AWS Hacking:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Learn & practice GCP Hacking: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -14,23 +14,22 @@ Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-s
|
|||
|
||||
</details>
|
||||
{% endhint %}
|
||||
{% endhint %}
|
||||
|
||||
## Apple Developer Program
|
||||
|
||||
Uma **identidade de provisionamento** é uma coleção de chaves públicas e privadas associadas a uma conta de desenvolvedor Apple. Para **assinar aplicativos**, você precisa pagar **99$/ano** para se registrar no **Apple Developer Program** e obter sua identidade de provisionamento. Sem isso, você não poderá executar aplicativos a partir do código-fonte em um dispositivo físico. Outra opção para fazer isso é usar um **dispositivo com jailbreak**.
|
||||
Uma **identidade de provisionamento** é uma coleção de chaves públicas e privadas que estão associadas a uma conta de desenvolvedor da Apple. Para **assinar aplicativos**, você precisa pagar **99$/ano** para se registrar no **Apple Developer Program** e obter sua identidade de provisionamento. Sem isso, você não poderá executar aplicativos a partir do código-fonte em um dispositivo físico. Outra opção para fazer isso é usar um **dispositivo com jailbreak**.
|
||||
|
||||
A partir do Xcode 7.2, a Apple forneceu uma opção para criar um **perfil de provisionamento de desenvolvimento iOS gratuito** que permite escrever e testar seu aplicativo em um iPhone real. Vá para _Xcode_ --> _Preferences_ --> _Accounts_ --> _+_ (Adicionar novo Apple ID com suas credenciais) --> _Clique no Apple ID criado_ --> _Manage Certificates_ --> _+_ (Apple Development) --> _Done_\
|
||||
\_\_Então, para executar seu aplicativo no seu iPhone, você precisa primeiro **indicar ao iPhone para confiar no computador.** Depois, você pode tentar **executar o aplicativo no celular a partir do Xcode,** mas um erro aparecerá. Então vá para _Settings_ --> _General_ --> _Profiles and Device Management_ --> Selecione o perfil não confiável e clique em "**Trust**".
|
||||
|
||||
Note que **aplicativos assinados pelo mesmo certificado de assinatura podem compartilhar recursos de maneira segura, como itens do keychain**.
|
||||
Observe que **aplicativos assinados pelo mesmo certificado de assinatura podem compartilhar recursos de maneira segura, como itens do keychain**.
|
||||
|
||||
Os perfis de provisionamento são armazenados dentro do telefone em **`/Library/MobileDevice/ProvisioningProfiles`**
|
||||
|
||||
## **Simulator**
|
||||
|
||||
{% hint style="info" %}
|
||||
Note que um **simulador não é o mesmo que um emulador**. O simulador apenas simula o comportamento e as funções do dispositivo, mas não os utiliza realmente.
|
||||
Observe que um **simulador não é o mesmo que um emulador**. O simulador apenas simula o comportamento do dispositivo e suas funções, mas não os utiliza realmente.
|
||||
{% endhint %}
|
||||
|
||||
### **Simulator**
|
||||
|
@ -52,7 +51,7 @@ Para abrir o simulador, execute o Xcode, depois pressione na _aba Xcode_ --> _Op
|
|||
|
||||
### Applications in the Simulator
|
||||
|
||||
Dentro de `/Users/<username>/Library/Developer/CoreSimulator/Devices`, você pode encontrar todos os **simuladores instalados**. Se você quiser acessar os arquivos de um aplicativo criado dentro de um dos emuladores, pode ser difícil saber **em qual o aplicativo está instalado**. Uma maneira rápida de **encontrar o UID correto** é executar o aplicativo no simulador e executar:
|
||||
Dentro de `/Users/<username>/Library/Developer/CoreSimulator/Devices`, você pode encontrar todos os **simuladores instalados**. Se você quiser acessar os arquivos de um aplicativo criado dentro de um dos emuladores, pode ser difícil saber **em qual deles o aplicativo está instalado**. Uma maneira rápida de **encontrar o UID correto** é executar o aplicativo no simulador e executar:
|
||||
```bash
|
||||
xcrun simctl list | grep Booted
|
||||
iPhone 8 (BF5DA4F8-6BBE-4EA0-BA16-7E3AFD16C06C) (Booted)
|
||||
|
@ -67,9 +66,13 @@ E nesta pasta você pode **encontrar o pacote do aplicativo.**
|
|||
|
||||
Corellium é o único emulador iOS disponível publicamente. É uma solução SaaS empresarial com um modelo de licença por usuário e não oferece nenhuma licença de teste.
|
||||
|
||||
## Jailbeaking
|
||||
## Sem Jailbreak necessário
|
||||
|
||||
A Apple exige estritamente que o código executado no iPhone deve ser **assinado por um certificado emitido pela Apple**. **Jailbreaking** é o processo de **contornar ativamente tais restrições** e outros controles de segurança impostos pelo sistema operacional. Portanto, uma vez que o dispositivo é jailbroken, a **verificação de integridade** responsável por verificar a instalação de aplicativos é corrigida, de modo que é **contornada**.
|
||||
Confira este post no blog sobre como fazer pentesting em um aplicativo iOS em um **dispositivo não jailbreak**: [https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed](https://dvuln.com/blog/modern-ios-pentesting-no-jailbreak-needed)
|
||||
|
||||
## Jailbreaking
|
||||
|
||||
A Apple exige estritamente que o código executado no iPhone deve ser **assinado por um certificado emitido pela Apple**. **Jailbreaking** é o processo de **contornar ativamente tais restrições** e outros controles de segurança impostos pelo sistema operacional. Portanto, uma vez que o dispositivo é jailbreak, a **verificação de integridade** que é responsável por verificar os aplicativos instalados é corrigida, então é **contornada**.
|
||||
|
||||
{% hint style="info" %}
|
||||
Ao contrário do Android, **você não pode mudar para "Modo Desenvolvedor"** no iOS para executar código não assinado/não confiável no dispositivo.
|
||||
|
@ -77,7 +80,7 @@ Ao contrário do Android, **você não pode mudar para "Modo Desenvolvedor"** no
|
|||
|
||||
### Rooting Android vs. Jailbreaking iOS
|
||||
|
||||
Embora frequentemente comparados, **rooting** no Android e **jailbreaking** no iOS são processos fundamentalmente diferentes. O rooting de dispositivos Android pode envolver **instalar o binário `su`** ou **substituir o sistema por um ROM personalizado com root**, o que não requer necessariamente exploits se o bootloader estiver desbloqueado. **Flashing de ROMs personalizadas** substitui o sistema operacional do dispositivo após desbloquear o bootloader, às vezes exigindo um exploit.
|
||||
Embora frequentemente comparados, **rooting** no Android e **jailbreaking** no iOS são processos fundamentalmente diferentes. O rooting de dispositivos Android pode envolver **instalar o binário `su`** ou **substituir o sistema por um ROM personalizado com root**, o que não necessariamente requer exploits se o bootloader estiver desbloqueado. **Flashing de ROMs personalizadas** substitui o sistema operacional do dispositivo após desbloquear o bootloader, às vezes exigindo um exploit.
|
||||
|
||||
Em contraste, dispositivos iOS não podem flashar ROMs personalizadas devido à restrição do bootloader de apenas inicializar imagens assinadas pela Apple. **Jailbreaking iOS** visa contornar as proteções de assinatura de código da Apple para executar código não assinado, um processo complicado pelas contínuas melhorias de segurança da Apple.
|
||||
|
||||
|
@ -90,13 +93,13 @@ As atualizações do iOS são controladas por um **mecanismo de desafio-resposta
|
|||
### Variedades de Jailbreak
|
||||
|
||||
* **Jailbreaks tethered** requerem uma conexão com o computador para cada reinicialização.
|
||||
* **Jailbreaks semi-tethered** permitem inicializar em modo não jailbroken sem um computador.
|
||||
* **Jailbreaks semi-tethered** permitem inicializar em modo não jailbreak sem um computador.
|
||||
* **Jailbreaks semi-untethered** requerem re-jailbreaking manual sem precisar de um computador.
|
||||
* **Jailbreaks untethered** oferecem uma solução de jailbreak permanente sem a necessidade de reaplicação.
|
||||
|
||||
### Ferramentas e Recursos de Jailbreaking
|
||||
|
||||
As ferramentas de jailbreaking variam de acordo com a versão do iOS e o dispositivo. Recursos como [Can I Jailbreak?](https://canijailbreak.com), [The iPhone Wiki](https://www.theiphonewiki.com) e [Reddit Jailbreak](https://www.reddit.com/r/jailbreak/) fornecem informações atualizadas. Exemplos incluem:
|
||||
As ferramentas de jailbreaking variam por versão do iOS e dispositivo. Recursos como [Can I Jailbreak?](https://canijailbreak.com), [The iPhone Wiki](https://www.theiphonewiki.com) e [Reddit Jailbreak](https://www.reddit.com/r/jailbreak/) fornecem informações atualizadas. Exemplos incluem:
|
||||
|
||||
* [Checkra1n](https://checkra.in/) para dispositivos com chip A7-A11.
|
||||
* [Palera1n](https://palera.in/) para dispositivos Checkm8 (A8-A11) no iOS 15.0-16.5.
|
||||
|
@ -106,7 +109,7 @@ Modificar seu dispositivo traz riscos, e o jailbreaking deve ser abordado com ca
|
|||
|
||||
### Benefícios e Riscos do Jailbreaking
|
||||
|
||||
O jailbreaking **remove o sandboxing imposto pelo OS**, permitindo que os aplicativos acessem todo o sistema de arquivos. Essa liberdade possibilita a instalação de aplicativos não aprovados e o acesso a mais APIs. No entanto, para usuários regulares, o jailbreaking **não é recomendado** devido a potenciais riscos de segurança e instabilidade do dispositivo.
|
||||
O jailbreaking **remove o sandboxing imposto pelo OS**, permitindo que os aplicativos acessem todo o sistema de arquivos. Essa liberdade permite a instalação de aplicativos não aprovados e acesso a mais APIs. No entanto, para usuários regulares, o jailbreaking **não é recomendado** devido a potenciais riscos de segurança e instabilidade do dispositivo.
|
||||
|
||||
### **Após o Jailbreaking**
|
||||
|
||||
|
@ -116,15 +119,15 @@ O jailbreaking **remove o sandboxing imposto pelo OS**, permitindo que os aplica
|
|||
|
||||
### **Detecção de Jailbreak**
|
||||
|
||||
**Vários aplicativos tentarão detectar se o celular está jailbroken e, nesse caso, o aplicativo não será executado**
|
||||
**Vários aplicativos tentarão detectar se o celular está jailbreak e, nesse caso, o aplicativo não será executado**
|
||||
|
||||
* Após o jailbreaking, arquivos e pastas do iOS **são geralmente instalados**, estes podem ser pesquisados para determinar se o dispositivo está jailbroken.
|
||||
* Em um dispositivo jailbroken, os aplicativos obtêm **acesso de leitura/gravação a novos arquivos** fora do sandbox.
|
||||
* Após o jailbreak, **arquivos e pastas geralmente são instalados**, estes podem ser pesquisados para determinar se o dispositivo está jailbreak.
|
||||
* Em um dispositivo jailbreak, os aplicativos obtêm **acesso de leitura/gravação a novos arquivos** fora do sandbox.
|
||||
* Algumas **chamadas de API** **comportar-se-ão de maneira diferente**.
|
||||
* A presença do serviço **OpenSSH**.
|
||||
* Chamar `/bin/sh` retornará **1** em vez de 0.
|
||||
|
||||
**Mais informações sobre como detectar jailbreaking** [**aqui**](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/)**.**
|
||||
**Mais informações sobre como detectar jailbreak** [**aqui**](https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/jailbreak-detection-methods/)**.**
|
||||
|
||||
Você pode tentar evitar essas detecções usando **o comando `ios jailbreak disable` do objection**
|
||||
|
||||
|
@ -136,19 +139,18 @@ Você pode tentar evitar essas detecções usando **o comando `ios jailbreak dis
|
|||
## Referências
|
||||
|
||||
* [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Aprenda e pratique Hacking AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprenda e pratique Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
|
||||
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-nos no** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# Web API Pentesting
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Aprenda e pratique Hacking AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprenda e pratique Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -18,7 +18,7 @@ Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data
|
|||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Use [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting) para construir e **automatizar fluxos de trabalho** facilmente, impulsionados pelas **ferramentas** comunitárias **mais avançadas** do mundo.\
|
||||
Acesse hoje:
|
||||
Obtenha Acesso Hoje:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=web-api-pentesting" %}
|
||||
|
||||
|
@ -28,8 +28,8 @@ Pentesting de APIs envolve uma abordagem estruturada para descobrir vulnerabilid
|
|||
|
||||
### **Entendendo os Tipos de API**
|
||||
|
||||
* **SOAP/XML Web Services**: Utilizam o formato WSDL para documentação, geralmente encontrado em caminhos `?wsdl`. Ferramentas como **SOAPUI** e **WSDLer** (Extensão do Burp Suite) são instrumentais para analisar e gerar requisições. A documentação de exemplo está acessível em [DNE Online](http://www.dneonline.com/calculator.asmx).
|
||||
* **REST APIs (JSON)**: A documentação geralmente vem em arquivos WADL, mas ferramentas como [Swagger UI](https://swagger.io/tools/swagger-ui/) fornecem uma interface mais amigável para interação. **Postman** é uma ferramenta valiosa para criar e gerenciar requisições de exemplo.
|
||||
* **Serviços Web SOAP/XML**: Utilizam o formato WSDL para documentação, geralmente encontrado em caminhos `?wsdl`. Ferramentas como **SOAPUI** e **WSDLer** (Extensão do Burp Suite) são instrumentais para analisar e gerar requisições. A documentação de exemplo está acessível em [DNE Online](http://www.dneonline.com/calculator.asmx).
|
||||
* **APIs REST (JSON)**: A documentação geralmente vem em arquivos WADL, mas ferramentas como [Swagger UI](https://swagger.io/tools/swagger-ui/) fornecem uma interface mais amigável para interação. **Postman** é uma ferramenta valiosa para criar e gerenciar requisições de exemplo.
|
||||
* **GraphQL**: Uma linguagem de consulta para APIs que oferece uma descrição completa e compreensível dos dados na sua API.
|
||||
|
||||
### **Laboratórios de Prática**
|
||||
|
@ -57,6 +57,7 @@ kr scan https://domain.com/api/ -A=apiroutes-220828 -x 20
|
|||
kr brute https://domain.com/api/ -A=raft-large-words -x 20 -d=0
|
||||
kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
|
||||
```
|
||||
* [**https://github.com/BishopFox/sj**](https://github.com/BishopFox/sj): sj é uma ferramenta de linha de comando projetada para ajudar na auditoria de **arquivos de definição Swagger/OpenAPI expostos** verificando os endpoints da API associados para autenticação fraca. Também fornece modelos de comando para testes manuais de vulnerabilidade.
|
||||
* Ferramentas adicionais como **automatic-api-attack-tool**, **Astra** e **restler-fuzzer** oferecem funcionalidades personalizadas para testes de segurança de API, variando de simulação de ataque a fuzzing e varredura de vulnerabilidades.
|
||||
* [**Cherrybomb**](https://github.com/blst-security/cherrybomb): É uma ferramenta de segurança de API que audita sua API com base em um arquivo OAS (a ferramenta é escrita em rust).
|
||||
|
||||
|
@ -73,14 +74,14 @@ kr brute https://domain.com/api/ -w /tmp/lang-english.txt -x 20 -d=0
|
|||
|
||||
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Use [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting) para construir e **automatizar fluxos de trabalho** facilmente, impulsionados pelas **ferramentas** **mais avançadas** da comunidade.\
|
||||
Use [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=web-api-pentesting) para construir e **automatizar fluxos de trabalho** facilmente com as **ferramentas** da comunidade **mais avançadas** do mundo.\
|
||||
Acesse hoje:
|
||||
|
||||
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=web-api-pentesting" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Aprenda e pratique Hacking AWS:<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprenda e pratique Hacking GCP: <img src="../../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# CORS - Misconfigurações & Bypass
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Aprenda e pratique Hacking AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprenda e pratique Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -21,7 +21,7 @@ Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data
|
|||
|
||||
## O que é CORS?
|
||||
|
||||
O padrão Cross-Origin Resource Sharing (CORS) **permite que servidores definam quem pode acessar seus ativos** e **quais métodos de requisição HTTP são permitidos** de fontes externas.
|
||||
Cross-Origin Resource Sharing (CORS) padrão **permite que servidores definam quem pode acessar seus ativos** e **quais métodos de requisição HTTP são permitidos** de fontes externas.
|
||||
|
||||
Uma política de **mesmo origem** exige que um **servidor que solicita** um recurso e o servidor que hospeda o **recurso** compartilhem o mesmo protocolo (por exemplo, `http://`), nome de domínio (por exemplo, `internal-web.com`) e **porta** (por exemplo, 80). Sob essa política, apenas páginas da web do mesmo domínio e porta têm acesso aos recursos.
|
||||
|
||||
|
@ -40,7 +40,7 @@ A aplicação da política de mesmo origem no contexto de `http://normal-website
|
|||
|
||||
### Cabeçalho `Access-Control-Allow-Origin`
|
||||
|
||||
Esse cabeçalho pode permitir **múltiplas origens**, um valor **`null`** ou um curinga **`*`**. No entanto, **nenhum navegador suporta múltiplas origens**, e o uso do curinga `*` está sujeito a **limitações**. (O curinga deve ser usado sozinho, e seu uso juntamente com `Access-Control-Allow-Credentials: true` não é permitido.)
|
||||
Esse cabeçalho pode permitir **múltiplas origens**, um valor **`null`** ou um curinga **`*`**. No entanto, **nenhum navegador suporta múltiplas origens**, e o uso do curinga `*` está sujeito a **limitações**. (O curinga deve ser usado sozinho, e seu uso junto com `Access-Control-Allow-Credentials: true` não é permitido.)
|
||||
|
||||
Esse cabeçalho é **emitido por um servidor** em resposta a uma solicitação de recurso de domínio cruzado iniciada por um site, com o navegador adicionando automaticamente um cabeçalho `Origin`.
|
||||
|
||||
|
@ -81,7 +81,7 @@ xhr.send('<person><name>Arun</name></person>');
|
|||
|
||||
Ao iniciar uma solicitação entre domínios sob condições específicas, como usar um **método HTTP não padrão** (qualquer coisa além de HEAD, GET, POST), introduzir novos **cabeçalhos** ou empregar um valor especial para o **cabeçalho Content-Type**, uma solicitação pre-flight pode ser necessária. Esta solicitação preliminar, utilizando o método **`OPTIONS`**, serve para informar o servidor sobre as intenções da próxima solicitação de origem cruzada, incluindo os métodos HTTP e cabeçalhos que pretende usar.
|
||||
|
||||
O protocolo **Cross-Origin Resource Sharing (CORS)** exige essa verificação pre-flight para determinar a viabilidade da operação de origem cruzada solicitada, verificando os métodos, cabeçalhos permitidos e a confiabilidade da origem. Para uma compreensão detalhada das condições que contornam a necessidade de uma solicitação pre-flight, consulte o guia abrangente fornecido pela [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests).
|
||||
O protocolo **Cross-Origin Resource Sharing (CORS)** exige essa verificação pre-flight para determinar a viabilidade da operação de origem cruzada solicitada, verificando os métodos e cabeçalhos permitidos, além da confiabilidade da origem. Para uma compreensão detalhada das condições que contornam a necessidade de uma solicitação pre-flight, consulte o guia abrangente fornecido pela [**Mozilla Developer Network (MDN)**](https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#simple\_requests).
|
||||
|
||||
É crucial notar que a **ausência de uma solicitação pre-flight não anula a exigência de que a resposta contenha cabeçalhos de autorização**. Sem esses cabeçalhos, o navegador fica incapacitado de processar a resposta da solicitação de origem cruzada.
|
||||
|
||||
|
@ -131,22 +131,31 @@ Content-Length: 0
|
|||
...
|
||||
```
|
||||
{% hint style="warning" %}
|
||||
Note que o IP linux **0.0.0.0** funciona para **bypassar** esses requisitos para acessar localhost, pois esse endereço IP não é considerado "local".
|
||||
Observe que o IP linux **0.0.0.0** funciona para **burlar** esses requisitos para acessar localhost, pois esse endereço IP não é considerado "local".
|
||||
|
||||
Também é possível **bypassar os requisitos da Rede Local** se você usar o **endereço IP público de um endpoint local** (como o IP público do roteador). Porque em várias ocasiões, mesmo que o **IP público** esteja sendo acessado, se for **da rede local**, o acesso será concedido.
|
||||
Também é possível **burlar os requisitos da Rede Local** se você usar o **endereço IP público de um endpoint local** (como o IP público do roteador). Porque em várias ocasiões, mesmo que o **IP público** esteja sendo acessado, se for **da rede local**, o acesso será concedido.
|
||||
{% endhint %}
|
||||
|
||||
### Wildcards
|
||||
|
||||
Observe que mesmo que a seguinte configuração possa parecer super permissiva:
|
||||
```bash
|
||||
Access-Control-Allow-Origin: *
|
||||
Access-Control-Allow-Credentials: true
|
||||
```
|
||||
Isto não é permitido pelos navegadores e, portanto, as credenciais não serão enviadas com a solicitação permitida por isso.
|
||||
|
||||
## Configurações incorretas exploráveis
|
||||
|
||||
Foi observado que a configuração de `Access-Control-Allow-Credentials` para **`true`** é um pré-requisito para a maioria dos **ataques reais**. Essa configuração permite que o navegador envie credenciais e leia a resposta, aumentando a eficácia do ataque. Sem isso, o benefício de fazer um navegador emitir uma solicitação em vez de fazê-lo pessoalmente diminui, já que aproveitar os cookies de um usuário se torna inviável.
|
||||
Foi observado que a configuração de `Access-Control-Allow-Credentials` para **`true`** é um pré-requisito para a maioria dos **ataques reais**. Esta configuração permite que o navegador envie credenciais e leia a resposta, aumentando a eficácia do ataque. Sem isso, o benefício de fazer um navegador emitir uma solicitação em vez de fazê-lo pessoalmente diminui, já que aproveitar os cookies de um usuário se torna inviável.
|
||||
|
||||
### Exceção: Explorando a Localização da Rede como Autenticação
|
||||
|
||||
Existe uma exceção onde a localização da rede da vítima atua como uma forma de autenticação. Isso permite que o navegador da vítima seja usado como um proxy, contornando a autenticação baseada em IP para acessar aplicações intranet. Esse método compartilha semelhanças em impacto com o DNS rebinding, mas é mais simples de explorar.
|
||||
Existe uma exceção onde a localização da rede da vítima atua como uma forma de autenticação. Isso permite que o navegador da vítima seja usado como um proxy, contornando a autenticação baseada em IP para acessar aplicações intranet. Este método compartilha semelhanças em impacto com o DNS rebinding, mas é mais simples de explorar.
|
||||
|
||||
### Reflexão de `Origin` em `Access-Control-Allow-Origin`
|
||||
|
||||
O cenário do mundo real onde o valor do cabeçalho `Origin` é refletido em `Access-Control-Allow-Origin` é teoricamente improvável devido a restrições na combinação desses cabeçalhos. No entanto, desenvolvedores que buscam habilitar CORS para várias URLs podem gerar dinamicamente o cabeçalho `Access-Control-Allow-Origin` copiando o valor do cabeçalho `Origin`. Essa abordagem pode introduzir vulnerabilidades, particularmente quando um atacante emprega um domínio com um nome projetado para parecer legítimo, enganando assim a lógica de validação.
|
||||
O cenário do mundo real onde o valor do cabeçalho `Origin` é refletido em `Access-Control-Allow-Origin` é teoricamente improvável devido a restrições na combinação desses cabeçalhos. No entanto, desenvolvedores que buscam habilitar CORS para várias URLs podem gerar dinamicamente o cabeçalho `Access-Control-Allow-Origin` copiando o valor do cabeçalho `Origin`. Esta abordagem pode introduzir vulnerabilidades, particularmente quando um atacante emprega um domínio com um nome projetado para parecer legítimo, enganando assim a lógica de validação.
|
||||
```html
|
||||
<script>
|
||||
var req = new XMLHttpRequest();
|
||||
|
@ -211,13 +220,42 @@ if ($_SERVER['HTTP_HOST'] == '*.requester.com') {
|
|||
// Unauthorized access
|
||||
}
|
||||
```
|
||||
Neste cenário, todos os subdomínios de `requester.com` têm acesso permitido. No entanto, se um subdomínio, digamos `sub.requester.com`, for comprometido com uma vulnerabilidade XSS, um atacante pode explorar essa fraqueza. Por exemplo, um atacante com acesso a `sub.requester.com` poderia explorar a vulnerabilidade XSS para contornar as políticas de CORS e acessar maliciosamente recursos em `provider.com`.
|
||||
Neste setup, todos os subdomínios de `requester.com` têm acesso permitido. No entanto, se um subdomínio, digamos `sub.requester.com`, estiver comprometido com uma vulnerabilidade XSS, um atacante pode explorar essa fraqueza. Por exemplo, um atacante com acesso a `sub.requester.com` poderia explorar a vulnerabilidade XSS para contornar as políticas de CORS e acessar maliciosamente recursos em `provider.com`.
|
||||
|
||||
### **Caracteres Especiais**
|
||||
|
||||
O [cheat sheet de bypass de validação de URL](https://portswigger.net/research/introducing-the-url-validation-bypass-cheat-sheet) da PortSwigger descobriu que alguns navegadores suportam caracteres estranhos dentro dos nomes de domínio.
|
||||
|
||||
Chrome e Firefox suportam sublinhados `_` que podem contornar regexes implementadas para validar o cabeçalho `Origin`:
|
||||
```
|
||||
GET / HTTP/2
|
||||
Cookie: <session_cookie>
|
||||
Origin: https://target.application_.arbitrary.com
|
||||
```
|
||||
|
||||
```
|
||||
HTTP/2 200 OK
|
||||
Access-Control-Allow-Origin: https://target.application_.arbitrary.com
|
||||
Access-Control-Allow-Credentials: true
|
||||
```
|
||||
Safari é ainda mais permissivo ao aceitar caracteres especiais no nome do domínio:
|
||||
```
|
||||
GET / HTTP/2
|
||||
Cookie: <session_cookie>
|
||||
Origin: https://target.application}.arbitrary.com
|
||||
```
|
||||
|
||||
```
|
||||
HTTP/2 200 OK
|
||||
Cookie: <session_cookie>
|
||||
Access-Control-Allow-Origin: https://target.application}.arbitrary.com
|
||||
Access-Control-Allow-Credentials: true
|
||||
```
|
||||
### **Envenenamento de cache do lado do servidor**
|
||||
|
||||
[**Desta pesquisa**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
|
||||
|
||||
É possível que, ao explorar o envenenamento de cache do lado do servidor através da injeção de cabeçalho HTTP, uma vulnerabilidade de Cross-Site Scripting (XSS) armazenada possa ser induzida. Esse cenário se desenrola quando uma aplicação falha em sanitizar o cabeçalho `Origin` para caracteres ilegais, criando uma vulnerabilidade particularmente para usuários do Internet Explorer e Edge. Esses navegadores tratam (0x0d) como um terminador de cabeçalho HTTP legítimo, levando a vulnerabilidades de injeção de cabeçalho HTTP.
|
||||
É possível que, ao explorar o envenenamento de cache do lado do servidor através da injeção de cabeçalho HTTP, uma vulnerabilidade de Cross-Site Scripting (XSS) armazenada possa ser induzida. Este cenário se desenrola quando uma aplicação falha em sanitizar o cabeçalho `Origin` para caracteres ilegais, criando uma vulnerabilidade particularmente para usuários do Internet Explorer e Edge. Esses navegadores tratam (0x0d) como um terminador de cabeçalho HTTP legítimo, levando a vulnerabilidades de injeção de cabeçalho HTTP.
|
||||
|
||||
Considere a seguinte solicitação onde o cabeçalho `Origin` é manipulado:
|
||||
```
|
||||
|
@ -234,17 +272,17 @@ Enquanto explorar diretamente essa vulnerabilidade fazendo um navegador web envi
|
|||
|
||||
Para mais informações sobre vulnerabilidades XSS armazenadas, veja [PortSwigger](https://portswigger.net/web-security/cross-site-scripting/stored).
|
||||
|
||||
**Nota**: A exploração de vulnerabilidades de injeção de cabeçalho HTTP, particularmente através do envenenamento de cache do lado do servidor, destaca a importância crítica de validar e sanitizar todas as entradas fornecidas pelo usuário, incluindo cabeçalhos HTTP. Sempre empregue um modelo de segurança robusto que inclua validação de entrada para prevenir tais vulnerabilidades.
|
||||
**Nota**: A exploração de vulnerabilidades de injeção de cabeçalho HTTP, particularmente através da contaminação de cache do lado do servidor, destaca a importância crítica de validar e sanitizar todas as entradas fornecidas pelo usuário, incluindo cabeçalhos HTTP. Sempre empregue um modelo de segurança robusto que inclua validação de entrada para prevenir tais vulnerabilidades.
|
||||
|
||||
### **Envenenamento de cache do lado do cliente**
|
||||
### **Contaminação de cache do lado do cliente**
|
||||
|
||||
[**Desta pesquisa**](https://portswigger.net/research/exploiting-cors-misconfigurations-for-bitcoins-and-bounties)
|
||||
|
||||
Neste cenário, uma instância de uma página web refletindo o conteúdo de um cabeçalho HTTP personalizado sem a codificação adequada é observada. Especificamente, a página web reflete de volta o conteúdo incluído em um cabeçalho `X-User-id`, que pode incluir JavaScript malicioso, como demonstrado pelo exemplo onde o cabeçalho contém uma tag de imagem SVG projetada para executar código JavaScript ao ser carregada.
|
||||
Neste cenário, uma instância de uma página web refletindo o conteúdo de um cabeçalho HTTP personalizado sem a devida codificação é observada. Especificamente, a página web reflete de volta o conteúdo incluído em um cabeçalho `X-User-id`, que pode incluir JavaScript malicioso, como demonstrado pelo exemplo onde o cabeçalho contém uma tag de imagem SVG projetada para executar código JavaScript ao ser carregada.
|
||||
|
||||
As políticas de Compartilhamento de Recursos de Origem Cruzada (CORS) permitem o envio de cabeçalhos personalizados. No entanto, sem que a resposta seja renderizada diretamente pelo navegador devido a restrições de CORS, a utilidade de tal injeção pode parecer limitada. O ponto crítico surge ao considerar o comportamento de cache do navegador. Se o cabeçalho `Vary: Origin` não for especificado, torna-se possível que a resposta maliciosa seja armazenada em cache pelo navegador. Subsequentemente, essa resposta em cache poderia ser renderizada diretamente ao navegar para a URL, contornando a necessidade de renderização direta na solicitação inicial. Esse mecanismo aumenta a confiabilidade do ataque ao aproveitar o cache do lado do cliente.
|
||||
|
||||
Para ilustrar esse ataque, um exemplo de JavaScript é fornecido, projetado para ser executado no ambiente de uma página web, como através de um JSFiddle. Este script realiza uma ação simples: envia uma solicitação para uma URL especificada com um cabeçalho personalizado contendo o JavaScript malicioso. Após a conclusão bem-sucedida da solicitação, ele tenta navegar para a URL de destino, potencialmente acionando a execução do script injetado se a resposta tiver sido armazenada em cache sem o tratamento adequado do cabeçalho `Vary: Origin`.
|
||||
Para ilustrar esse ataque, um exemplo de JavaScript é fornecido, projetado para ser executado no ambiente de uma página web, como através de um JSFiddle. Este script realiza uma ação simples: envia uma solicitação para uma URL especificada com um cabeçalho personalizado contendo o JavaScript malicioso. Após a conclusão bem-sucedida da solicitação, ele tenta navegar para a URL de destino, potencialmente acionando a execução do script injetado se a resposta tiver sido armazenada em cache sem o devido tratamento do cabeçalho `Vary: Origin`.
|
||||
|
||||
Aqui está um resumo do JavaScript usado para executar esse ataque:
|
||||
```html
|
||||
|
@ -262,7 +300,7 @@ req.send();
|
|||
|
||||
### XSSI (Cross-Site Script Inclusion) / JSONP
|
||||
|
||||
XSSI, também conhecido como Cross-Site Script Inclusion, é um tipo de vulnerabilidade que se aproveita do fato de que a Política de Mesma Origem (SOP) não se aplica ao incluir recursos usando a tag script. Isso ocorre porque os scripts precisam ser incluídos de diferentes domínios. Essa vulnerabilidade permite que um atacante acesse e leia qualquer conteúdo que foi incluído usando a tag script.
|
||||
XSSI, também conhecido como Cross-Site Script Inclusion, é um tipo de vulnerabilidade que aproveita o fato de que a Política de Mesma Origem (SOP) não se aplica ao incluir recursos usando a tag script. Isso ocorre porque os scripts precisam ser incluídos de diferentes domínios. Essa vulnerabilidade permite que um atacante acesse e leia qualquer conteúdo que foi incluído usando a tag script.
|
||||
|
||||
Essa vulnerabilidade se torna particularmente significativa quando se trata de JavaScript dinâmico ou JSONP (JSON com Padding), especialmente quando informações de autoridade ambiental, como cookies, são usadas para autenticação. Ao solicitar um recurso de um host diferente, os cookies são incluídos, tornando-os acessíveis ao atacante.
|
||||
|
||||
|
@ -270,20 +308,20 @@ Para entender melhor e mitigar essa vulnerabilidade, você pode usar o plugin Bu
|
|||
|
||||
[**Leia mais sobre os diferentes tipos de XSSI e como explorá-los aqui.**](xssi-cross-site-script-inclusion.md)
|
||||
|
||||
Tente adicionar um **`callback`** **parameter** na solicitação. Talvez a página tenha sido preparada para enviar os dados como JSONP. Nesse caso, a página enviará os dados de volta com `Content-Type: application/javascript`, o que contornará a política CORS.
|
||||
Tente adicionar um **`callback`** **parameter** na solicitação. Talvez a página tenha sido preparada para enviar os dados como JSONP. Nesse caso, a página retornará os dados com `Content-Type: application/javascript`, o que contornará a política CORS.
|
||||
|
||||
![](<../.gitbook/assets/image (856).png>)
|
||||
|
||||
### Bypass fácil (inútil?)
|
||||
|
||||
Uma maneira de contornar a restrição `Access-Control-Allow-Origin` é solicitando a uma aplicação web que faça uma solicitação em seu nome e envie de volta a resposta. No entanto, nesse cenário, as credenciais da vítima final não serão enviadas, pois a solicitação é feita para um domínio diferente.
|
||||
Uma maneira de contornar a restrição `Access-Control-Allow-Origin` é solicitando a uma aplicação web que faça uma solicitação em seu nome e envie a resposta de volta. No entanto, nesse cenário, as credenciais da vítima final não serão enviadas, pois a solicitação é feita para um domínio diferente.
|
||||
|
||||
1. [**CORS-escape**](https://github.com/shalvah/cors-escape): Esta ferramenta fornece um proxy que encaminha sua solicitação junto com seus cabeçalhos, enquanto também falsifica o cabeçalho Origin para corresponder ao domínio solicitado. Isso efetivamente contorna a política CORS. Aqui está um exemplo de uso com XMLHttpRequest:
|
||||
2. [**simple-cors-escape**](https://github.com/shalvah/simple-cors-escape): Esta ferramenta oferece uma abordagem alternativa para proxying de solicitações. Em vez de passar sua solicitação como está, o servidor faz sua própria solicitação com os parâmetros especificados.
|
||||
|
||||
### Bypass de Iframe + Popup
|
||||
|
||||
Você pode **contornar as verificações CORS** como `e.origin === window.origin` criando um **iframe** e **abrindo uma nova janela a partir dele**. Mais informações na página seguinte:
|
||||
Você pode **contornar as verificações CORS** como `e.origin === window.origin` **criando um iframe** e **abrindo uma nova janela a partir dele**. Mais informações na página a seguir:
|
||||
|
||||
{% content-ref url="xss-cross-site-scripting/iframes-in-xss-and-csp.md" %}
|
||||
[iframes-in-xss-and-csp.md](xss-cross-site-scripting/iframes-in-xss-and-csp.md)
|
||||
|
@ -299,9 +337,9 @@ Rebinding de DNS via TTL é uma técnica usada para contornar certas medidas de
|
|||
4. Quando o TTL expira, o navegador da vítima faz uma nova solicitação DNS, permitindo que o atacante execute código JavaScript na página da vítima.
|
||||
5. Ao manter o controle sobre o IP da vítima, o atacante pode coletar informações da vítima sem enviar cookies para o servidor da vítima.
|
||||
|
||||
É importante notar que os navegadores têm mecanismos de cache que podem impedir o abuso imediato dessa técnica, mesmo com valores de TTL baixos.
|
||||
É importante notar que os navegadores têm mecanismos de cache que podem impedir o abuso imediato dessa técnica, mesmo com valores TTL baixos.
|
||||
|
||||
O rebinding de DNS pode ser útil para contornar verificações de IP explícitas realizadas pela vítima ou para cenários em que um usuário ou bot permanece na mesma página por um período prolongado, permitindo que o cache expire.
|
||||
Rebinding de DNS pode ser útil para contornar verificações de IP explícitas realizadas pela vítima ou para cenários em que um usuário ou bot permanece na mesma página por um período prolongado, permitindo que o cache expire.
|
||||
|
||||
Se você precisar de uma maneira rápida de abusar do rebinding de DNS, pode usar serviços como [https://lock.cmpxchg8b.com/rebinder.html](https://lock.cmpxchg8b.com/rebinder.html).
|
||||
|
||||
|
@ -345,13 +383,13 @@ Para mais informações, você pode conferir [https://unit42.paloaltonetworks.co
|
|||
|
||||
* Se **IPs internos não são permitidos**, eles podem **esquecer de proibir 0.0.0.0** (funciona no Linux e Mac)
|
||||
* Se **IPs internos não são permitidos**, responda com um **CNAME** para **localhost** (funciona no Linux e Mac)
|
||||
* Se **IPs internos não são permitidos** como respostas DNS, você pode responder com **CNAMEs para serviços internos** como www.corporate.internal.
|
||||
* Se **IPs internos não são permitidos** como respostas DNS, você pode responder **CNAMEs para serviços internos** como www.corporate.internal.
|
||||
|
||||
### Rebinding de DNS Armazenado
|
||||
|
||||
Você pode encontrar mais informações sobre as técnicas de bypass anteriores e como usar a seguinte ferramenta na palestra [Gerald Doussot - State of DNS Rebinding Attacks & Singularity of Origin - DEF CON 27 Conference](https://www.youtube.com/watch?v=y9-0lICNjOQ).
|
||||
|
||||
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) é uma ferramenta para realizar ataques de [rebinding de DNS](https://en.wikipedia.org/wiki/DNS\_rebinding). Ela inclui os componentes necessários para rebindar o endereço IP do nome do servidor de ataque DNS para o endereço IP da máquina alvo e para servir payloads de ataque para explorar software vulnerável na máquina alvo.
|
||||
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) é uma ferramenta para realizar ataques de [rebinding de DNS](https://en.wikipedia.org/wiki/DNS\_rebinding). Ela inclui os componentes necessários para rebindar o endereço IP do nome DNS do servidor de ataque para o endereço IP da máquina alvo e para servir payloads de ataque para explorar software vulnerável na máquina alvo.
|
||||
|
||||
### Proteção Real contra Rebinding de DNS
|
||||
|
||||
|
@ -388,16 +426,16 @@ Você pode encontrar mais informações sobre as técnicas de bypass anteriores
|
|||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Aprenda e pratique Hacking na AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprenda e pratique Hacking na GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
|
||||
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-nos no** **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe 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).
|
||||
|
||||
</details>
|
||||
{% endhint %}
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
# OAuth para Tomada de Conta
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Aprenda e pratique Hacking AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprenda e pratique Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -21,13 +21,13 @@ Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data
|
|||
|
||||
## Informações Básicas <a href="#d4a8" id="d4a8"></a>
|
||||
|
||||
OAuth oferece várias versões, com insights fundamentais acessíveis na [documentação do OAuth 2.0](https://oauth.net/2/). Esta discussão centra-se principalmente no amplamente utilizado [tipo de concessão de código de autorização do OAuth 2.0](https://oauth.net/2/grant-types/authorization-code/), fornecendo um **quadro de autorização que permite que um aplicativo acesse ou execute ações na conta de um usuário em outro aplicativo** (o servidor de autorização).
|
||||
OAuth oferece várias versões, com informações fundamentais acessíveis na [documentação do OAuth 2.0](https://oauth.net/2/). Esta discussão centra-se principalmente no amplamente utilizado [tipo de concessão de código de autorização do OAuth 2.0](https://oauth.net/2/grant-types/authorization-code/), fornecendo um **quadro de autorização que permite que um aplicativo acesse ou execute ações na conta de um usuário em outro aplicativo** (o servidor de autorização).
|
||||
|
||||
Considere um site hipotético _**https://example.com**_, projetado para **exibir todas as suas postagens em redes sociais**, incluindo as privadas. Para alcançar isso, o OAuth 2.0 é empregado. _https://example.com_ solicitará sua permissão para **acessar suas postagens em redes sociais**. Consequentemente, uma tela de consentimento aparecerá em _https://socialmedia.com_, delineando as **permissões solicitadas e o desenvolvedor que faz a solicitação**. Após sua autorização, _https://example.com_ ganha a capacidade de **acessar suas postagens em seu nome**.
|
||||
|
||||
É essencial compreender os seguintes componentes dentro do quadro do OAuth 2.0:
|
||||
|
||||
* **proprietário do recurso**: Você, como o **usuário/entidade**, autoriza o acesso ao seu recurso, como suas postagens em redes sociais.
|
||||
* **proprietário do recurso**: Você, como o **usuário/entidade**, autoriza o acesso ao seu recurso, como as postagens da sua conta de redes sociais.
|
||||
* **servidor de recursos**: O **servidor que gerencia solicitações autenticadas** após o aplicativo ter obtido um `access token` em nome do `proprietário do recurso`, por exemplo, **https://socialmedia.com**.
|
||||
* **aplicativo cliente**: O **aplicativo que busca autorização** do `proprietário do recurso`, como **https://example.com**.
|
||||
* **servidor de autorização**: O **servidor que emite `access tokens`** para o `aplicativo cliente` após a autenticação bem-sucedida do `proprietário do recurso` e a obtenção de autorização, por exemplo, **https://socialmedia.com**.
|
||||
|
@ -36,7 +36,7 @@ Considere um site hipotético _**https://example.com**_, projetado para **exibir
|
|||
* **response\_type**: Um valor que especifica **o tipo de token solicitado**, como `code`.
|
||||
* **scope**: O **nível de acesso** que o `aplicativo cliente` está solicitando do `proprietário do recurso`.
|
||||
* **redirect\_uri**: A **URL para a qual o usuário é redirecionado após a autorização**. Isso geralmente deve estar alinhado com a URL de redirecionamento pré-registrada.
|
||||
* **state**: Um parâmetro para **manter dados durante a redireção do usuário para e do servidor de autorização**. Sua singularidade é crítica para servir como um **mecanismo de proteção CSRF**.
|
||||
* **state**: Um parâmetro para **manter dados durante a redireção do usuário para o servidor de autorização e vice-versa**. Sua singularidade é crítica para servir como um **mecanismo de proteção CSRF**.
|
||||
* **grant\_type**: Um parâmetro que indica **o tipo de concessão e o tipo de token a ser retornado**.
|
||||
* **code**: O código de autorização do `servidor de autorização`, usado em conjunto com `client_id` e `client_secret` pelo aplicativo cliente para adquirir um `access_token`.
|
||||
* **access\_token**: O **token que o aplicativo cliente usa para solicitações de API** em nome do `proprietário do recurso`.
|
||||
|
@ -83,7 +83,7 @@ Para aqueles que visam um servidor OpenID, o endpoint de descoberta (`**.well-kn
|
|||
|
||||
### XSS na implementação de redirecionamento <a href="#bda5" id="bda5"></a>
|
||||
|
||||
Como mencionado neste relatório de bug bounty [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html), pode ser possível que a **URL de redirecionamento esteja sendo refletida na resposta** do servidor após o usuário se autenticar, sendo **vulnerável a XSS**. Payload possível para testar:
|
||||
Como mencionado neste relatório de bug bounty [https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html](https://blog.dixitaditya.com/2021/11/19/account-takeover-chain.html), pode ser possível que a **URL de redirecionamento esteja sendo refletida na resposta** do servidor após o usuário se autenticar, sendo **vulnerável a XSS**. Possível payload para testar:
|
||||
```
|
||||
https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</script><h1>test</h1>
|
||||
```
|
||||
|
@ -91,7 +91,7 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</scrip
|
|||
|
||||
Em implementações de OAuth, o uso indevido ou a omissão do **`state` parameter** pode aumentar significativamente o risco de ataques de **Cross-Site Request Forgery (CSRF)**. Essa vulnerabilidade surge quando o parâmetro `state` é **não utilizado, utilizado como um valor estático ou não validado corretamente**, permitindo que atacantes contornem as proteções contra CSRF.
|
||||
|
||||
Os atacantes podem explorar isso interceptando o processo de autorização para vincular sua conta à conta de uma vítima, levando a possíveis **account takeovers**. Isso é especialmente crítico em aplicações onde o OAuth é usado para **fins de autenticação**.
|
||||
Os atacantes podem explorar isso interceptando o processo de autorização para vincular sua conta à conta de uma vítima, levando a possíveis **account takeovers**. Isso é especialmente crítico em aplicações onde o OAuth é usado para **authentication purposes**.
|
||||
|
||||
Exemplos do mundo real dessa vulnerabilidade foram documentados em vários **CTF challenges** e **hacking platforms**, destacando suas implicações práticas. O problema também se estende a integrações com serviços de terceiros como **Slack**, **Stripe** e **PayPal**, onde os atacantes podem redirecionar notificações ou pagamentos para suas contas.
|
||||
|
||||
|
@ -99,14 +99,14 @@ O manuseio e a validação adequados do **`state` parameter** são cruciais para
|
|||
|
||||
### Pre Account Takeover <a href="#ebe4" id="ebe4"></a>
|
||||
|
||||
1. **Sem Verificação de Email na Criação da Conta**: Os atacantes podem criar proativamente uma conta usando o email da vítima. Se a vítima usar posteriormente um serviço de terceiros para login, a aplicação pode inadvertidamente vincular essa conta de terceiros à conta pré-criada do atacante, levando ao acesso não autorizado.
|
||||
1. **Sem Verificação de Email na Criação da Conta**: Os atacantes podem criar proativamente uma conta usando o email da vítima. Se a vítima usar um serviço de terceiros para login, a aplicação pode inadvertidamente vincular essa conta de terceiros à conta pré-criada do atacante, levando ao acesso não autorizado.
|
||||
2. **Explorando a Verificação de Email Lax do OAuth**: Os atacantes podem explorar serviços de OAuth que não verificam emails registrando-se com seu serviço e, em seguida, alterando o email da conta para o da vítima. Esse método também arrisca o acesso não autorizado à conta, semelhante ao primeiro cenário, mas através de um vetor de ataque diferente.
|
||||
|
||||
### Divulgação de Segredos <a href="#e177" id="e177"></a>
|
||||
|
||||
Identificar e proteger parâmetros secretos do OAuth é crucial. Enquanto o **`client_id`** pode ser divulgado com segurança, revelar o **`client_secret`** apresenta riscos significativos. Se o `client_secret` for comprometido, os atacantes podem explorar a identidade e a confiança da aplicação para **roubar `access_tokens` de usuários** e informações privadas.
|
||||
|
||||
Uma vulnerabilidade comum surge quando as aplicações manipulam erroneamente a troca do `code` de autorização por um `access_token` no lado do cliente em vez do lado do servidor. Esse erro leva à exposição do `client_secret`, permitindo que os atacantes gerem `access_tokens` sob a aparência da aplicação. Além disso, por meio de engenharia social, os atacantes poderiam escalar privilégios adicionando escopos adicionais à autorização do OAuth, explorando ainda mais o status de confiança da aplicação.
|
||||
Uma vulnerabilidade comum surge quando as aplicações lidam erroneamente com a troca do `code` de autorização por um `access_token` no lado do cliente em vez do lado do servidor. Esse erro leva à exposição do `client_secret`, permitindo que os atacantes gerem `access_tokens` sob a aparência da aplicação. Além disso, através de engenharia social, os atacantes poderiam escalar privilégios adicionando escopos adicionais à autorização do OAuth, explorando ainda mais o status de confiança da aplicação.
|
||||
|
||||
### Client Secret Bruteforce
|
||||
|
||||
|
@ -171,14 +171,14 @@ Como [**mencionado neste artigo**](https://salt.security/blog/oh-auth-abusing-oa
|
|||
Isso ocorre porque um **atacante** poderia criar um **aplicativo que suporta OAuth e login com Facebook** (por exemplo) em seu próprio aplicativo. Então, uma vez que uma vítima faça login com Facebook no **aplicativo do atacante**, o atacante poderia obter o **token OAuth do usuário dado ao seu aplicativo e usá-lo para fazer login no aplicativo OAuth da vítima usando o token do usuário da vítima**.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Portanto, se o atacante conseguir fazer com que o usuário acesse seu próprio aplicativo OAuth, ele poderá assumir a conta da vítima em aplicativos que esperam um token e não estão verificando se o token foi concedido ao ID do seu aplicativo.
|
||||
Portanto, se o atacante conseguir fazer com que o usuário acesse seu próprio aplicativo OAuth, ele poderá assumir a conta da vítima em aplicativos que esperam um token e não verificam se o token foi concedido ao ID do seu aplicativo.
|
||||
{% endhint %}
|
||||
|
||||
### Dois links & cookie <a href="#bda5" id="bda5"></a>
|
||||
|
||||
De acordo com [**este artigo**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), era possível fazer com que uma vítima abrisse uma página com um **returnUrl** apontando para o host do atacante. Essa informação seria **armazenada em um cookie (RU)** e em um **passo posterior** o **prompt** **perguntaria** ao **usuário** se ele deseja conceder acesso a esse host do atacante.
|
||||
De acordo com [**este artigo**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), era possível fazer uma vítima abrir uma página com um **returnUrl** apontando para o host do atacante. Essa informação seria **armazenada em um cookie (RU)** e em um **passo posterior** o **prompt** irá **perguntar** ao **usuário** se ele deseja conceder acesso ao host do atacante.
|
||||
|
||||
Para contornar esse prompt, era possível abrir uma aba para iniciar o **fluxo OAuth** que configuraria esse cookie RU usando o **returnUrl**, fechar a aba antes que o prompt fosse exibido e abrir uma nova aba sem esse valor. Assim, o **prompt não informará sobre o host do atacante**, mas o cookie seria configurado para ele, então o **token será enviado para o host do atacante** na redireção.
|
||||
Para contornar esse prompt, era possível abrir uma aba para iniciar o **fluxo Oauth** que configuraria esse cookie RU usando o **returnUrl**, fechar a aba antes que o prompt fosse exibido e abrir uma nova aba sem esse valor. Assim, o **prompt não informará sobre o host do atacante**, mas o cookie seria configurado para ele, então o **token será enviado para o host do atacante** na redireção.
|
||||
|
||||
### Bypass de Interação do Prompt <a href="#bda5" id="bda5"></a>
|
||||
|
||||
|
@ -193,19 +193,23 @@ Como [**explicado neste vídeo**](https://www.youtube.com/watch?v=n9x7\_J\_a\_7Q
|
|||
* `response_mode=form_post` -> O código é fornecido dentro de um formulário POST com um input chamado `code` e o valor
|
||||
* `response_mode=web_message` -> O código é enviado em uma mensagem post: `window.opener.postMessage({"code": "asdasdasd...`
|
||||
|
||||
### Fluxo OAuth ROPC - bypass de 2 FA <a href="#b440" id="b440"></a>
|
||||
|
||||
De acordo com [**este post de blog**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), este é um fluxo OAuth que permite fazer login no OAuth via **nome de usuário** e **senha**. Se durante esse fluxo simples um **token** com acesso a todas as ações que o usuário pode realizar for retornado, então é possível contornar a 2FA usando esse token.
|
||||
|
||||
### Parâmetros SSRFs <a href="#bda5" id="bda5"></a>
|
||||
|
||||
[**Verifique esta pesquisa**](https://portswigger.net/research/hidden-oauth-attack-vectors) **Para mais detalhes sobre esta técnica.**
|
||||
|
||||
O Registro Dinâmico de Clientes em OAuth serve como um vetor menos óbvio, mas crítico, para vulnerabilidades de segurança, especificamente para ataques de **Server-Side Request Forgery (SSRF)**. Este endpoint permite que servidores OAuth recebam detalhes sobre aplicativos clientes, incluindo URLs sensíveis que podem ser exploradas.
|
||||
O Registro Dinâmico de Clientes no OAuth serve como um vetor menos óbvio, mas crítico, para vulnerabilidades de segurança, especificamente para ataques de **Server-Side Request Forgery (SSRF)**. Este endpoint permite que servidores OAuth recebam detalhes sobre aplicativos clientes, incluindo URLs sensíveis que podem ser exploradas.
|
||||
|
||||
**Pontos Chave:**
|
||||
**Pontos-chave:**
|
||||
|
||||
* **Registro Dinâmico de Clientes** é frequentemente mapeado para `/register` e aceita detalhes como `client_name`, `client_secret`, `redirect_uris` e URLs para logotipos ou Conjuntos de Chaves Web JSON (JWKs) via requisições POST.
|
||||
* **Registro Dinâmico de Clientes** é frequentemente mapeado para `/register` e aceita detalhes como `client_name`, `client_secret`, `redirect_uris` e URLs para logotipos ou Conjuntos de Chaves Web JSON (JWKs) via solicitações POST.
|
||||
* Este recurso adere às especificações estabelecidas em **RFC7591** e **OpenID Connect Registration 1.0**, que incluem parâmetros potencialmente vulneráveis a SSRF.
|
||||
* O processo de registro pode inadvertidamente expor servidores a SSRF de várias maneiras:
|
||||
* **`logo_uri`**: Uma URL para o logotipo do aplicativo cliente que pode ser buscada pelo servidor, acionando SSRF ou levando a XSS se a URL for mal manipulada.
|
||||
* **`jwks_uri`**: Uma URL para o documento JWK do cliente, que se for maliciosamente elaborado, pode fazer com que o servidor faça requisições externas para um servidor controlado pelo atacante.
|
||||
* **`jwks_uri`**: Uma URL para o documento JWK do cliente, que se for maliciosamente elaborado, pode fazer com que o servidor faça solicitações externas para um servidor controlado pelo atacante.
|
||||
* **`sector_identifier_uri`**: Referencia um array JSON de `redirect_uris`, que o servidor pode buscar, criando uma oportunidade de SSRF.
|
||||
* **`request_uris`**: Lista as URIs de solicitação permitidas para o cliente, que podem ser exploradas se o servidor buscar essas URIs no início do processo de autorização.
|
||||
|
||||
|
@ -228,14 +232,14 @@ Se a plataforma que você está testando é um provedor OAuth [**leia isso para
|
|||
{% embed url="https://websec.nl/" %}
|
||||
|
||||
{% hint style="success" %}
|
||||
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
Aprenda e pratique Hacking AWS:<img src="../.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="../.gitbook/assets/arte.png" alt="" data-size="line">\
|
||||
Aprenda e pratique Hacking GCP: <img src="../.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="../.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Suporte ao HackTricks</summary>
|
||||
<summary>Support HackTricks</summary>
|
||||
|
||||
* Verifique os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
|
||||
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
|
||||
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
|
||||
|
||||
|
|
Loading…
Reference in a new issue