Cross-site scripting (XSS)
Reflected server XSS (Non-Persistent)
Ocurre cuando la entrada del usuario se muestra en la página después de ser procesada por el servidor (back-end), pero sin ser almacenada.
Se encuentra a menudo donde la entrada del usuario se envía a través de parámetros GET, por ejemplo, una opción de búsqueda que refleje la palabra buscada. Para explotarlo, normalmente se envía un enlace a un usuario con el payload. Dado que el usuario confía en el dominio, posiblemente hará clic en el enlace, el servidor agregará nuestro payload y el navegador del usuario lo ejecutará.
Es posible que los parámetros POST también den como resultado un "reflected server XSS (Non-Persistent)". Sin embargo, no podríamos explotarlo enviado un enlace a un usuario. En su lugar, tendríamos que enviar al usuario a un sitio web que controlamos y tener un formulario que haga un POST automáticamente cuando el usuario ingrese al sitio web.
Stored server XSS (Persistent)
Ocurre cuando la entrada del usuario se almacena en la base de datos (back-end) y luego se muestra al recuperarla. Por ejemplo, publicaciones o comentarios.
Esto hace que este tipo de XSS sea el más crítico, ya que afecta a una audiencia mucho más amplia. Cualquier usuario que visite la página sería víctima de este ataque. Además, es posible que "stored server XSS (Persistent)" no se pueda quitar fácilmente y que sea necesario eliminar el payload de la base de datos (back-end).
Reflected client XSS (Non-Persistent / DOM based)
Ocurre cuando la entrada del usuario se muestra en la página y esta es procesada por completo en el lado del cliente (JavaScript), pero sin ser almacenada.
Se encuentra a menudo donde la entrada del usuario se envía a través de parámetros GET, por ejemplo, una opción de búsqueda que refleje la palabra buscada y que esta sea asignada a un elemento HTML desde JavaScript.
Stored client XSS (Persistent / DOM based)
Ocurre cuando la entrada del usuario se almacena en la base de datos (back-end) y esta es procesada por completo en el lado del cliente (JavaScript) cuando se muestra en la página luego de recuperarla. Por ejemplo, publicaciones o comentarios que son obtenidos desde una base de datos y son asignados a elementos HTML desde JavaScript.
Blind XSS
Payloads de identificación general de "blind XSS".
Ejemplo de identificación de campo vulnerable a "blind XSS".
Payloads
General
Stealing session cookies
Acceso a cookies desde JavaScript (HttpOnly no establecido).
Envía cookies a web del atacante.
Registro de cookies en servidor del atacante.
Guarda cookies ocultas dentro del HTML de la página web.
Stealing local secrets
Existen dos tipos de almacenamiento de datos en el navegador disponibles localStorage
y sessionStorage
, su diferencia radica en el nivel de persistencia de los datos. Al utilizar localStorage
los datos se conservan hasta que se eliminen explícitamente, mientras que al utilizar sessionStorage
los datos se conservan hasta que se cierre la pestaña. Se puede acceder a los datos de localStorage
usando la propiedad window.localStorage
, mientras que se puede acceder a sessionStorage
con la propiedad window.sessionStorage
.
Stealing saved passwords
Keylogger
Phishing
Defacement
POST request
Ejecución de payload desde recurso externo
Creación de archivo JavaScript con payload a ejecutar.
Habilitación de servidor HTTP para compartir el archivo xss.js
.
Payloads para cargar JavaScript desde recurso externo.
Payload utilizando jQuery para cargar JavaScript desde recurso externo.
PortSwigger
Payload Box
Payloads All The Things
Herramientas
XSS Hunter
Truffle Security
Última actualización