Translated ['src/pentesting-web/domain-subdomain-takeover.md', 'src/pent

This commit is contained in:
Translator 2025-02-04 18:47:41 +00:00
parent ad24a77b1b
commit 8f7a7626cb
2 changed files with 67 additions and 26 deletions

View File

@ -2,14 +2,13 @@
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}
## Toma de control de dominio ## Toma de control de dominio
Si descubres algún dominio (domain.tld) que **está siendo utilizado por algún servicio dentro del alcance** pero la **empresa** ha **perdido** la **propiedad** de este, puedes intentar **registrarlo** (si es lo suficientemente barato) y avisar a la empresa. Si este dominio está recibiendo alguna **información sensible** como una cookie de sesión a través de un **parámetro GET** o en el encabezado **Referer**, esto es sin duda una **vulnerabilidad**. Si descubres algún dominio (domain.tld) que está **siendo utilizado por algún servicio dentro del alcance** pero la **empresa** ha **perdido** la **propiedad** de este, puedes intentar **registrarlo** (si es lo suficientemente barato) y avisar a la empresa. Si este dominio está recibiendo alguna **información sensible** como una cookie de sesión a través de un parámetro **GET** o en el encabezado **Referer**, esto es sin duda una **vulnerabilidad**.
### Toma de control de subdominio ### Toma de control de subdominio
Un subdominio de la empresa está apuntando a un **servicio de terceros con un nombre no registrado**. Si puedes **crear** una **cuenta** en este **servicio de terceros** y **registrar** el **nombre** que está en uso, puedes realizar la toma de control del subdominio. Un subdominio de la empresa apunta a un **servicio de terceros con un nombre no registrado**. Si puedes **crear** una **cuenta** en este **servicio de terceros** y **registrar** el **nombre** que está en uso, puedes realizar la toma de control del subdominio.
Hay varias herramientas con diccionarios para verificar posibles tomas de control: Hay varias herramientas con diccionarios para verificar posibles tomas de control:
@ -39,7 +38,7 @@ Puedes encontrar un ejemplo de esta vulnerabilidad en el informe de CTF: [https:
## Explotando una toma de control de subdominio ## Explotando una toma de control de subdominio
La toma de control de subdominio es esencialmente un spoofing de DNS para un dominio específico a través de internet, permitiendo a los atacantes establecer registros A para un dominio, llevando a los navegadores a mostrar contenido desde el servidor del atacante. Esta **transparencia** en los navegadores hace que los dominios sean propensos al phishing. Los atacantes pueden emplear [_typosquatting_](https://en.wikipedia.org/wiki/Typosquatting) o [_dominios Doppelganger_](https://en.wikipedia.org/wiki/Doppelg%C3%A4nger) para este propósito. Especialmente vulnerables son los dominios donde la URL en un correo electrónico de phishing parece legítima, engañando a los usuarios y evadiendo filtros de spam debido a la confianza inherente del dominio. La toma de control de subdominio es esencialmente un spoofing de DNS para un dominio específico a través de internet, permitiendo a los atacantes establecer registros A para un dominio, llevando a los navegadores a mostrar contenido desde el servidor del atacante. Esta **transparencia** en los navegadores hace que los dominios sean propensos al phishing. Los atacantes pueden emplear [_typosquatting_](https://en.wikipedia.org/wiki/Typosquatting) o [_Doppelganger domains_](https://en.wikipedia.org/wiki/Doppelg%C3%A4nger) para este propósito. Especialmente vulnerables son los dominios donde la URL en un correo electrónico de phishing parece legítima, engañando a los usuarios y evadiendo filtros de spam debido a la confianza inherente del dominio.
Consulta este [post para más detalles](https://0xpatrik.com/subdomain-takeover/) Consulta este [post para más detalles](https://0xpatrik.com/subdomain-takeover/)
@ -49,7 +48,23 @@ Los certificados SSL, si son generados por atacantes a través de servicios como
### **Seguridad de Cookies y Transparencia del Navegador** ### **Seguridad de Cookies y Transparencia del Navegador**
La transparencia del navegador también se extiende a la seguridad de las cookies, regida por políticas como la [política de mismo origen](https://en.wikipedia.org/wiki/Same-origin_policy). Las cookies, a menudo utilizadas para gestionar sesiones y almacenar tokens de inicio de sesión, pueden ser explotadas a través de la toma de control de subdominio. Los atacantes pueden **recopilar cookies de sesión** simplemente dirigiendo a los usuarios a un subdominio comprometido, poniendo en peligro los datos y la privacidad del usuario. La transparencia del navegador también se extiende a la seguridad de las cookies, regida por políticas como la [Same-origin policy](https://en.wikipedia.org/wiki/Same-origin_policy). Las cookies, a menudo utilizadas para gestionar sesiones y almacenar tokens de inicio de sesión, pueden ser explotadas a través de la toma de control de subdominio. Los atacantes pueden **recopilar cookies de sesión** simplemente dirigiendo a los usuarios a un subdominio comprometido, poniendo en peligro los datos y la privacidad del usuario.
### Bypass de CORS
Podría ser posible que cada subdominio tenga acceso a recursos CORS del dominio principal u otros subdominios. Esto podría ser explotado por un atacante para **acceder a información sensible** abusando de las solicitudes CORS.
### CSRF - Bypass de Cookies Same-Site
Podría ser posible que el subdominio esté permitido para enviar cookies al dominio u otros subdominios, lo cual fue prevenido por el atributo `Same-Site` de las cookies. Sin embargo, ten en cuenta que los tokens anti-CSRF aún prevenirán este ataque si están implementados correctamente.
### Redirección de tokens OAuth
Podría ser posible que el subdominio comprometido esté permitido para ser utilizado en la URL `redirect_uri` de un flujo OAuth. Esto podría ser explotado por un atacante para **robar el token OAuth**.
### Bypass de CSP
Podría ser posible que el subdominio comprometido (o cualquier subdominio) esté permitido para ser utilizado, por ejemplo, en el `script-src` de la CSP. Esto podría ser explotado por un atacante para **inyectar scripts maliciosos** y abusar de posibles vulnerabilidades XSS.
### **Correos Electrónicos y Toma de Control de Subdominio** ### **Correos Electrónicos y Toma de Control de Subdominio**
@ -57,7 +72,7 @@ Otro aspecto de la toma de control de subdominio involucra servicios de correo e
### **Riesgos de Orden Superior** ### **Riesgos de Orden Superior**
Los riesgos adicionales incluyen la **toma de control de registros NS**. Si un atacante obtiene control sobre un registro NS de un dominio, puede potencialmente dirigir una parte del tráfico a un servidor bajo su control. Este riesgo se amplifica si el atacante establece un **TTL (Tiempo de Vida)** alto para los registros DNS, prolongando la duración del ataque. Los riesgos adicionales incluyen la **toma de control de registros NS**. Si un atacante obtiene control sobre un registro NS de un dominio, puede potencialmente dirigir una porción del tráfico a un servidor bajo su control. Este riesgo se amplifica si el atacante establece un **TTL (Time to Live)** alto para los registros DNS, prolongando la duración del ataque.
### Vulnerabilidad de Registro CNAME ### Vulnerabilidad de Registro CNAME
@ -77,5 +92,6 @@ Para los proveedores de nube, verificar la propiedad del dominio es crucial para
- [https://0xpatrik.com/subdomain-takeover/](https://0xpatrik.com/subdomain-takeover/) - [https://0xpatrik.com/subdomain-takeover/](https://0xpatrik.com/subdomain-takeover/)
- [https://www.stratussecurity.com/post/subdomain-takeover-guide](https://www.stratussecurity.com/post/subdomain-takeover-guide) - [https://www.stratussecurity.com/post/subdomain-takeover-guide](https://www.stratussecurity.com/post/subdomain-takeover-guide)
- [https://www.hackerone.com/blog/guide-subdomain-takeovers-20](https://www.hackerone.com/blog/guide-subdomain-takeovers-20)
{{#include ../banners/hacktricks-training.md}} {{#include ../banners/hacktricks-training.md}}

View File

@ -16,7 +16,7 @@ Los hosts que recibirán una cookie son especificados por el atributo `Domain`.
### Ruta ### Ruta
Un camino URL específico que debe estar presente en la URL solicitada para que se envíe el encabezado `Cookie` es indicado por el atributo `Path`. Este atributo considera el carácter `/` como un separador de directorios, permitiendo coincidencias en subdirectorios también. Un camino de URL específico que debe estar presente en la URL solicitada para que se envíe el encabezado `Cookie` es indicado por el atributo `Path`. Este atributo considera el carácter `/` como un separador de directorios, permitiendo coincidencias en subdirectorios también.
### Reglas de Ordenación ### Reglas de Ordenación
@ -48,7 +48,7 @@ Tabla de [Invicti](https://www.netsparker.com/blog/web-security/same-site-cookie
Una cookie con el atributo _**SameSite**_ **mitigará ataques CSRF** donde se necesita una sesión iniciada. Una cookie con el atributo _**SameSite**_ **mitigará ataques CSRF** donde se necesita una sesión iniciada.
**\*Ten en cuenta que desde Chrome80 (feb/2019) el comportamiento predeterminado de una cookie sin un atributo SameSite** **será lax** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\ **\*Ten en cuenta que desde Chrome80 (feb/2019) el comportamiento predeterminado de una cookie sin un atributo SameSite** **será lax** ([https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/](https://www.troyhunt.com/promiscuous-cookies-and-their-impending-death-via-the-samesite-policy/)).\
Ten en cuenta que temporalmente, después de aplicar este cambio, las **cookies sin una política SameSite** en Chrome serán **tratadas como None** durante los **primeros 2 minutos y luego como Lax para solicitudes POST de nivel superior entre sitios.** Ten en cuenta que temporalmente, después de aplicar este cambio, las **cookies sin una política SameSite** **en Chrome serán** **tratadas como None** durante los **primeros 2 minutos y luego como Lax para solicitudes POST de nivel superior entre sitios.**
## Banderas de Cookies ## Banderas de Cookies
@ -58,7 +58,7 @@ Esto evita que el **cliente** acceda a la cookie (a través de **Javascript**, p
#### **Evasiones** #### **Evasiones**
- Si la página está **enviando las cookies como respuesta** de una solicitud (por ejemplo, en una página **PHPinfo**), es posible abusar de la XSS para enviar una solicitud a esta página y **robar las cookies** de la respuesta (ver un ejemplo en [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/)). - Si la página está **enviando las cookies como respuesta** a una solicitud (por ejemplo, en una página **PHPinfo**), es posible abusar de la XSS para enviar una solicitud a esta página y **robar las cookies** de la respuesta (ver un ejemplo en [https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/](https://hackcommander.github.io/posts/2022/11/12/bypass-httponly-via-php-info-page/)).
- Esto podría ser evadido con solicitudes **TRACE** **HTTP** ya que la respuesta del servidor (si este método HTTP está disponible) reflejará las cookies enviadas. Esta técnica se llama **Cross-Site Tracking**. - Esto podría ser evadido con solicitudes **TRACE** **HTTP** ya que la respuesta del servidor (si este método HTTP está disponible) reflejará las cookies enviadas. Esta técnica se llama **Cross-Site Tracking**.
- Esta técnica es evitada por **navegadores modernos al no permitir el envío de una solicitud TRACE** desde JS. Sin embargo, se han encontrado algunas evasiones a esto en software específico como enviar `\r\nTRACE` en lugar de `TRACE` a IE6.0 SP2. - Esta técnica es evitada por **navegadores modernos al no permitir el envío de una solicitud TRACE** desde JS. Sin embargo, se han encontrado algunas evasiones a esto en software específico como enviar `\r\nTRACE` en lugar de `TRACE` a IE6.0 SP2.
- Otra forma es la explotación de vulnerabilidades de día cero en los navegadores. - Otra forma es la explotación de vulnerabilidades de día cero en los navegadores.
@ -89,7 +89,7 @@ Es importante notar que las cookies con el prefijo `__Host-` no pueden ser envia
### Sobrescribiendo cookies ### Sobrescribiendo cookies
Así, una de las protecciones de las cookies con prefijo `__Host-` es prevenir que sean sobrescritas desde subdominios. Previniendo, por ejemplo, [**ataques de Cookie Tossing**](cookie-tossing.md). En la charla [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F_wAzF4a7Xg) ([**paper**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) se presenta que era posible establecer cookies con prefijo \_\_HOST- desde un subdominio, engañando al analizador, por ejemplo, añadiendo "=" al principio o al final...: Así, una de las protecciones de las cookies con prefijo `__Host-` es prevenir que sean sobrescritas desde subdominios. Previniendo, por ejemplo, [**ataques de Cookie Tossing**](cookie-tossing.md). En la charla [**Cookie Crumbles: Unveiling Web Session Integrity Vulnerabilities**](https://www.youtube.com/watch?v=F_wAzF4a7Xg) ([**paper**](https://www.usenix.org/system/files/usenixsecurity23-squarcina.pdf)) se presenta que era posible establecer cookies con prefijo \_\_HOST- desde un subdominio, engañando al parser, por ejemplo, añadiendo "=" al principio o al final...:
<figure><img src="../../images/image (6) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../images/image (6) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
@ -137,7 +137,7 @@ Los JSON Web Tokens (JWT) utilizados en cookies también pueden presentar vulner
### Cross-Site Request Forgery (CSRF) ### Cross-Site Request Forgery (CSRF)
Este ataque obliga a un usuario autenticado a ejecutar acciones no deseadas en una aplicación web en la que actualmente está autenticado. Los atacantes pueden explotar cookies que se envían automáticamente con cada solicitud al sitio vulnerable. Este ataque obliga a un usuario autenticado a ejecutar acciones no deseadas en una aplicación web en la que está actualmente autenticado. Los atacantes pueden explotar cookies que se envían automáticamente con cada solicitud al sitio vulnerable.
### Cookies Vacías ### Cookies Vacías
@ -157,46 +157,71 @@ setCookie("", "a=b") // Setting the empty cookie modifies another cookie's value
``` ```
Esto lleva a que el navegador envíe un encabezado de cookie interpretado por cada servidor web como una cookie llamada `a` con un valor `b`. Esto lleva a que el navegador envíe un encabezado de cookie interpretado por cada servidor web como una cookie llamada `a` con un valor `b`.
#### Error de Chrome: Problema de Código de Sustituto Unicode #### Error de Chrome: Problema de Código de Sustitución Unicode
En Chrome, si un código de sustituto Unicode es parte de una cookie establecida, `document.cookie` se corrompe, devolviendo una cadena vacía posteriormente: En Chrome, si un código de sustitución Unicode es parte de una cookie establecida, `document.cookie` se corrompe, devolviendo una cadena vacía posteriormente:
```js ```js
document.cookie = "\ud800=meep" document.cookie = "\ud800=meep"
``` ```
Esto resulta en que `document.cookie` devuelve una cadena vacía, lo que indica una corrupción permanente. Esto resulta en que `document.cookie` devuelve una cadena vacía, lo que indica una corrupción permanente.
#### Cookie Smuggling Debido a Problemas de Análisis #### Robo de Cookies Debido a Problemas de Análisis
(Revisa más detalles en la [investigación original](https://blog.ankursundara.com/cookie-bugs/)) Varios servidores web, incluidos los de Java (Jetty, TomCat, Undertow) y Python (Zope, cherrypy, web.py, aiohttp, bottle, webob), manejan incorrectamente las cadenas de cookies debido al soporte obsoleto de RFC2965. Lee un valor de cookie entre comillas dobles como un solo valor, incluso si incluye punto y coma, que normalmente debería separar pares clave-valor: (Revisa más detalles en la[original research](https://blog.ankursundara.com/cookie-bugs/)) Varios servidores web, incluidos los de Java (Jetty, TomCat, Undertow) y Python (Zope, cherrypy, web.py, aiohttp, bottle, webob), manejan incorrectamente las
``` ```
RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end"; RENDER_TEXT="hello world; JSESSIONID=13371337; ASDF=end";
``` ```
#### Vulnerabilidades de Inyección de Cookies #### Vulnerabilidades de Inyección de Cookies
(Check further details in the[original research](https://blog.ankursundara.com/cookie-bugs/)) El análisis incorrecto de cookies por parte de los servidores, notablemente Undertow, Zope y aquellos que utilizan `http.cookie.SimpleCookie` y `http.cookie.BaseCookie` de Python, crea oportunidades para ataques de inyección de cookies. Estos servidores no delimitan correctamente el inicio de nuevas cookies, permitiendo a los atacantes suplantar cookies: (Revisa más detalles en la [investigación original](https://blog.ankursundara.com/cookie-bugs/)) El análisis incorrecto de cookies por parte de los servidores, notablemente Undertow, Zope y aquellos que utilizan `http.cookie.SimpleCookie` y `http.cookie.BaseCookie` de Python, crea oportunidades para ataques de inyección de cookies. Estos servidores no delimitan correctamente el inicio de nuevas cookies, permitiendo a los atacantes suplantar cookies:
- Undertow espera una nueva cookie inmediatamente después de un valor entre comillas sin un punto y coma. - Undertow espera una nueva cookie inmediatamente después de un valor entre comillas sin un punto y coma.
- Zope busca una coma para comenzar a analizar la siguiente cookie. - Zope busca una coma para comenzar a analizar la siguiente cookie.
- Las clases de cookies de Python comienzan a analizar en un carácter de espacio. - Las clases de cookies de Python comienzan a analizar en un carácter de espacio.
Esta vulnerabilidad es particularmente peligrosa en aplicaciones web que dependen de la protección CSRF basada en cookies, ya que permite a los atacantes inyectar cookies de token CSRF suplantadas, potencialmente eludiendo medidas de seguridad. El problema se agrava por el manejo de nombres de cookies duplicados en Python, donde la última ocurrencia anula las anteriores. También plantea preocupaciones para las cookies `__Secure-` y `__Host-` en contextos inseguros y podría llevar a eludir autorizaciones cuando las cookies se envían a servidores de backend susceptibles a suplantación. Esta vulnerabilidad es particularmente peligrosa en aplicaciones web que dependen de la protección CSRF basada en cookies, ya que permite a los atacantes inyectar cookies de token CSRF suplantadas, potencialmente eludiendo las medidas de seguridad. El problema se agrava por el manejo de nombres de cookies duplicados en Python, donde la última ocurrencia anula las anteriores. También plantea preocupaciones para las cookies `__Secure-` y `__Host-` en contextos inseguros y podría llevar a eludir autorizaciones cuando las cookies se envían a servidores backend susceptibles a suplantación.
### Cookies $version y elusión de WAF ### Cookies $version
#### Bypass de WAF
Según [**este blog**](https://portswigger.net/research/bypassing-wafs-with-the-phantom-version-cookie), podría ser posible usar el atributo de cookie **`$Version=1`** para hacer que el backend utilice una lógica antigua para analizar la cookie debido a la **RFC2109**. Además, otros valores como **`$Domain`** y **`$Path`** pueden ser utilizados para modificar el comportamiento del backend con la cookie. Según [**este blog**](https://portswigger.net/research/bypassing-wafs-with-the-phantom-version-cookie), podría ser posible usar el atributo de cookie **`$Version=1`** para hacer que el backend utilice una lógica antigua para analizar la cookie debido a la **RFC2109**. Además, otros valores como **`$Domain`** y **`$Path`** pueden ser utilizados para modificar el comportamiento del backend con la cookie.
#### Análisis de elusión de valores con codificación de cadena entre comillas #### Ataque de Sándwich de Cookies
Este análisis indica deshacer los valores escapados dentro de las cookies, por lo que "\a" se convierte en "a". Esto puede ser útil para eludir WAFS ya que: Según [**este blog**](https://portswigger.net/research/stealing-httponly-cookies-with-the-cookie-sandwich-technique), es posible usar la técnica de sándwich de cookies para robar cookies HttpOnly. Estos son los requisitos y pasos:
- `eval('test') => forbidden` - Encontrar un lugar donde una **cookie aparentemente inútil se refleja en la respuesta**
- `"\e\v\a\l\(\'\t\e\s\t\'\)" => allowed` - **Crear una cookie llamada `$Version`** con valor `1` (puedes hacer esto en un ataque XSS desde JS) con un camino más específico para que obtenga la posición inicial (algunos frameworks como Python no necesitan este paso)
- **Crear la cookie que se refleja** con un valor que deje unas **comillas dobles abiertas** y con un camino específico para que se posicione en la base de datos de cookies después de la anterior (`$Version`)
- Luego, la cookie legítima irá a continuación en el orden
- **Crear una cookie ficticia que cierre las comillas dobles** dentro de su valor
#### Elusión de listas de bloqueo de nombres de cookies De esta manera, la cookie de la víctima queda atrapada dentro de la nueva cookie versión 1 y se reflejará siempre que se refleje.
```javascript
document.cookie = `$Version=1;`;
document.cookie = `param1="start`;
// any cookies inside the sandwich will be placed into param1 value server-side
document.cookie = `param2=end";`;
```
### Bypass de WAF
En la RFC2109 se indica que una **coma puede ser utilizada como separador entre valores de cookies**. Y también es posible agregar **espacios y tabulaciones antes y después del signo igual**. Por lo tanto, una cookie como `$Version=1; foo=bar, abc = qux` no genera la cookie `"foo":"bar, admin = qux"` sino las cookies `foo":"bar"` y `"admin":"qux"`. Observe cómo se generan 2 cookies y cómo se eliminó el espacio antes y después del signo igual. #### Cookies $version
#### Análisis de elusión de valores con división de cookies Consulta la sección anterior.
#### Análisis de bypass de valor con codificación de cadena entre comillas
Este análisis indica desescapar los valores escapados dentro de las cookies, por lo que "\a" se convierte en "a". Esto puede ser útil para eludir WAFS ya que:
- `eval('test') => prohibido`
- `"\e\v\a\l\(\'\t\e\s\t\'\)" => permitido`
#### Bypass de listas de bloqueo de nombres de cookies
En el RFC2109 se indica que se puede usar una **coma como separador entre los valores de las cookies**. Y también es posible agregar **espacios y tabulaciones antes y después del signo igual**. Por lo tanto, una cookie como `$Version=1; foo=bar, abc = qux` no genera la cookie `"foo":"bar, admin = qux"` sino las cookies `foo":"bar"` y `"admin":"qux"`. Observa cómo se generan 2 cookies y cómo se eliminó el espacio antes y después del signo igual.
#### Análisis de bypass de valor con división de cookies
Finalmente, diferentes puertas traseras se unirían en una cadena diferentes cookies pasadas en diferentes encabezados de cookies como en: Finalmente, diferentes puertas traseras se unirían en una cadena diferentes cookies pasadas en diferentes encabezados de cookies como en:
``` ```
@ -254,7 +279,7 @@ Esta ejecución te dará la cookie correctamente cifrada y codificada con la cad
**CBC-MAC** **CBC-MAC**
Tal vez una cookie podría tener algún valor y podría ser firmada usando CBC. Entonces, la integridad del valor es la firma creada utilizando CBC con el mismo valor. Como se recomienda usar como IV un vector nulo, este tipo de verificación de integridad podría ser vulnerable. Tal vez una cookie podría tener algún valor y podría ser firmada usando CBC. Entonces, la integridad del valor es la firma creada usando CBC con el mismo valor. Como se recomienda usar como IV un vector nulo, este tipo de verificación de integridad podría ser vulnerable.
**El ataque** **El ataque**