[FlareOn4]login
Start
前端验证flag:
提取:
var flag = document.getElementById("flag").value;
var rotFlag = flag.replace(/[a-zA-Z]/g, function(c){return String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);});
if ("PyvragFvqrYbtvafNerRnfl@syner-ba.pbz" == rotFlag) {
alert("Correct flag!");
} else {
alert("Incorrect flag, rot again");
}
看到关键的一条加密:
String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);
分开成三部分进行分析:
1:设res1 = c <= "Z" ? 90 : 122
每次传入一个字母,看看是大写还是小写,并且对应z
的ascii码。
2:设res2 = c.charCodeAt(0) + 13
将当前字符的ascii
值加13
3: res1 >= res2 ? res2 : res2 - 26
最后看看加完的值是不是大于当前的Z
,如果是的话就减26
,否则输出+13
后的结果,也就是res2
那么就可以反过来了。-13
之后小于当前字符对应的A
的时候,就+26
,否则就直接-13
,直接上exp.py:
enc = 'PyvragFvqrYbtvafNerRnfl@syner-ba.pbz'
flag = ''
for i in enc:
if ord(i) >= 65 and ord(i) <= 90:
if ord(i) - 13 < 65 :
flag += chr(ord(i) + 13)
else:
flag += chr(ord(i) - 13)
elif ord(i) >= 97 and ord(i) <= 122:
if ord(i) - 13 < 97 :
flag += chr(ord(i) + 13)
else:
flag += chr(ord(i) - 13)
else:
flag += i
print(flag)
# ClientSideLoginsAreEasy@flare-on.com
其实整个密文的格式没有改变,然后附件中给了一个Description.txt
,里面其实也算是给了提示了,所以这道题基本上就是白给题,就是跟以往遇到的exe或者二进制不太一样,这个需要去了解JS的函数,不过题目用到的函数都可以通过命名来理解,还是比较简单的。