攻防世界flag_in_your_hand

攻防世界flag_in_your_hand

下载附件

image-20220513202239926

打开这个网页代码看一下

image-20220513202309564

在58行发现这样一段代码,发现点击这个“Get flag”按钮时,就会调用getFlag()方法。我们再看一下这个getFlag()方法

image-20220513202948563

分析代码可知,在showFlag()之前,还会调用checkToken(),bm()这两个函数,我们看一下这个checkToken()函数(它在那个js文件中)

image-20220513203314060

发现返回的是“FAKE-TOKEN”,说明是假的

再看一下bm()这个函数,发现有各种函数的嵌套

image-20220513203803415

那我们就先不管他,先往下看,看一下那个showFlag()函数(这还是在index.html文件中)

image-20220513203903064

审查代码,发现显示right还是wrong和ic的布尔值有关

image-20220513204020986

搜索ic,一个一个观看,发现ic刚开始的值是false,猜想应该是要让ic的值变成true才行,再看一下js文件

搜素一下ic = true在哪里出现(=前后有空格,搜索时要注意)

发现ic = true在下面这个函数里

image-20220513204315502

通过审查代码,我们可以发现只有在 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了。

image-20220513210150219

RenIbyd8Fgg5hawvQm7TDQ

posted @ 2022-05-13 21:04  Jinx8823  阅读(272)  评论(0编辑  收藏  举报