-
-
[原创]kanxuectf2019 第三题
-
发表于:
2019-3-22 10:52
6829
-
其实这个题没什么好说的,出题的大佬在去年看雪2018国庆赛中出了一道类似的题目,基本换汤不换药,大家完全可以对照那题的解题报告把这道题做出了。
贴几个脚本吧。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | function ckpswd()
{
key= "simpower91" ;
a = document.all.pswd.value;
if (a.indexOf(key) ==0)
{
l=a.length;
i=key.length;
sptWBCallback(a.substring(i,l));
}
else
{
alert( "wrong!<" + a + "> is not my GUID ;-)" );
return "1234" ;
}
}
undefined(){alert( "congratulations!" );}
|
第一步验证:判断其实位置是否为simpower91,然后将后续函数传递给sptWBCallback进行下一步验证。
之后程序会按照params,eventname,id的顺序依次读入参数,由于我们只给sptWBCallBack传递了一个参数,所以输入的后续所有部分都被赋值到了变量id中。然后调用了一个虚函数。
函数会直接判断当前id长度是否为4,如果不为4,直接走人。当id长度为4时,判断当前目录下是否有data.txt文件,如果有取data.txt中的数据进行解密(取反),这里猜测是作者测试时用的。如果没有data.txt,则从程序段中读入数据进行解密。然后调到下面的函数开始每一句解释执行
我们可以看到每次的判断基本都分为4个部分,取输入一个字节,加一个数,和一个值比较一下,然后nop和不等于跳转(懒得从od中提取了,大家自行去看吧)。
最后正确id为a123
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | function ckpswd()
{
key= "simpower91" ;
a = document.all.pswd.value;
if (a.indexOf(key) ==0)
{
l=a.length;
i=key.length;
sptWBCallback(a.substring(i,l));
}
else
{
alert( "wrong!<" + a + "> is not my GUID ;-)" );
return "1234" ;
}
}
undefined(){alert( "congratulations!" );}
|
第一步验证:判断其实位置是否为simpower91,然后将后续函数传递给sptWBCallback进行下一步验证。
之后程序会按照params,eventname,id的顺序依次读入参数,由于我们只给sptWBCallBack传递了一个参数,所以输入的后续所有部分都被赋值到了变量id中。然后调用了一个虚函数。
[注意]看雪招聘,专注安全领域的专业人才平台!