[NSSCTF 2021]招新赛Misc出题人笔记

前言

这次出题个人原本出了20题但后面的题太无聊加上国庆期间自己在摸鱼所以也没有全部上线23333。本次比赛主要参考的过去的比赛内容(让我影响很深刻的简单题)。质量有愧于大家,还望海涵。其实不想写的,想直接抄套神大佬的,不过想想好像有点过分还是写一份吧(

WriteUp与出题人笔记

你喜欢Osu吗?

这道题其实是校赛的一道原题,但是爆0解了,综合来看也不难,就打算给新手玩一玩结果校内就给我爆0,根据大佬所言,大部分的游戏题都不用开游戏,是的这里给出两条线路。

线路一

当然是读配置文件啦。由于我也没有细致的去研究osu的配置所以这里直接进行猜测,如果有错还望指正。

osu1

前两个数据感觉像坐标没有确认过,暂时先放过他,第三个应该是时刻,这里看出来其实很规则,所以应该不是这里,第四列与打开游戏后结合,感觉遇到 5 就是下一个序列所以这里应该是标记每一段结束的地方,后面的应该是声音相关的,这里可以看到第二列和第五列是深度绑定的(224和160的敲击声音不一样),再加上6个一组,所以原题意就是base64(binary也可),找一张码表,或者直接把他转为0和1转换一下就可以解出flag了。}!uso_ekil_uoy_wonk_i{FTCSSN

看起来是翻转过的,那就加个Reverse NSSCTF{i_know_you_like_osu!}

这里直接参考套神的脚本(谁叫出题人脚本能力太差呢)

f = open('Richard Schrieber - Miracle of Life (WDLJT) [Easy].osu','r').readlines()
flag = ''
for i in f:
    tmp = i.split(',')
    if(tmp[4] == '0'):
        flag += '0'
    else:
        flag += '1'
print(flag)
s = ''
rflag = ''
for i in flag:
    s+=i
    if len(s)==8:
        rflag += chr(int(s,2))
        s=''
print(rflag)
print(rflag[::-1])

线路二

用osu打开谱子

osu2

这里应该会更明显的看出来6个一组,不过更重要的是上面为1下面为0,两条线路都可以用随意即可

011110 110010 000101 110101 011100 110110 111101 011111 011001 010110 101101 101001 011011 000101 111101 110101 011011 110111 100101 011111 011101 110110 111101 101110 011010 110101 111101 101001 011111 010100 011001 010100 010000 110101 010011 010011

我的银行卡密码

这道题的题目描述就是刻意的去引导爆破(因为确实是爆破),然后就是我最喜欢的古典并不是

然后这道古典也是曾经的0解题

93 53 63 71 51 63 41 51 83 63 23 23 93 62 61 94 93 71 41 92 41 71 63 41 51 31 83 43 41 21 81 22 21 74 42

The encryption scheme of next stage is decided by the last  letters.

T1:@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@   **@@@@**

T2:@@@@@@@@@@@@@@@@@@@@@@@@   **@@@@@@@**

T3:@@@@@@@@@@@@@@@@@   **@@@@@@@**

T4:@@@@@@@@   **@@@@@@ @@@**

NSSCTF{REVERSE(**@@@@@@@@**)} 

原本是想帮助你们理解的结果后来发现,删掉提示好像更容易理解

第一层观察数字两个一组第一个数字没有1第二个数字只有1-4第一时间联想的就是手机键盘解密解出来

YLOPJOGJVOCCYNMZYPGXGPOGJDVIGATBASH

然后这个时候后面的ATBASH就是提示(然后我写题解的时候才发现hint给错了,应该是6个@)

Atbash加密 简单来说A对于Z B对于Y以此类推解密后

BOLKQLTQELXXBMNABKTCTKLTQWERT

可以发现末尾是QWERT,那就是对于QWERT键盘加密(然后题目给的hint再炸一次)

QWERT加密简单来讲按照键盘排布顺序,从左上到右下重新用ABCDE排序排一次

XISRASEACSUUXZYKXREVERSE

然后后面Reverse,其实前面可以看出来是SIx Caesar了不过还是根据题目走一下(然后hint再次背锅)

XKYZXUUSCAESARSIX

不出所料(废话)是凯撒6,把偏移移正,或者滚一边凯撒都可以看出来一个单词

RESTROOM

最后按照题目原本的NSSCTF{REVERSE(@@@@@@@@)}

Reverse一次以及描述中的小写

NSSCTF{moortser}

这个古典题,来自于CCBC10,然后这次摸鱼摸了摸CCBC11,这里给大家推荐三道题欢迎大家尝试。

ChessBoard Mine Sweeper Pokemon

here is a bug

既然提到的WebShell,那随便找个杀毒软件扫一下,基本就出结果了。

here1

第31行

$pass = 'oh_you_catch_the_bug'; //angel

这个就是flag啦,buu原题,新生培训的原题(出题人懒狗石锤)

原来你也玩原神

其实这里题目描述说了伪加密,但是没看到压缩包,binwalk没东西。校内当然提到了Mp3steg,但是没提到的话也可以去梭一把试试,既然没给密码不要硬猜啊(

mp3steg语法,路径以自己的为准

.\Decode.exe -X .\wave.mp3
mp31

很多人都看到只有一个pcm,那其实还有个以命名的Wave.mp3.txt,打开一看PK开头不用想大概率都是504B0304,直接改zip,再加上题目描述给的伪加密,自己用editor做下手术或者winrar暴力修一修,打开就是flag

NSSCTF{So_you_also_play_Genshin_impact}

Mooooooooooorse

题目简单明了摩斯密码一看频谱

Morse1

推荐个在线工具

Morse2

将音频截断处理然后分离左右轨

Bill

这个题原本是一道检索题,然后因为才做过DAS所以,就顺手出一道,当然为了不白给(恶心)就稍微替换下,原本想随机替换了但是懒了,就这样把①全替换成壹,②全替换成贰,三替换成叁,4替换成肆,然后csv保存。

丢进Python,但是呢我Python能力属实太差所以,就百度了一份转换脚本然后加个头加个尾(实例用的题目是DAS的所以就看看就行)

Bill1

这个WWWW是我用于替换\n的因为当时不知道为什么写不进去(确是我太菜了)

然后加在一起得到5030782.26

NSSCTF{5030782.26}

zipbomb

其实这个题的出题过程特别折磨,因为我不知道什么时候乱装了个杀毒,然后每次误触打开时就疯狂扫吃满CPU吃满RAM。重启了5次电脑,后面把后缀一去软件一删就好了。原意是想让选手多多观察文件,别真的摁解压。

出题人思路

我其实是想让新生用Binwalk或者Ctrl+F生扒的结果好像这样做的人反而少。。。

ZipBomb1

手动dump或者删掉前面的都行,打开就是flag

NSSCTF{Z1p_B00m_d1sp0sal}

至于为什么要那么多的NSSCTF,是因为他的压缩率太低,Hex一看直接明文了,就索性让他强制压缩。

大佬思路

这里参考参考套神的脚本与博客

import os.path
import zipfile
import re

dir_path='C:\\Users\\mumuzi\\Desktop\\NSS附件包\\MISC'
files= os.listdir(dir_path)
newfiles = ["zipbomb.zip"]
print(newfiles)
setee = []
for file in newfiles: #遍历文件夹
    position = dir_path+'\\'+ file #构造绝对路径,"\\",其中一个'\'为转义符
    print (position)
    z = zipfile.ZipFile(position, 'r')
    for filename in z.namelist():
        bytes = z.read(filename)
        if b'NSSCTF{' in bytes:
            print(filename)

直接搜flag毕竟都是NSSCTF开头的。这里有个小坑点(其实原本是想将0304改一下让他融入到压缩包里面,但是又觉得太过分,以及虽然融进去了会出点问题)他这个找到的文件里面并不在zipbomb里面而是在zipbomb后面的压缩包里面。

非预期

部分手机和压缩软件会直接省略压缩率过高的然后打开就是flag光速白给。

gif好像有点大

这里想找个大视频所以在我B站翻了一下,随手找了个视频

就导成PNG然后再挑了一帧丢回去强行合成就成了这道题,本意是让新生拆出来所以也没那没多非预期

第561帧

gif1

扫描即得flag

NSSCTF{The_G1F_ls_T00_b1g}

二维码不止二维码

本意让新生多了解下码制不要说二维码只能想到QR code。

打开文件发现是Base64 img,直接找个web打开或者直接复制粘贴进浏览器应该也能直接解析。

Android在上次比赛时找到了个软件 CortexScan

Android:https://play.google.com/store/apps/details?id=com.codecorp.cortex_scan

iOS:https://apps.apple.com/us/app/cortexscan/id956868725

打开所有码制扫描,由于部分码制容量有限导致要用短链接,就随手掏了一个。

直接放出题日志吧

flag NSSCTF{87b87009-8f12-415b-95ee-375b28c522b7}

Aztec

code

Data Matrix

code

Codablock-F

code

Maxicode

code

MicroPDF417

code

PDF417

code

mircoQR

code

PDF417 (原本是DotCode后来发现扫描效果不好就换了一下) code HanXin

code

题目复制Markdown应该能看到base64

当然flag就是NSSCTF{87b87009-8f12-415b-95ee-375b28c522b7}

我flag呢?

其实这道题是有点故意恶心的意思,知道有人会用Ctrl+F就硬生生的加了个nss这个关键字进去。知道有人无脑词频统计就隔了一段加了一些fakeflag的字符,所以当时正解就是把flag内容词频统计。

因为时间问题所以就直接上套神的博客了

from collections import Counter
c = ''
f = open('我flag呢?','r').readlines()
for i in range(len(f)):
    ind = f[i].find('{')
    c += f[i][ind+1:-2]
f = Counter(c.lower())
f = f.most_common()
print(f)
for i in range(len(f)):
    print(f[i][0],end='')

词频分析,但是只词频{}里面的内容,而且全小写。 我弄的稍微麻烦一点 我是先用notepad++在每个’}’后面加上一个换行符 即用查找模式用拓展,然后}替换为}\n 然后写脚本输出yourflagis81e57d2bc90364t 因为t只输出了一次,应该要被舍弃,所以最后flag为

