-2

我在一次工作面试中得到了这个,但我不知道答案......我是由一个运行 JS 的 HTML 文件给出的,我需要找到密码。

当我运行 HTML 文件时,我得到了除了“Good job”或“Too bad”字符串之外的所有内容。我发现可能有一个隐藏代码覆盖了这段代码(我认为是因为我在这个 HTML 文件中找到的代码中看不到这样的字符串)。

无论如何...我从原​​始文件中复制了代码并将其保存为新的 HTML,然后我得到了“太糟糕了”而不是隐藏代码的奇怪消息。

如果有人可以向我解释以下代码并告诉我他是如何泄露正确密码的,我会非常高兴。

谢谢 !!

编码:

<script type="text/javascript">
function c(x){ alert((document.getElementsByTagName('input')[0].value == window.location.hostname.replace(/a-f/, '%')) ? 'Good job!' : 'Too bad!'); }
</script>
Password: <input /><br />
<button onclick="c()">Check</button>

我将 HTML 文件上传到:http ://www.filedropper.com/secretpass

4

3 回答 3

3
document.getElementsByTagName('input')[0].value == window.location.hostname.replace(/a-f/, '%')

此代码将输入的值与从 URL 主机名派生的字符串进行比较。

它用作显示消息的条件运算符的比较。

于 2013-07-03T19:22:20.590 回答
0

这个小提琴显示了事物的行为。我添加了一个附加功能,它只显示预期的密码。在这种情况下,预期的密码是fiddle.jshell.net,因为这是生成文档所在框架的主机。

所以是的,密码直接来自网页的 URL。如果它只是你本地机器上的一个 HTML 文件,就像你上面提到的,它的 URL 类似于

file:///C:/Users/yourname/Desktop/jobtest.html

这是地址栏中显示的任何内容。但是,我怀疑它是否如此简单,因为对于在file://URL 上运行的网页,我们有

window.location.hostname == ""

这意味着密码只是空字符串。因此,您将输入字段留空并单击按钮。也许如果您在本地服务器上运行它,它会起作用,在这种情况下,密码将是localhost,正如@Chris 提到的那样。

但我也怀疑你复制的代码可能略有错误。也许不是,也许这只是一个骗你的把戏,但replace()函数中的正则表达式似乎是错误的。代替

`window.location.hostname.replace(/a-f/, '%')`

我希望

`window.location.hostname.replace(/[a-f]/, '%')`

这将替换第一个小写字母a, b, c, d, ,ef%因此localhost,您将拥有lo%alhost.

无论如何,从您的问题来看,密码只是 URL 的主机名部分,第一个实例a-f替换为%. 因此www.zelda-forever.com,您将拥有www.zeld%orever.com.

于 2013-07-03T20:03:42.427 回答
0

我相信密码将取决于托管此脚本的网站。c 函数查看 window.location.hostname(例如 www.google.com)并将 a、b、c、d、e 或 f 的第一次出现替换为百分号“%”。我认为百分号在 JS 正则表达式表示法中没有任何意义,因此如果脚本托管在 www.yahoo.com 上,密码将为 www.y%hoo.com

于 2013-07-03T19:28:30.097 回答