钓鱼攻击之Reverse Tabnabbing

2020-01-13 约 241 字 预计阅读 2 分钟

声明:本文 【钓鱼攻击之Reverse Tabnabbing】 由作者 sircoding 于 2020-01-13 10:00:48 首发 先知社区 曾经 浏览数 200 次

感谢 sircoding 的辛苦付出!

前言:

最近在hackone上有漏洞详情提到这个漏洞利用点,利用Reverse Tabnabbing进行钓鱼攻击,于是学习一下这个漏洞,之后在一些平台测试,发现国内挺多平台对这个漏洞都没有进行防御,在这里分享给大家。

原理:

最中意对tabnabbing进行解释为标签页劫持攻击,暂时翻译为反向标签劫持攻击。该攻击意为在A页面中打开一个新的页面B而不是替换原始页面,此时B页面可以对A页面进行某些操作,本漏洞利用的操作为将A页面修改为其他的页面,由于用户对页面A是信任的,因此此漏洞的主要利用点是将A页面改为钓鱼页面C,攻击者通过该页面获取用户的登陆凭证等敏感信息,并将此信息发送到钓鱼网站C。

此时介绍一下上文中B页面对A页面能进行的操作,因为当B页面被打开的时候,会有一个web API接口为window.opener,该接口 返回打开当前窗口的那个窗口的引用,例如:在window A中打开了window B,B.opener 返回 A,而该接口具有如下操作:

opener.closed: Returns a boolean value indicating whether a window has been closed or not.
opener.frames: Returns all iframe elements in the current window.
opener.length: Returns the number of iframe elements in the current window.
opener.opener: Returns a reference to the window that created the window.
opener.parent: Returns the parent window of the current window.
opener.self: Returns the current window.
opener.top: Returns the topmost browser window.

通过OWASP对该漏洞的分析,如果在页面中使用标签,具有target属性,其值为_blank,同时没有使用rel="noopener"属性,那将会产生该漏洞;同时使用window.open方法也存在该漏洞,此文举例了a标签和该方法进行说明问题。
在页面
首先用图片展示一下漏洞原理:
具有漏洞,恶意的B页面可以页面获取到window.opener接口:

没有漏洞,恶意的B页面不可以页面获取到window.opener接口:

下面展示一下代码进行理解
a.html(正常网站):

<html>
<title>legit website</title>
 <body>
  <li><a href="http://localhost/b.html" target="_blank" >Vulnerable target using html link to open the new page</a></li>
  <button onclick="window.open('http://localhost/b.html')">Vulnerable target using javascript to open the new page</button>
 </body>
</html>

b.html(恶意网站)

<html>
<title>malicious website</title>
 <body>
  <script>
   if (window.opener) {
      window.opener.location = "http://localhost/c.html";
   }else{alert("no vulnerability");}

  </script>
 </body>
</html>

c.html(钓鱼网站)

<!DOCTYPE html>
<html>
<head>
    <title>phish website</title>
</head>
<body>
<li><a href="http://localhost/b.html" target="_blank">Vulnerable target using html link to open the new page</a></li>
  <button onclick="window.open('http://localhost/b.html')">Vulnerable target using javascript to open the new page</button>
</body>
</html>

a页面中可以使用a标签和window.open进行打开新的页面

点击之后:

看一下原始网页,惊奇的发现,网页已经成为c.html,而且页面和之前一样,此时如果根据网站功能进行钓鱼,人们通常不会注意到原始页面的跳转,因此此时用户的注意力已经到了新打开的页面,如果此时有信息凭证的交互,那么将是十分危险的,同时该跳转页面也可以为其他域,当然伪装的时候当然可以把域名也做得非常像,更多的利用方式就要靠更多的脑洞了。

防御

  • 向a标签中添加rel="noopener",这个根据浏览器和版本的支持性,有的旧版本可以使用rel=noreferrer禁止获取referer请求头。
  • 通过一下代码进行手动设置opener API:
    var otherWindow = window.open();
    otherWindow.opener = null;
    otherWindow.location = url;
    操作一下,添加了rel="noopener"之后,点击链接,原网站没有变化

但是window.open还是需要方法二进行防御的,示例代码:

<html>
<title>legit website</title>
 <body>
    <script type="text/javascript">
        var otherWindow = window.open();
        otherWindow.opener = null;
        otherWindow.location = 'http://localhost/b.html';
    </script>
  <li><a href="http://localhost/b.html" target="_blank" rel="noopener">Vulnerable target using html link to open the new page</a></li>
 </body>
</html>


有不对之处还望师傅们多多交流哈~

参考

https://www.owasp.org/index.php/Reverse_Tabnabbing
https://hackerone.com/reports/662287
https://dev.to/ben/the-targetblank-vulnerability-by-example
https://mathiasbynens.github.io/rel-noopener/
http://www.azarask.in/blog/post/a-new-type-of-phishing-attack/
https://developer.mozilla.org/zh-CN/docs/Web/API/Window/opener

关键词:[‘渗透测试’, ‘渗透测试’]


author

旭达网络

旭达网络技术博客,曾记录各种技术问题,一贴搞定.
本文采用知识共享署名 4.0 国际许可协议进行许可。

We notice you're using an adblocker. If you like our webite please keep us running by whitelisting this site in your ad blocker. We’re serving quality, related ads only. Thank you!

I've whitelisted your website.

Not now