tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.
Description
Dans une situation où un attacker peut controler l'argument href
d'une balise <a
avec l'attribut target="_blank" rel="opener"
qui va être cliquée par une victime, l'attacker dirige ce link vers un site web sous son contrôle (un malicious website). Ensuite, une fois que la victim clique sur le lien et accède au site de l'attacker, ce malicious website pourra controler la page originale via l'objet javascript window.opener
.
Si la page n'a pas rel="opener"
mais contient target="_blank"
et n'a pas non plus rel="noopener"
, elle pourrait également être vulnérable.
Une manière classique d'abuser de ce comportement serait de changer la localisation du web original via window.opener.location = https://attacker.com/victim.html
vers un web contrôlé par l'attacker qui ressemble à l'original, afin qu'il puisse imiter le login form du site web original et demander des identifiants à l'utilisateur.
Cependant, notez qu'étant donné que l'attacker peut maintenant contrôler l'objet window du site web original, il peut en abuser de d'autres manières pour effectuer des stealthier attacks (peut-être en modifiant des événements javascript pour exfiltrer des informations vers un serveur contrôlé par lui ?)
Overview
With back link
Lien entre les pages parent et enfant lorsque l'attribut de prévention n'est pas utilisé :
Without back link
Lien entre les pages parent et enfant lorsque l'attribut de prévention est utilisé :
Examples
Créez les pages suivantes dans un dossier et exécutez un serveur web avec python3 -m http.server
Ensuite, access http://127.0.0.1:8000/
vulnerable.html, click sur le lien et notez comment l'original website URL changes.
<!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>
<!DOCTYPE html>
<html>
<body>
<script>
window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</script>
</body>
</html>
<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>
Propriétés accessibles
Dans le scénario où un accès cross-origin se produit (accès à travers différents domaines), les propriétés de l'instance de la classe JavaScript window, référencées par l'objet JavaScript opener, auxquelles un site malveillant peut accéder sont limitées aux suivantes :
opener.closed
: Cette propriété est utilisée pour déterminer si une fenêtre a été fermée, renvoyant une valeur booléenne.opener.frames
: Cette propriété donne accès à 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 par cette propriété.opener.parent
: Cette propriété renvoie la fenêtre parente 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 de navigateur la plus haute.
Cependant, dans les cas où les domaines sont identiques, le site malveillant a accès à toutes les propriétés exposées par la référence d'objet JavaScript window.
Prévention
Les informations de prévention sont documentées dans le HTML5 Cheat Sheet.
Références
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le 💬 groupe Discord ou le groupe telegram ou suivez nous sur Twitter 🐦 @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PRs au HackTricks et HackTricks Cloud dépôts github.