mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-29 16:10:54 +00:00
115 lines
8.2 KiB
Markdown
115 lines
8.2 KiB
Markdown
# DOM Invader
|
|
|
|
{% hint style="success" %}
|
|
Aprende y practica Hacking en AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Aprende y practica Hacking en GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Apoya a HackTricks</summary>
|
|
|
|
* 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) repos de github.
|
|
|
|
</details>
|
|
{% endhint %}
|
|
|
|
## DOM Invader
|
|
|
|
DOM Invader es una herramienta de navegador instalada en el navegador integrado de Burp. Ayuda en **la detección de vulnerabilidades DOM XSS** utilizando varias fuentes y sumideros, incluyendo mensajes web y contaminación de prototipos. La herramienta está preinstalada como una extensión.
|
|
|
|
DOM Invader integra una pestaña dentro del panel DevTools del navegador que permite lo siguiente:
|
|
|
|
1. **Identificación de sumideros controlables** en una página web para pruebas de DOM XSS, proporcionando detalles de contexto y sanitización.
|
|
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 del lado del cliente** y escaneo de gadgets controlables enviados a sumideros riesgosos.
|
|
4. Identificación de **vulnerabilidades de clobbering en DOM**.
|
|
|
|
### Habilítalo
|
|
|
|
En el navegador integrado de Burp, ve a la **extensión de Burp** y habilítala:
|
|
|
|
<figure><img src="../../.gitbook/assets/image (1129).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Ahora actualiza la página y en las **Dev Tools** encontrarás la **pestaña DOM Invader:**
|
|
|
|
<figure><img src="../../.gitbook/assets/image (695).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
### Inyectar un Canary
|
|
|
|
En la imagen anterior puedes ver un **grupo aleatorio de caracteres, que es el Canary**. Ahora deberías comenzar a **inyectarlo** en diferentes partes de la web (parámetros, formularios, url...) y cada vez hacer clic en buscar. DOM Invader verificará si el **canary terminó en algún sumidero interesante** que podría ser explotado.
|
|
|
|
Además, las opciones **Inyectar parámetros de URL** e **Inyectar formularios** abrirán automáticamente una **nueva pestaña** **inyectando** el **canary** en cada **parámetro de URL** y **formulario** que encuentre.
|
|
|
|
### Inyectar un Canary vacío
|
|
|
|
Si solo deseas encontrar sumideros potenciales que la página podría tener, incluso si no son explotables, puedes **buscar un canary vacío**.
|
|
|
|
### Mensajes Post
|
|
|
|
DOM Invader permite probar DOM XSS utilizando mensajes web con características como:
|
|
|
|
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.
|
|
|
|
#### Detalles del mensaje
|
|
|
|
Se puede ver información detallada sobre cada mensaje haciendo clic en él, que incluye si el JavaScript del lado del cliente accede a las propiedades `origin`, `data` o `source` del mensaje.
|
|
|
|
* **`origin`** : Si la **información de origen del mensaje no se verifica**, podrías enviar mensajes de origen cruzado al controlador de eventos **desde un dominio externo arbitrario**. Pero si se verifica, aún podría ser inseguro.
|
|
* **`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, se valida en lugar del origen. Incluso si esto se verifica, no asegura que la validación no pueda ser eludida.
|
|
|
|
#### Responder un mensaje
|
|
|
|
1. Desde la vista de **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**.
|
|
|
|
### Contaminación de Prototipos
|
|
|
|
DOM Invader también puede buscar **vulnerabilidades de Contaminación de Prototipos**. Primero, necesitas habilitarlo:
|
|
|
|
<figure><img src="../../.gitbook/assets/image (1026).png" alt=""><figcaption></figcaption></figure>
|
|
|
|
Luego, buscará **fuentes** que te permitan agregar propiedades arbitrarias al **`Object.prototype`**.
|
|
|
|
Si se encuentra algo, aparecerá un botón de **Prueba** para **probar la fuente encontrada**. Haz clic en él, aparecerá una nueva pestaña, crea un objeto en la consola y verifica si la `testproperty` existe:
|
|
```javascript
|
|
let b = {}
|
|
b.testproperty
|
|
```
|
|
Una vez que encuentres una fuente, puedes **escanear en busca de un gadget**:
|
|
|
|
1. Se abre una nueva pestaña por DOM Invader cuando se hace clic en el botón **Scan for gadgets**, que se puede encontrar junto a cualquier fuente de contaminación de prototipos identificada en la vista **DOM**. Luego comienza el escaneo en busca de gadgets adecuados.
|
|
2. Mientras tanto, en la misma pestaña, la pestaña **DOM Invader** debería estar abierta en el panel de DevTools. Después de que se complete el escaneo, se muestran en la vista **DOM** cualquier sink accesible a través de los gadgets identificados. Por ejemplo, se muestra en el siguiente ejemplo una propiedad de gadget llamada `html` que se pasa al sink `innerHTML`.
|
|
|
|
## DOM clobbering
|
|
|
|
En la imagen anterior es posible ver que se puede activar el escaneo de DOM clobbering. Una vez hecho esto, **DOM Invader comenzará a buscar vulnerabilidades de DOM clobbering**.
|
|
|
|
## References
|
|
|
|
* [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)
|
|
|
|
{% hint style="success" %}
|
|
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
|
|
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
|
|
|
|
<details>
|
|
|
|
<summary>Support HackTricks</summary>
|
|
|
|
* 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.
|
|
|
|
</details>
|
|
{% endhint %}
|