按老规矩先查壳,但本题是html文件,查壳会报错
在网上查了一下,可以用vscode查看源代码,我们用VS code打开。
<!DOCTYPE Html />
<html>
<head>
<title>FLARE On 2017</title>
</head>
<body>
<input type="text" name="flag" id="flag" value="Enter the flag" />
<input type="button" id="prompt" value="Click to check the flag" />
<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>
</body>
</html>
本题涉及到rot13算法:rot13也是过去在古罗马开发的凯撒密码的一种变体。ROT13是它自身的逆反,即:要还原成原文只要使用同一算法即可得,故同样的操作可用于加密与解密。该算法并没有提供真正密码学上的保全,故它不应该被用于需要保全的用途上。它常常被当作弱加密示例的典型。
应用ROT13到一段文字上仅仅只需要检查字母顺序并取代它在13位之后的对应字母,有需要超过时则重新绕回26英文字母开头即可。A换成N、B换成O、依此类推到M换成Z,然后串行反转:N换成A、O换成B、最后Z换成M。只有这些出现在英文字母里的字符受影响;数字、符号、空白字符以及所有其他字符都不变。替换后的字母大小写保持不变。
我找了一个网站直接把密文PyvragFvqrYbtvafNerRnfl@syner-ba.pbz放入即可(这是个偷懒的办法)
Rot13编码/解码网站:https://lzltool.cn/Tools/Rot13
flag{ ClientSideLoginsAreEasy@flare-on.com }
还有就是编脚本的方法
分析一下脚本
- 函数定义:
- def rot13(text): 定义了一个名为 rot13 的函数,它接受一个参数 text,这是需要进行ROT13编码的字符串。
- 初始化结果变量:
- result = "" 初始化一个空字符串 result,用来存储转换后的结果。
- 循环遍历输入文本的每个字符:
- for char in text: 对输入字符串 text 中的每个字符进行循环。
- 条件判断和字符转换:
- if 'a' <= char <= 'z': 如果字符是小写字母,执行以下转换:
- result += chr((ord(char) - ord('a') + 13) % 26 + ord('a')) 计算字符的ASCII值,将其转换为0-25范围内的一个数,加13后对26取模,再加上 'a' 的ASCII值,最后转换回字符并添加到结果字符串中。
- elif 'A' <= char <= 'Z': 如果字符是大写字母,执行类似的转换:
- result += chr((ord(char) - ord('A') + 13) % 26 + ord('A')) 这里的处理逻辑与小写字母相同,只是基准点变为了 'A'。
- else: 如果字符既不是小写字母也不是大写字母(即非字母字符):
- result += char 直接将该字符添加到结果字符串中,不做任何改变。
- if 'a' <= char <= 'z': 如果字符是小写字母,执行以下转换:
- 返回结果:
- return result 在循环结束后,返回最终构建的结果字符串。
有关rot13算法和解码请参考以下几篇文章
Python的rot13加密_python rot13-CSDN博客