NSSCTF{81e57d2bc90364}

Minecraft Wiki的那些事

其实这道题原本不难的但是呢,我也不知道为什么我转发的微博被夹了以及我微博更名更过了所以就变的异常微妙。这是一个校赛的0解题,然后又双叒叕的改了改直接拿了过来。

原题解

找到Minecraft Wiki的官博,搜索上任,找到几个有转发的然后一个一个转发挨着看就可以发现由问谛居鸽谛居转发的微博里面就有flag,由于怕你们直接搜NSS所以我就索性rot13了。

新题解

但是呢由于微博被夹了,思路就变成了

先确定上任目标(有转发的微博)

然后找这个人的微博,所以这里有个问题就是,怕你们定位不到,里面的每个人丢到百度搜,前几个结果去微博搜用户ID,所以如果你百度搜到了WDLJT就可以按到问谛居鸽谛居,然后微博就可以翻到那条转发记录,这里没有附图,可以自己尝试一下23333。

所以答案rot13之后就是NSSCTF{Welcome_to_Minecraft}

Minecraft的那些事

官方手法,进入Minecraft Wiki官网

https://minecraft.fandom.com/zh/wiki/Minecraft_Wiki

直接搜索二维码,你会看到15w14a的愚人节版本快照,进去一眼就可以看到flag

Minecraft

扫描后得到

Minecraft 1.9: The Combat Update

md5后就是flag了NSSCTF{47b6c4d68f6cd92ee5f15b59c05b68f7}

后记

这次出题和各位大佬交流了很多,对于我这个小萌新还是挺有帮助的,这次比赛比较汗颜个人出题质量实属不高,甚至还有出锅的题,给各位师傅带来不好的体验实属抱歉。希望我以后能给各位带来更高质量更好玩的题目,我们明年再见

发表评论