gpt4 book ai didi

javascript - Javascript 如何处理连字符?

转载 作者:行者123 更新时间:2023-12-04 01:32:43 24 4
gpt4 key购买 nike

我正在查看 XSS Game这个挑战叫做Jeff .

挑战将名为 jeff 的查询参数作为输入,并将其存储在名为 jeff 的变量中。挑战的目标是在页面上加载一个警告框。该解决方案使用连字符在 eval() 函数中运行 Javascript。

所以,我们有这个评估:

eval(`ma = "Ma name ${jeff}"`)

获取警告框的解决方案输入是(剧透警告!没有双关语意。):

"-alert(1337)-"

现在,我迫切需要了解 Javascript 如何处理这些连字符!帮忙!?

最佳答案

网站使用的代码是:

let jeff = (new URL(location).searchParams.get('jeff') || "JEFFF")
eval(`ma = "Ma name ${jeff}"`)

请注意 searchParams给你一个 URLSearchParams对象,及其 .get方法给你一个与参数对应的字符串。所以,目标是想出一些字符,当插入到

ma = "Ma name <CHARACTERS>"

并运行,导致任意代码执行。

第一步是包围"中的字符s,以便在 name 之后结束字符串文字并在 CHARACTERS 之后恢复字符串文字:

ma = "Ma name " <SOMETHING ELSE> ""

所以现在你需要弄清楚什么样的字符可以进入<SOMETHING ELSE>这将生成有效的 Javascript 代码。

如果你只是输入 alert() ,那将是无效的:

ma = "Ma name " alert() ""

这是语法错误。你需要一些东西来表明 alert 是什么与它之前的字符串文字标记有关。 -可以做到这一点,但任何其他运营商也可以,比如 + , % , 等等。您还需要连接 alert 的末尾使用恢复的字符串文字,因此最后需要另一个运算符:

ma = "Ma name "-alert('foo')-""
// ^^^^^^^^^^^^^^^^

ma = "Ma name "-alert('foo')-""

所以,需要插入的字符是:

"-alert('foo')-"

请注意,因为字符串是在搜索参数内部传递的,所以 +不会被解释为文字字符 + - 相反,它将是 interpreted as a space .所以 jeff="+alert(1337)+" 行不通,但是 jeff="%2balert(1337)%2b" 会的。

分号也有效,因为它们导致:

ma = "Ma name " <SOMETHING ELSE> ""
ma = "Ma name "; alert() ;""

这是有效的语法。

关于javascript - Javascript 如何处理连字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60593034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com