虽然如此,但其实题目隐藏了很多线索。因此要解题,首先需要知道作者究竟真正想隐藏的是什么。
只有透过现象看本质,抽丝剥茧,方得真相。
SecList
下载)
利用前面重构出来的 python 代码,可以很容易就实现爆破测试,这里就不贴爆破代码了,直接说结果。
通过爆破我找到了两个符合条件的
key
值:
+3
和
yasmin
但是很遗憾,这两个
key
值虽然可以使得
pwd
的校验和为 8932 ,但提交后发现并不是真正的
pwd
。
看来事情并没有想象中简单。
我认真地分析
encrypt(salt, key)
函数,又发现一件事情:
key
的每个字符一直在通过
取模运算,循环
地对
salt
的每个字符依次执行某个操作(
xor
或
bit
)
亦即前面得到的两个
key
值,只要通过循环,就可以衍生出更多符合校验和条件的
key
值,例如:
+3
、
+3+3
、
+3+3+3
、
yasmin
、
yasminyasmin
、
yasminyasminyasmin
、……
显然不可能有这么多正确答案,换言之
爆破不是正确的解题思路
。
W3School 查到其 API 说明如下:
window.open(URL,name,features,replace)
:用于打开一个新的浏览器窗口或查找一个已命名的窗口
document.write(exp1,exp2,exp3,....)
:可向页面写入 HTML 表达式或 JavaScript 代码
其中 window.open
的参数说明为 :
○ URL:可选,声明了要在新窗口中显示的页面的 URL。
如果省略了这个参数,或者它的值是空字符串,那么新窗口就不会显示任何页面内容
○ name:可选,声明了新窗口的名称
○ features:可选,声明了新窗口要显示的标准浏览器的特征
○ replace:可选,本题代码中并没有使用这个参数
为了测试弹窗的效果,我把前面爆破得到的两个 key
值 +3
和 yasmin
分别输入到挑战页面。
因为这两个值校验和均为 8932 ,所以必定会触发弹窗。
使用浏览器的开发者工具查看弹窗源码,我发现几件很有意思的事情:
弹窗显示了意义不明的乱码内容,而且为了显示乱码内容,弹窗自动添加了 <html> 等标签(因为使用 python 运行时,并没有输出这些标签,而且 window.open
的 URL 为空,即页面本身不会有任何内容,所以我肯定这些标签是弹窗自动加的,与 window.open
和 document.write
无关)
不同的 key
值得到输出到弹窗的内容不同(意味着很可能有一个 key
会使得内容变成明文)
当 key
值为 +3
时,不难发现乱码中有一对闭合标签 <o_Â=>
尤其是最后一点,乱码的闭合标签 ,给了我很大的启示:
无
flag: 下载
flag 下载后的 flagzip 的文件需要手动更改后缀为 *.zip
,然后解压即可(为了避免直接刷答案)