login
打开题目,下载附件
发现是个html文件,打开如下
翻看源码,额,看不懂,但感觉应该可以得到flag
<!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>
根据下载的提示文件,flag应该是类似形如:flag{123456@flare-on.com}这样子,写了一下脚本把每个字母的ascll值都减了13得到结果。额,感觉,有的地方不太对。。
最后参考了一下别人的发现是rot13加密,参考rot13加密原理
写脚本解密
#include<stdio.h>
int main(){
int a[]={80,121,118,114,97,103,70,118,113,114,89,98,116,118,97,102,78,101,114,82,110,102,108,64,115,121,110,101,114,45,98,97,46,112,98,122};
int i;
for(i=0;i<sizeof(a);i++){
if(a[i]<=90&&a[i]>=65){
a[i]+=13;//对大写字母加密
if(a[i]>90)
a[i]-=26;//如果变换后的数值超过‘Z’则轮回回去
}
if(a[i]<=122&&a[i]>=97){
a[i]+=13;//对小写字母加密
if(a[i]>122)
a[i]-=26;
}
}
for(i=0;i<100;i++){
printf("%c",a[i]);
}
return 0;
}
当然,也有一些rot13解密的网站
https://www.ctftools.com/down/
http://www.mxcz.net/tools/rot13.aspx
HTML Code Source Encryption Tool | NO BS Marketplace
最后的到flag{ClientSideLoginsAreEasy@flare-on.com}
学到的知识点
1.网站翻源码
2.rot 13加密(如何判断是rot13加密?如果一串字符他的数字、符号、空白字符及其他字符都不变,只有英文字母发生变化,那就很有可能是ROT13密文,还有rot13的密文再次进行加密就会得到原来的未加密内容,即字符串加密后的密文再加密将会得到字符串本身)
MAZE:
打开文件,下载附件,发现加了upx的壳,脱壳
然后拖入到ida 中,发现类似迷宫的字符串
复制下来,发现是70个猜测是10*7的迷宫,但没找到主函数,无法看到伪代码,没法知道上下左右代表的格式什么。
看到花指令,可以把jnz部分和call near ptr0EC85D78Bh nop掉
本文是在od 中操作
选择如上后,在选择copy all
再在ida中打开就可以看到主函数了
int __cdecl main(int argc, const char **argv, const char **envp)
{
int i; // [esp+10h] [ebp-14h]
char v5[16]; // [esp+14h] [ebp-10h] BYREF
sub_401140(aGoThroughTheMa);
scanf("%14s", v5);
for ( i = 0; i <= 13; ++i )
{
switch ( v5[i] )
{
case 'a':
--dword_408078;
break;
case 'd':
++dword_408078;
break;
case 's':
--dword_40807C;
break;
case 'w':
++dword_40807C;
break;
default:
continue;
}
}
if ( dword_408078 == 5 && dword_40807C == -4 )
{
sub_401140(aCongratulation);
sub_401140(aHereIsTheFlagF);
}
else
{
sub_401140(aTryAgain);
}
return 0;
}
查看dword_408078与dword_40807C的值,使dword_408078为5并且dword_40807C为-4
时可以得到flag,根据我们之前找到的迷宫走法对照可知,上下左右分别为wsad
得出flag{ssaaasaassdddw}
学到的知识点:
1,迷宫问题,找到迷宫字符串,自己走出线路
2,如何nop掉花指令在OD中的操作,得到伪代码(可以用OD,也可以直接在ida中操作)
3.如何判断是花指令?参考一位大佬的文章(膜拜大佬.jpg) 花指令