hacktricks/pentesting-web/xss-cross-site-scripting/dom-invader.md

114 lines
8.3 KiB
Markdown
Raw Normal View History

# DOM Invader
2023-06-05 18:33:24 +00:00
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repos de github** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
</details>
## DOM Invader
DOM Invader es una herramienta de navegador instalada en el navegador incorporado de Burp. Asiste en la **detección de vulnerabilidades DOM XSS** utilizando diversas fuentes y sumideros, incluyendo mensajes web y contaminación de prototipos. La herramienta está preinstalada como una extensión.
2023-06-05 18:33:24 +00:00
DOM Invader integra una pestaña dentro del panel DevTools del navegador que permite lo siguiente:
2023-06-05 18:33:24 +00:00
1. **Identificación de sumideros controlables** en una página web para pruebas de DOM XSS, proporcionando contexto y detalles de saneamiento.
2. **Registro, edición y reenvío de mensajes web** enviados a través del método `postMessage()` para pruebas de DOM XSS. DOM Invader también puede detectar automáticamente vulnerabilidades utilizando mensajes web especialmente diseñados.
3. Detección de fuentes de **contaminación de prototipos en el lado del cliente** y escaneo de gadgets controlables enviados a sumideros riesgosos.
4. Identificación de **vulnerabilidades de DOM clobbering**.
2023-06-05 18:33:24 +00:00
### Actívalo
2023-06-05 18:33:24 +00:00
En el navegador incorporado de Burp ve a la **extensión de Burp** y actívala:
2023-06-05 18:33:24 +00:00
<figure><img src="../../.gitbook/assets/image (4) (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
2023-06-05 18:33:24 +00:00
Ahora actualiza la página y en los **Dev Tools** encontrarás la **pestaña DOM Invader:**
2023-06-05 18:33:24 +00:00
<figure><img src="../../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
2023-06-05 18:33:24 +00:00
### Inyecta un Canary
2023-06-05 18:33:24 +00:00
En la imagen anterior puedes ver un **grupo aleatorio de caracteres, eso es el Canary**. Ahora deberías empezar a **inyectarlo** en diferentes partes de la web (parámetros, formularios, URL...) y cada vez hacer clic en buscar. DOM Invader comprobará si el **canary terminó en algún sumidero interesante** que podría ser explotado.
2023-06-05 18:33:24 +00:00
Además, las opciones **Inject URL params** e Inject forms abrirán automáticamente una **nueva pestaña** **inyectando** el **canary** en cada **URL** parámetro y **formulario** que encuentre.
2023-06-05 18:33:24 +00:00
### Inyecta un Canary vacío
2023-06-05 18:33:24 +00:00
Si solo quieres encontrar posibles sumideros que la página podría tener, incluso si no son explotables, puedes **buscar un canary vacío**.
2023-06-05 18:33:24 +00:00
### Mensajes Post
2023-06-05 18:33:24 +00:00
DOM Invader permite probar DOM XSS utilizando mensajes web con características como:
2023-06-05 18:33:24 +00:00
1. **Registro de mensajes web** enviados a través de `postMessage()`, similar al registro de historial de solicitudes/respuestas HTTP de Burp Proxy.
2. **Modificación** y **reemisión** de mensajes web para probar manualmente DOM XSS, similar a la función de Burp Repeater.
3. **Alteración automática** y envío de mensajes web para sondear DOM XSS.
2023-06-05 18:33:24 +00:00
#### Detalles del mensaje
Puedes hacer clic en cada mensaje para ver más información detallada sobre él, incluyendo si las propiedades `origin`, `data` o `source` del mensaje son accedidas por el JavaScript del lado del cliente.
2023-06-05 18:33:24 +00:00
* **`origin`** : Si la **información de origen del mensaje no se verifica**, podrías ser capaz de enviar mensajes de origen cruzado al manejador de eventos **desde un dominio externo arbitrario**. Pero si se verifica, aún podría ser inseguro.
2023-06-05 18:33:24 +00:00
* **`data`**: Aquí es donde se envía la carga útil. Si estos datos no se utilizan, el sumidero es inútil.
* **`source`**: Evalúa si la propiedad source, que generalmente hace referencia a un iframe, es validada en lugar del origen. Incluso si esto se verifica, no asegura que la validación no pueda ser eludida.
2023-06-05 18:33:24 +00:00
#### Responder un mensaje
2023-06-05 18:33:24 +00:00
1. Desde la vista **Mensajes**, haz clic en cualquier mensaje para abrir el diálogo de detalles del mensaje.
2. Edita el campo **Data** según sea necesario.
3. Haz clic en **Enviar**.
2023-06-05 18:33:24 +00:00
### Contaminación de Prototipos
2023-06-05 18:33:24 +00:00
DOM Invader también puede buscar **vulnerabilidades de Contaminación de Prototipos**. Primero, necesitas activarlo:
2023-06-05 18:33:24 +00:00
<figure><img src="../../.gitbook/assets/image (5) (1) (1) (3).png" alt=""><figcaption></figcaption></figure>
2023-06-05 18:33:24 +00:00
Luego, buscará **fuentes** que te permitan agregar propiedades arbitrarias al **`Object.prototype`**.
2023-06-05 18:33:24 +00:00
Si se encuentra algo, aparecerá un botón **Test** para **probar la fuente encontrada**. Haz clic en él, se abrirá una nueva pestaña, crea un objeto en la consola y verifica si existe la propiedad `testproperty`:
2023-06-05 18:33:24 +00:00
```javascript
let b = {}
b.testproperty
```
Una vez que hayas encontrado una fuente, puedes **buscar un gadget**:
2023-06-05 18:33:24 +00:00
1. Desde la vista **DOM**, haz clic en el botón **Buscar gadgets** junto a cualquier fuente de contaminación de prototipos que DOM Invader haya encontrado. DOM Invader abre una nueva pestaña y comienza a buscar gadgets adecuados.
2. En la misma pestaña, abre la pestaña **DOM Invader** en el panel de DevTools. Una vez que la búsqueda ha terminado, la vista **DOM** muestra cualquier punto de entrada que DOM Invader pudo acceder a través de los gadgets identificados. En el ejemplo a continuación, una propiedad de gadget llamada `html` se pasó al punto de entrada `innerHTML`.
2023-06-05 18:33:24 +00:00
## DOM clobbering
2023-06-05 18:33:24 +00:00
En la imagen anterior es posible ver que se puede activar la búsqueda de DOM clobbering. Una vez hecho, **DOM Invader comenzará a buscar vulnerabilidades de DOM clobbering**.
2023-06-05 18:33:24 +00:00
## Referencias
* [https://portswigger.net/burp/documentation/desktop/tools/dom-invader](https://portswigger.net/burp/documentation/desktop/tools/dom-invader)
* [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/enabling](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/enabling)
* [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-xss](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-xss)
* [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/web-messages](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/web-messages)
* [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/prototype-pollution](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/prototype-pollution)
* [https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-clobbering](https://portswigger.net/burp/documentation/desktop/tools/dom-invader/dom-clobbering)
<details>
<summary><strong>Aprende hacking en AWS de cero a héroe con</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
Otras formas de apoyar a HackTricks:
2023-06-05 18:33:24 +00:00
* Si quieres ver a tu **empresa anunciada en HackTricks** o **descargar HackTricks en PDF** revisa los [**PLANES DE SUSCRIPCIÓN**](https://github.com/sponsors/carlospolop)!
* Consigue el [**merchandising oficial de PEASS & HackTricks**](https://peass.creator-spring.com)
* Descubre [**La Familia PEASS**](https://opensea.io/collection/the-peass-family), nuestra colección de [**NFTs**](https://opensea.io/collection/the-peass-family) exclusivos
* **Únete al** 💬 [**grupo de Discord**](https://discord.gg/hRep4RUj7f) o al [**grupo de Telegram**](https://t.me/peass) o **sígueme** en **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **Comparte tus trucos de hacking enviando PRs a los repositorios de GitHub** [**HackTricks**](https://github.com/carlospolop/hacktricks) y [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
2023-06-05 18:33:24 +00:00
</details>