mirror of
https://github.com/carlospolop/hacktricks
synced 2024-12-30 15:03:20 +00:00
117 lines
6.5 KiB
Markdown
117 lines
6.5 KiB
Markdown
<details>
|
|
|
|
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras maneiras de apoiar o HackTricks:
|
|
|
|
* Se você quiser ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Obtenha [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Compartilhe seus 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>
|
|
|
|
|
|
# Descrição
|
|
|
|
Em uma situação em que um **atacante** pode **controlar** o argumento **`href`** de uma tag **`<a`** com o atributo **`target="_blank" rel="opener"`** que será clicado por uma vítima, o **atacante** pode **apontar** este **link** para um site 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** será capaz de **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 também pode ser vulnerável.
|
|
|
|
Uma maneira comum de abusar desse comportamento seria **alterar a localização do site original** via `window.opener.location = https://attacker.com/victim.html` para um site controlado pelo atacante que **parece com o original**, para que possa **imitar** o **formulário de login** do site original e solicitar credenciais ao usuário.
|
|
|
|
No entanto, observe que como o **atacante agora pode controlar o objeto de janela do site original** ele pode abusar 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`\
|
|
Em seguida, **acessar** `http://127.0.0.1:8000/`vulnerable.html, **clique** no link e observe 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**, referenciadas pelo objeto JavaScript **opener**, que podem ser acessadas por um site malicioso estão limitadas às seguintes:
|
|
|
|
- **`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 acima.
|
|
|
|
No entanto, em casos em que 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 na [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)
|
|
|
|
|
|
|
|
|
|
<details>
|
|
|
|
<summary><strong>Aprenda hacking AWS do zero ao herói com</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
|
|
|
|
Outras formas de apoiar o HackTricks:
|
|
|
|
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF**, confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
|
* Adquira o [**swag oficial PEASS & HackTricks**](https://peass.creator-spring.com)
|
|
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
|
* **Junte-se ao** 💬 [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
|
|
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
|
|
|
</details>
|