buu_login,maze

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)  花指令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值