【发布时间】:2020-12-18 15:37:55
【问题描述】:
我正在尝试解决这个 xss 挑战:https://sandbox.pwnfunction.com/warmups/jefff.html
我在哪里找到了这段代码:
<h2 id="maname"></h2>
<script>
let jeff = (new URL(location).searchParams.get('jeff') || "JEFFF")
let ma = ""
eval(`ma = "Ma name ${jeff}"`)
setTimeout(_ => {
maname.innerText = ma
}, 1000)
</script>
经过js代码分析。
首先,我在 URL https://sandbox.pwnfunction.com/warmups/jefff.html?jeff=" Pikachu" 中添加了 jeff 参数,我得到了一些类似 Ma name Pikachu 的输出。
现在我在 jeff 参数中输入了一些恶意数据。所以我输入了?jeff="alert(1337)" 现在我得到了一个错误
如果我们查看代码为什么会这样:
<h2 id="maname"></h2>
<script>
//get jeff value from jeff param.
let jeff = "alert(1337)"
let ma = ""
//put jeff value
eval(`ma = "Ma name "alert(1337)""`)
//here we see that of course error is arise
setTimeout(_ => {
maname.innerText = ma
}, 1000)
</script>
现在我们使用另一个类似的有效负载,我们只在有效负载中添加-,而有效负载的其余部分是相同的?jeff="-alert(1337)-"。在这里,当我们收到警告框 1337 时,我们没有发现任何控制台错误。
如果我们看到我们找到的 eval 函数:
<h2 id="maname"></h2>
<script>
//get jeff value from jeff param.
let jeff = "-alert(1337)-"
let ma = ""
//put jeff value
eval(`ma = "Ma name "-alert(1337)-""`)
setTimeout(_ => {
maname.innerText = ma
}, 1000)
</script>
我的预期输出:一些控制台错误。
实际输出:弹出警告框。
为什么这个有效载荷没有给出控制台错误?这个有效载荷如何在这里工作?在此有效负载中使用- 运算符的目的是什么?
【问题讨论】:
-
@Liam 我不明白它在这里是如何应用的。
-
@Gander 随时提出修改建议以解决易于修复的问题。
-
@Liam 请撤回此投票。在这种情况下,
eval的使用是出于教育目的。
标签: javascript xss security