XSS es una vulnerabilidad que permite al atacante inyectar scripts maliciosos en una página web benigna vista por otro usuario. Por consecuencia, sobrepasan el Same-Origin Policy (SOP), que es un mecanismo de seguridad para prevenir que scripts maliciosos de una página que obtengan acceso a información sensible en otra página.
JavaScript para XSS
Se requiere conocimiento básico sobre JavaScript para entender los exploits XSS y adaptarlos a nuestras necesidades. XSS es un ataque del lado del clliente que toma lugar en el navegador del objetivo. Diferentes navegadores procesan los trozos de código de manera diferente, por lo que un exploit puede funcionar en un navegador mientras que otro no.
Si quieres experimenta con JS en tu navegador abre la consola con F12. O con los siguientes atajos:
- En Firefox, presiona Ctrl + Shift + K
- En Google Chrome, presiona Ctrl + Shift + J
- En Safari, presiona Command + Option + J
Veamos algunas funciones esenciales:
- Alert: Puedes usar
alert(1)oalert("XSS")para mostrar una alerta en el navegador, como un pop-up. - Console log: Puedes usar
console.log(1)oconsole.log("text")para mostrar lo que queramos en la consola. - Encoding: La función
btoa("string")puede usarse para encodear una string a base64. La función inversa esatob("base64").
Además puedes experimentar con mostrar valores como document.cookie con alert(document.cookie).
Tipos de XSS
Para repasar lo que ya sabemos, hay tres tipos de XSS principales:
- Reflected XSS: Este ataque recae en que el input controlado por el usuario sea reflejado en la web. Por ejemplo si buscas un término y la página lo muestra escrito en el HTML.
- Stored XSS: Recae en que el input del usuario sea guardado en la base de datos de la página web. Por ejemplo si los usuarios pueden escribir reseñas y se muestran en la página a otros usuarios.
- DOM-Based XSS: Este ataque explota vulnerabilidades en el Document Object Model (DOM) para manipular los elementos de la web existente sin necesitar ser reflejados o guardados en el servidor. Es la menos común.
