# Lab 2: DOM XSS via client-side prototype pollution

Primero ejecutamos lo siguiente:

<figure><img src="https://1990863415-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCohdns2VDWfowigRKoD0%2Fuploads%2Fcaec3Vu9hEMoyaDy8aqm%2Fimage.png?alt=media&#x26;token=f44285ed-6bb4-42bb-bae2-f671e94b636c" alt=""><figcaption></figcaption></figure>

Y luego modificamos la URL:

<figure><img src="https://1990863415-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCohdns2VDWfowigRKoD0%2Fuploads%2Fvkax8OLA5lImNaYLUEqa%2Fimage.png?alt=media&#x26;token=f63794ea-194a-410b-978b-d1231bf55e4f" alt=""><figcaption></figcaption></figure>

Se puede apreciar el retorno de `foo:bar`

Así que procedemos analizar el código fuente:

<figure><img src="https://1990863415-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCohdns2VDWfowigRKoD0%2Fuploads%2FHzXhA8eKOjLQB7j4WlH5%2Fimage.png?alt=media&#x26;token=107a05c3-d83c-4df9-8f27-cd159ce3d437" alt=""><figcaption></figcaption></figure>

La linea susceptible a prototype:

```
let config = {params: deparam(new URL(location).searchParams.toString())};
```

Y por lo anterior, se procede a utilizar la siguiente carga:&#x20;

```
?__proto__[transport_url]=foo
```

<figure><img src="https://1990863415-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCohdns2VDWfowigRKoD0%2Fuploads%2Fqi9AovryCFsdcSvntAcG%2Fimage.png?alt=media&#x26;token=95af07a0-e02a-4208-84c9-f32fca6155b7" alt=""><figcaption></figcaption></figure>

En la evidencia previa, se puede apreciar el src apuntando a foo.

Modificamos nuestro payload para obtener un XSS:

<figure><img src="https://1990863415-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FCohdns2VDWfowigRKoD0%2Fuploads%2FB2e4Wmjwdvoj9Dea4gCS%2Fimage.png?alt=media&#x26;token=6e82a83d-1c33-4477-9ec9-71c8b3f00755" alt=""><figcaption></figcaption></figure>
