海啸杯部分题WriteUp

密码学

1.凯撒将军

本题主要考察了对简单唯一密码的理解。由题目所给出的凯撒大帝,可以联想到凯撒密码,又提示了offset=3(消除3),应该密文就是这段字符往后位移3位就可以得出。但是和一般的凯撒密码不同,传统的凯撒密码是只有英文字母所组成,但是这个是由数字+字母+符号所组成,当时忘记了凯撒密码的概念,导致这道题卡了一下....就是解题不需要对26取余,直接对于字符-3即可得到答案。

#include
#include
int main()
{
    char a[] = "]p{k]6wmfqozgJ

得出结果如下:


image.png

可以明显看出得出的密文并不是flag,但是在最后有两个明显的等于号,猜测为base64编码(这个编码好像在题目中挺常见的),随便搜一个在线base64解密即可得出答案:


image.png

2.小明家的小菜园

题目是小明家菜园要建栅栏,请教女神,却只得到了一段字符,猜测可能为栅栏密码。找一个在线栅栏解密,之后解密就行,这道题中是以7个字符作为一个分组。想了解更多栅栏密码可以自己百度找找。


image.png

3.战报

下载文件之后会有一段明文和一段密文:


image.png

分析
考点为密码的统计分析,即通过统计密文中每个字符出现的频率与统计明文中每个字符的出现频率进行对比,相近或相同即为密文字符所对应的解密字符。
统计得出如下结果:

密文:
image.png

明文:
image.png

通过对比就可以得出密文中字符所对应的明文中的字符,最后得出flag为 eantosi

杂项

感觉杂项考察的内容有点分散,但有些又会比较考脑洞,所到底还是知识面有点狭隘....还是得多参加比赛和多做题。

1.签到题

说真,虽然是签到题,但是毫无头绪......最后是问了下别人和自己查一下才找到答案。考差了图片的base64编码格式。
参考如下:这是一个链接
可以看出图片的base64编码的格式如下:

image.png

对比flag.txt文件中的格式,可能是图片转成的Base64编码。
找一个在线转码:
image.png

2.老烟枪

打开压缩包发现是王源抽烟的照片:
image.png

不难联想到可能存在图片内文件包含,直接拖kali:


image.png

用 binwalk -e +图片名字.格式即可提取出内在文件:
image.png

里面就有flag。

3.表白

看了题解发现好像还有还要修改压缩包软解密.....但是我直接就打开了这个压缩包....该题是在桂铅师兄的帮助下了解的。打开图片发现:

image.png

完全没做过该类型的题,根据以往的经验,只能去kali看看有没有隐藏了什么,结果发现:
image.png

....没有头脑.... 后来了解到,linux中会对图片的crc码进行校对,这个图片被修改过宽度,导致它的crc码可能就会出问题,导致无法打开。
用010编辑器打开这个图片
image.png

发现文件头是没问题的(不然也打开不了),之后找到决定图片高度的0016-0019h,修改AD的值为FA,即可得出flag:
image.png

image.png

对于文件头的16进制,图片文件格式的解析参考如下:
常见文件的文件头(16进制)
常见图片文件格式简析

Web

1.GZMTU学生?

点进去只有这个界面:


image.png

可能是需要识别特定IP才会认为你是GHMTU学生。想起XFF注入,用BurpSuite抓包,构造XFF头:


image.png

Reverse

1.Easy reverse

本题需要一个工具:IDA,在52破解里面就有,可自行下载。
用工具打开之后F5:


image.png

进去程序的入口,一般是main函数看看:


image.png

函数的主要意思是:有3个字符串变量v1,v2,v3,输入v3的值后经过一个函数的处理后赋值给v1,v0是在地址0ff_425A30的一个值(已经写好了)。之后通过对比v1和v0的值,输出特定的字符串。先进去看看v0的值:
image.png

kanlxvdzTljyTfyTeuor

在没有输入对这个值的时候就会返回错误,否则返回正确。
查看处理v3的函数:


image.png

算法为将传入的字符串与0xC进行异或再+1,那么根据这个思路逆过来,就是需要将v0字符串-1再与0xC异或就可以得到输出的字符串了。
代码:
#include
#include
int main()
{
    char a[] = "kanlxvdzTljyTfyTeuor";
    char b[50];
    for (int i = 0; i < strlen(a); i++)
        b[i] = (a[i] - 1) ^ 0xC;
    puts(b);
}

即可得出flag:
image.png

能解的题就这么多了....感觉面对很多题都感觉很陌生,可以说完全没有接触过,包括这些逆向工具的应用....在赛后解析的时候,看到有道题是Cookie注入,完全想不到.....我之前是没接触过,而且对于php并没有怎么学习,所以对于看代码并没有那么好的效果,总之感觉又见到与学到了很多新东西....还是得多比赛和多做题呀.....

你可能感兴趣的:(海啸杯部分题WriteUp)