> For the complete documentation index, see [llms.txt](https://4lec4st.gitbook.io/4lec4st/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://4lec4st.gitbook.io/4lec4st/hacking-web/xss-cross-site-scripting.md).

# XSS (Cross-Site Scripting)

## Introducción

El **Cross-Site Scripting (XSS)** es una de las vulnerabilidades de seguridad más comunes en las aplicaciones web. Consiste en la inserción de código malicioso en las páginas web que luego es ejecutado por el navegador del usuario. El objetivo del atacante es ejecutar código JavaScript en el navegador de la víctima, lo que puede resultar en la sustracción de información sensible (como cookies o credenciales), la manipulación del DOM, o incluso la ejecución de comandos remotos.

XSS es una vulnerabilidad de **inyección** que puede ser explotada de varias formas, dependiendo del contexto en el que se realice. En este artículo, exploraremos los distintos tipos de XSS, sus características, ejemplos y cómo pueden ser explotados.

***

## Tipos de XSS

Existen tres tipos principales de **Cross-Site Scripting (XSS)**:

1. **Reflected XSS**
2. **Stored XSS**
3. **DOM-Based XSS**

A continuación te explico en qué consiste cada uno.

***

## 1. Reflected XSS (XSS Reflejado)

**Reflected XSS** ocurre cuando un atacante inyecta un script malicioso que es reflejado inmediatamente por el servidor en la respuesta, sin que se almacene en la base de datos ni en ningún otro lado. Este tipo de XSS generalmente tiene lugar cuando los parámetros de la URL o los datos de los formularios no son correctamente validados o escapados, y el servidor los refleja directamente en la respuesta.

**Características:**

* El **script malicioso** es enviado en la **petición HTTP** (generalmente en los parámetros de la URL).
* El servidor **refleja** esta entrada sin procesarla adecuadamente.
* No hay almacenamiento en la base de datos, por lo que el ataque es **temporal**.
* Los usuarios visitan un enlace especialmente diseñado para desencadenar el ataque.

**Ejemplo:**

Imagina una página web vulnerable que acepta un parámetro de nombre de usuario en la URL:

```
http://example.com/greet?name=John
```

Si el servidor responde con:

```html
<p>Hello, John!</p>
```

Un atacante podría manipular la URL y agregar un script malicioso:

```
http://example.com/greet?name=<script>alert('XSS');</script>
```

La página reflejaría el parámetro `name` sin validarlo correctamente, lo que resultaría en la ejecución del script malicioso en el navegador del usuario.

***

## 2. Stored XSS (XSS Almacenado)

El **Stored XSS** ocurre cuando un atacante inyecta un script malicioso que es **almacenado** en el servidor (en una base de datos, sistema de archivos o alguna otra forma de almacenamiento persistente). A diferencia del XSS reflejado, el código malicioso no se ejecuta inmediatamente, sino que **queda guardado** y se ejecutará cada vez que una víctima cargue la página que contiene el código inyectado.

**Características:**

* El script malicioso se **almacena** en el servidor (por ejemplo, en una base de datos o un archivo).
* La inyección se lleva a cabo en un **formulario o campo de entrada** (como un comentario, campo de nombre, etc.).
* El script malicioso se **ejecuta en cada carga** de la página, afectando a todos los usuarios que la visiten.

**Ejemplo:**

Supongamos que una aplicación permite a los usuarios enviar comentarios, y no valida correctamente los datos que se envían. Un atacante podría enviar el siguiente comentario:

```html
<script>alert('XSS');</script>
```

Si el servidor almacena este comentario en su base de datos sin validarlo o escaparlo, cuando otros usuarios visiten la página de comentarios, el script malicioso se ejecutará en sus navegadores.

***

## 3. DOM-Based XSS (XSS Basado en el DOM)

El **DOM-Based XSS** se produce cuando el ataque no es causado por el servidor, sino por una manipulación del **DOM** (Document Object Model) del lado del cliente. En este caso, el script malicioso afecta directamente la estructura de la página web en el navegador de la víctima, sin que el servidor intervenga.

**Características:**

* El **código malicioso** manipula el DOM del navegador (usando JavaScript).
* El ataque no depende del servidor, sino de cómo el navegador maneja los datos.
* El ataque se activa cuando el **JavaScript en la página web** manipula los datos proporcionados por el usuario (por ejemplo, datos de URL, cookies, fragmentos de URL, etc.).

**Ejemplo:**

Imagina una página web que usa JavaScript para tomar un parámetro de la URL y modificar el DOM. La URL de la página es:

```
http://example.com/profile#username=John
```

El código JavaScript podría ser algo como:

```javascript
var username = window.location.hash.substring(10);
document.getElementById("welcome").innerHTML = "Welcome, " + username;
```

Si un atacante modifica la URL a:

```
http://example.com/profile#username=<script>alert('XSS');</script>
```

El script malicioso se ejecutará en el navegador de la víctima, ya que el contenido de `username` es insertado directamente en el DOM sin ser validado.
