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

5.9 KiB
Raw Blame History

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS红队专家

支持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事件以将信息传输到由他控制的服务器

概述

带有后向链接

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

https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITH_LINK.png

没有后向链接

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

https://owasp.org/www-community/assets/images/TABNABBING_OVERVIEW_WITHOUT_LINK.png

示例

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

{% code title="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>

{% endcode %}

{% code title="malicious.html" %}

<!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" %}

<!DOCTYPE html>
<html>
<body>
<h1>New Malicious Site</h1>
</body>
</html>

{% endcode %}

可访问的属性

在发生跨域访问(跨不同域)的情况下,恶意站点可以访问由opener JavaScript对象引用指向的window JavaScript类实例的属性仅限于以下内容

  • opener.closed:通过访问此属性,可以确定窗口是否已关闭,并返回一个布尔值。
  • opener.frames此属性提供对当前窗口中所有iframe元素的访问权限。
  • opener.length此属性返回当前窗口中存在的iframe元素的数量。
  • opener.opener:通过此属性可以获取对打开当前窗口的窗口的引用。
  • opener.parent:此属性返回当前窗口的父窗口。
  • opener.self:此属性提供对当前窗口本身的访问权限。
  • opener.top:此属性返回最顶层的浏览器窗口。

然而,在域相同的情况下,恶意站点可以访问由window JavaScript对象引用公开的所有属性。

预防措施

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

参考

从零开始学习AWS黑客技术成为专家 htARTEHackTricks AWS Red Team Expert

支持HackTricks的其他方式