Ya hemos mencionado dos tipos de exploits XSS : reflejados y almacenados. Todos ellos tienen la característica común de que el código peligroso, después de ser insertado, se ejecutará después de la respuesta del servidor, lo que significa que el error reside en el lado del servidor. Existe otro tipo de explotación XSS que va en contra de esta característica, el código malicioso se ejecuta inmediatamente en el lado del cliente sin pasar por el servidor, conocido como XSS basado en DOM o también conocido como XSS tipo 0.
Primero que nada necesitamos saber ¿qué es DOM?
DOM, abreviatura de Document Object Model, es una forma estándar del W3C (http://www.w3.org/DOM/) propuesta para recuperar y manipular datos de documentos estructurados como HTML y XML. Este modelo representa los documentos como una estructura de árbol jerárquica. Todos los elementos en HTML y XML se consideran un nodo.
DOM Based XSS es una técnica de explotación XSS basada en cambiar la estructura DOM del documento, específicamente HTML.
Veamos un ejemplo específico a continuación:
Un sitio web tiene la siguiente URL a la página de registro:
example.com/register.php?message=Please fill in the form
Cuando accedemos a él, vemos un Formulario muy normal:

Puede deducir fácilmente el parámetro de mensaje pasado al contenido de la notificación en el formulario; observe detenidamente el código fuente de esta notificación:
![Web9: Tipos de explotación XSS - Parte 3: XSS basado en Dom Web9: Tipos de explotación XSS - Parte 3: XSS basado en Dom]()
El segmento de JavaScript es responsable de obtener el valor del parámetro del mensaje e imprimirlo. A partir de esta revisión laxa de la entrada, es completamente posible engañar a los usuarios para que accedan a URL peligrosas.
En lugar de emitir:
message=Please fill in the form
luego transmite:
message=GenderMaleFemale
function show(){alert();}
Entonces el formulario de registro se verá así:
![Web9: Tipos de explotación XSS - Parte 3: XSS basado en Dom Web9: Tipos de explotación XSS - Parte 3: XSS basado en Dom]()
Los usuarios no sospecharán de un formulario "normal" como este, y al seleccionar el género, se ejecutará el Script:
![Web9: Tipos de explotación XSS - Parte 3: XSS basado en Dom Web9: Tipos de explotación XSS - Parte 3: XSS basado en Dom]()
Explicaré un poco más sobre el valor pasado en el parámetro de mensaje:
GenderMaleFemale
function show(){alert();}
Su objetivo principal es ejecutar la función show() cada vez que hay un evento onchage en la etiqueta de selección. La función show() aquí simplemente aparece para mostrar que el script se ha ejecutado. Sin embargo, en realidad, los piratas informáticos suelen utilizar esta función show() para ejecutar un script que transmite el valor de la cookie del usuario a un servidor predeterminado. Los lectores pueden revisar el artículo Reflected XSS que menciona cómo crean los piratas informáticos ¿Cómo se ve esta solicitud?
Este ejemplo nos da dos conclusiones importantes. En primer lugar, el código malicioso se ejecutó inmediatamente al hacer clic en el valor de la etiqueta de selección, lo que significa que se ejecutó directamente en el lado del cliente sin pasar por la respuesta del servidor. En segundo lugar, la estructura HTML se cambió con el script pasado. Y también podemos ver el escenario de explotación real, DOM Based es algo más similar a Reflected que Stored XSS cuando se trata de engañar a los usuarios para que accedan a una URL incrustada con código malicioso.
La siguiente figura describe cada paso en la implementación de la técnica de ataque XSS basado en DOM:
![Web9: Tipos de explotación XSS - Parte 3: XSS basado en Dom Web9: Tipos de explotación XSS - Parte 3: XSS basado en Dom]()
A continuación se muestra un vídeo de un miembro del foro WhiteHat.vn realizando un exploit a través de XSS basado en DOM:
¡Buena suerte!