攻防世界flag_in_your_hand
攻防世界flag_in_your_hand
下载附件
打开这个网页代码看一下
在58行发现这样一段代码,发现点击这个“Get flag”按钮时,就会调用getFlag()方法。我们再看一下这个getFlag()方法
分析代码可知,在showFlag()之前,还会调用checkToken(),bm()这两个函数,我们看一下这个checkToken()函数(它在那个js文件中)
发现返回的是“FAKE-TOKEN”,说明是假的
再看一下bm()这个函数,发现有各种函数的嵌套
那我们就先不管他,先往下看,看一下那个showFlag()函数(这还是在index.html文件中)
审查代码,发现显示right还是wrong和ic的布尔值有关
搜索ic,一个一个观看,发现ic刚开始的值是false,猜想应该是要让ic的值变成true才行,再看一下js文件
搜素一下ic = true在哪里出现(=前后有空格,搜索时要注意)
发现ic = true在下面这个函数里
通过审查代码,我们可以发现只有在 if (a[i] - s.charCodeAt(i) != 3)
这个if语句不执行时,才能返回ic=true,也就是说a[i] - s.charCodeAt(i)这个值都要等于3
然而这个charCodeAt()这个函数我们不知道是什么意思,去搜索一下
教程中是这样描述的:
var str = "HELLO WORLD";
var n = str.charCodeAt(0);
返回字符串第一个字符的 Unicode 编码(H 的 Unicode 值):
就是说a[i]中的值减去s中每个字符的Unicode值都等于3,此时我们就可以写脚本,把s这个字符串给构造出来
python中:chr()函数的作用是返回对应的 Unicode 字符
ord()函数是返回对应的ASCII数值,或者Unicode数值
我们就通过chr()来求s的字符
a=[118,104,102,120,117,108,119,124,48,123,101,120];
for x in a:
print(chr(x-3),end='')
security-xbu
解出来的s的字符串就是对应的Token值,我们用浏览器打开html文件,输入这个Token就可以得到flag了。
RenIbyd8Fgg5hawvQm7TDQ