DOM XSS 怎么可能在这里?

信息安全 xss dom
2021-08-21 18:31:14

我正在查看这个网站并试图了解这个 XSS 是如何可能的,但我就是想不通。这是网址:http ://www.domxss.com/domxss/01_Basics/05_jquery_html.html?681973661

<script src="../js/jquery-1.9.1.js"></script>
<script>
function setMessage(){
    var t=location.hash.slice(1);
    $("div[id="+t+"]").html("Message from the name "+window.name);
}
$(document).ready(setMessage);
</script>
<span>
    <a href="#message" > Show Here</a>
    <div id="message">Showing Message1</div>
</span>
<span>
    <a href="#message1" > Show Here</a>
    <div id="message1">Showing Message2</div>
2个回答

此页面从不受信任的来源获取输入,并在浏览器中直接将其输出为 HTML。

在这种情况下,不受信任的来源是window.name对于没有经验的程序员来说,这可能看起来无害,但实际上,它可以设置为任意值,因为它是从框架名称派生的:

<iframe
    src="http://www.domxss.com/domxss/01_Basics/05_jquery_html.html?681973661#message"
    name="<script>alert(0)</script>"
></iframe>

在您给出的代码中,还有另一个明显的漏洞:选择器也取自不受信任的来源(URL),这允许攻击者在他们想要的任何位置输出 HTML。这不需要是框架,只需访问以下 URL:

http://www.domxss.com/domxss/01_Basics/05_jquery_html.html?681973661#whatever],body,[whatever

t设置为"whatever],body,[whatever"(from location.hash),并用于构造 jQuery 选择器 ( "div[id="+t+"]")。总之,它会产生一个选择(例如)<body>元素的选择器:

"div[id=whatever],body,[whatever]"

虽然不如 有害window.name,但它可能值得修复。

除了第一个答案中描述的攻击向量外,攻击者还可以设置

window.name="<script>alert(1)</script>";

在他们的恶意网页上并将受害者重定向到您的网页。因为 window.name 在页面加载时仍然存在,所以这也是一个 xss 攻击向量。