flare 5.30

作为一个网页,在脚本里对输入进行处理并与flag编码结果比对,如下:

1
2
3
4
5
6
7
8
9
10
11
<script type="text/javascript">
document.getElementById("prompt").onclick = function () {
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");
}
}
</script>

重点之一是flag.replace的第一个参数:正则表达式。不难看出是提取出大小写字母。对于非大小写字母则不进行处理。

处理过程是:

1
String.fromCharCode((c <= "Z" ? 90 : 122) >= (c = c.charCodeAt(0) + 13) ? c : c - 26);

了解js特定的语法后,编写脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
key = "PyvragFvqrYbtvafNerRnfl@syner-ba.pbz"
ans = ''
strr="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

for i in key:
if (i in strr):
for i1 in strr:
c = i1
a = chr(90) if ord(c) <= 90 else chr(122)
b = chr(ord(c) + 13)
end = chr(ord(c) + 13) if ord(a) >= ord(b) else chr(ord(c) - 13)
if end == i:
ans += c
break
else:
ans +=i


print(ans)

但是编写过程中有很多问题。于是第二个很重要的点:网页动态调试:

首先下断点:

在右侧监视窗口添加变量:

点击按钮触发,就能检查处理后的字符串有哪些问题并进行修改:

2021-06-19
Contents
  1. flare 5.30

⬆︎TOP