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

# XSS (Cross-Site Scripting)

Permite inyectar código JavaScript u otro tipo de script dentro de las páginas web de un sitio web.

JS es un lenguaje que se ejecuta del lado del cliente por lo que los usuarios que visiten dichas páginas web ejecutarán el código inyectado de forma transparente a ellos, lo que puede poner en riesgo su información.

***

## ETIQUETAS SCRIPT EN HTML

Permite llamar a un script.

```html
<script>alert("Pepo");</script>

<!--
Se llama a la función alert que sirve para mostrar una alerta en el navegador.
Recibe como argumento el contenido a mostrar en la alerta.
-->

```

Si el código es inyectado correctamente, cada vez que un usuario ingrese a esa página web, el navegador del usuario ejecutaria el script como si fuera parte del contenido legítimo de la página, y se mostraría esa alerta en el navegador.

El XSS se usa para robar cookies, secuestrar sesiones, o redirecciones a sitios maliciosos.

***

## TIPOS DE XSS

### REFLECTED XSS

Es temporal y no almacena en la DB del servidor ni en el código fuente de la página web.

### STORED XSS

Es persistente y se almacena dentro del servidor, y sera ejecutado por el navegador de cualquier usuario que entre a la página web.

### DOM-BASED XSS

Document Object Model. El script malicioso no se envía al servidor, se ejecuta únicamente en el navegador del usuario debido a la manipulación del DOM en la página web

EJEMPLO:

* Código página web

<figure><img src="https://2448382844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FywHg0FIANmg3uxJJ9jhH%2Fuploads%2FQbYOCeV67RoLH2zuCbil%2Fimagen.png?alt=media&amp;token=154f7160-20f4-4143-83ef-235a3b8cb109" alt=""><figcaption></figcaption></figure>

* Código inyectado por el atacante en la URL.

<figure><img src="https://2448382844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FywHg0FIANmg3uxJJ9jhH%2Fuploads%2FdExMDRStR99dvdUKvhkG%2Fimagen.png?alt=media&amp;token=9e81f778-5613-4f75-9cf5-8ac79bc239b2" alt=""><figcaption></figcaption></figure>

* Resultado.

<figure><img src="https://2448382844-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FywHg0FIANmg3uxJJ9jhH%2Fuploads%2FrD4jL3MFycfgrn5jYE1j%2Fimagen.png?alt=media&amp;token=1e791774-3293-42dc-b76c-5a2d2e407206" alt=""><figcaption></figcaption></figure>

***

## LABORATORIOS

### XSS REFLEJADO

{% embed url="<https://portswigger.net/web-security/cross-site-scripting/reflected/lab-html-context-nothing-encoded>" %}

### XSS ALMACENADO

{% embed url="<https://portswigger.net/web-security/cross-site-scripting/stored/lab-html-context-nothing-encoded>" %}
