php iframe referer,【技术分享】通过iframe注入实现referer欺骗

85795

稿费:100RMB

投稿方式:发送邮件至linwei#360.cn,或登陆网页版在线投稿

前言

去年我们提过一种很简单的在Edge上实现referer欺骗的技术,该技术允许我们实现referer欺骗甚至是绕过XSS过滤。今天我发现该问题被修复了,因此我决定在补丁上进行尝试寻找问题。老实说,我觉得这只是一种攻击的变种而不是一种绕过。从实践来看,该技术绕过了补丁再次攻击成功,但是从技术角度来看,新方法略有不同。无论如何,让我们一起来探究一下。

漏洞修复前的PoC

在之前的文章中我们提到,我们可以通过简单的打开新的带着期望referer的窗口然后在跳转到目标来实现referer欺骗。两行代码抵过上千文字,看下面的poc代码,whatismyreferer.com会将paypal.com作为referer,而事实上referer应该是执行location.href的页面。

win = window.open("https://www.paypal.com");

win.location.href = "https://www.whatismyreferer.com";

这就足以在Edge实现referer欺骗了,不过这个问题现在已经被修复了。然而,我想出了一个简单的变种,没有debug和分析,仅仅是一个大胆的尝试。我尝试了许多方法来改变最终的URL(用location.replace,meta refresh,window.open等来替代location.href)以测试Edge是否可以被再次欺骗,遗憾的是所有的尝试都失败了。但是,如果URL被iframe从内部更改了会发生什么?referer值会是top还是iframe的URL?

玩转referer

在回答前面的问题前,请记住,通常情况下referer始终应该是设置URL的referer。假设我们的fackbook.com带有一个指向evil.com的iframe,如果iframe改变top URL为paypal.com,paypal收到的referer应该是evil而不是facebook。

85795

上图展示的是Edge上期望的(正确的)行为。然而,如果我们使用location.href来设置定向链接而不是使用常规链接,Edge就犯傻了,这时它会使用top的地址来作为referer。

85795

下面是一个简单的测试页面,用以展示用常规链接和location.href改变top URL之间的区别。它们都会跳转到whereismyreferer.com,但正如你将看到的,常规链接行为是正确的,而top.location.href行为不正确。[展示漏洞的页面]

但是我们如何利用该漏洞呢?很明显facebook上不可能加载evil.com,对吗?然而facebook、yahoo等几乎所有大网站都会加载带有广告的iframe。这些广告则有能力在这些大网站上加载任意页面。当然,这些广告也完全可以用top.location.href来绕过XSS过滤。

就我自己而言,我讨厌理论上的漏洞,因为它们不能让我感到满足。因此,我们的目标是加载一个网站(我们想要欺骗的referer),注入iframe到其中,然后从注入的iframe中通过top.location.href跳转到目标网站。简单点说就是,我们要让whatismyreferer.com(目标)相信用户是从paypal.com(欺骗的referer)跳转过来的,我们要怎样做到呢?

注入iframe

1、打开一个新窗口重定向到paypal。

2、在跳转前注入一个iframe。

3、一旦重定向,iframe内部实现top.location定向到whatismyreferer.com。

这个iframe注入以前在IE上htmlFile/UXSS文章中提到过,我们在这里快速回顾下。当我们打开一个新的窗口时(1)我们可以注入任意我们想要的内容,因为我们还在当前域。这是我们注入iframe(2)的最佳时机。然后一旦重定向发生,Edge将尽力从页面删除所有内容(包括我们的iframe)并渲染paypal。不过,我们将通过简单的来阻断线程。

如何阻断线程?在这种特殊情况下,我们将使用和这里相同的技术,只是一个丑陋的可见粗体警报。当然我们有许多方式来阻断线程并且不弹出警报,不过我们不会在这里提供。接着让我们来创建POC吧!

// Open a new window with a server redirect to paypal

var win = window.open("redir.php?URL=https://www.paypal.com");

// Create an iframe immediately, before it redirects

var ifr = win.document.createElement("iframe");

win.document.appendChild(ifr);

// Make sure the iframe has access to its top (otherwise it will lose it)

win[0].opener = win;

// Block the iframe and once the redirect happens, move to the victim website.

win[0].setTimeout("('Close me once the site starts loading behind');" +

"opener.location='https://www.whatismyreferer.com'");

85795

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值