Cross-Site Scripting (XSS)
Stored XSS
Stored cross-site scripting surgen cuando una aplicación recibe datos de una fuente que no es confiable e incluye esos datos dentro de sus respuestas HTTP posteriores de manera insegura.
POST /post/comment HTTP/1.1
Host: vulnerable-website.com
Content-Length: 100
postId=3&comment=This+post+was+extremely+helpful.&name=Carlos+Montoya&email=carlos%40normal-user.netUna vez enviado este comentario, cualquier usuario que visite la entrada del blog recibirá lo siguiente dentro de la respuesta de la aplicación:
<p>This post was extremely helpful.</p>Suponiendo que la aplicación no realice ningún otro procesamiento de los datos, un atacante puede enviar un comentario malicioso como éste:
comment=%3Cscript%3E%2F*%2BBad%2Bstuff%2Bhere...%2B*%2F%3C%2Fscript%3ECualquier usuario que visite la entrada del blog recibirá ahora lo siguiente dentro de la respuesta de la aplicación:
<p><script>/* Bad stuff here... */</script></p>El script suministrado por el atacante se ejecutará entonces en el navegador del usuario víctima, en el contexto de su sesión con la aplicación.
XSS Testing Payloads
<script>alert(window.origin)</script>
<p>Test Xss</p><script>alert(document.domain)</script>
<img src=1 onerror=alert(1)>Reflected XSS
El cross-site scripting reflejado (o XSS) surge cuando una aplicación recibe datos en una petición HTTP e incluye esos datos en la respuesta inmediata de forma insegura.
Supongamos que un sitio web tiene una función de búsqueda que recibe el término de búsqueda introducido por el usuario en un parámetro URL:
https://insecure-website.com/search?term=giftLa aplicación se hace eco del término de búsqueda suministrado en la respuesta a esta URL:
<p>You searched for: gift</p>Suponiendo que la aplicación no realiza ningún otro procesamiento de los datos, un atacante puede construir un ataque como este:
https://insecure-website.com/search?term=<script>/*+Bad+stuff+here...+*/</script>Esta URL da como resultado la siguiente respuesta:
<p>You searched for: <script>/* Bad stuff here... */</script></p>DOM XSS
El XSS basado en DOM se procesa completamente en el lado del cliente a través de JavaScript. El DOM XSS se produce cuando se utiliza JavaScript para cambiar el origen de la página a través del Modelo de Objetos del Documento (DOM).
document.write('... <script>alert(document.domain)</script> ...');