【发布时间】:2020-06-20 21:34:41
【问题描述】:
挑战将名为jeff 的查询参数作为输入,并将其存储在名为jeff 的变量中。挑战的目标是在页面上加载一个警告框。该解决方案使用连字符在 eval() 函数中运行 Javascript。
所以,我们有这个评估:
eval(`ma = "Ma name ${jeff}"`)
获得警报框的解决方案输入是(剧透警报!没有双关语。):
"-alert(1337)-"
现在,我迫切需要了解 Javascript 如何处理这些连字符!救命!?
【问题讨论】:
-
eval 的结果是
ma = "Ma name "-alert(1337)-"",所以重要的是初始引号,而不是连字符(仅被视为正常减法)。";alert(1337);//将是另一个有效的解决方案。 -
是的,阅读链接的帖子 10 次并没有给我任何关于 Javascript 如何处理连字符以使 XSS 工作的好线索..
-
你是对的 - 这不会产生一元运算符(例如
ma = -x),它会产生 2 个标准运算符,例如ma = A - B - C. -
谢谢,@cmbuckley。最初的引号是有道理的,我自己用分号解决了它。我仍然不明白连字符在警报工作中的作用。为什么减法有效,而不是加法?
-
@Quentin 我认为这与一元 - 无关。当将第一个字符串文字的末尾与后面的表达式连接时,需要(在两边)使语法有效。
标签: javascript xss