ZZUCTF实验室联合招新赛2024--MISC
Misc(杂项)write up
1.morse
根据题目描述,可以判断这是一个摩斯电码,放到在线网站里面解码:
在线网站解码得到:EZMORSECODE
不确定是哪个工具,一个一个试一下发现在deepsound里找到加密的flag.txt
用得到的密码打开即可
2.ONIST
百度识图即可~~(没想到我随手拍的照片网上居然有这么多相似的图片)~~

最后注意一下flag格式
3.ez_upload
分析流量发现是利用http传输文件,所以导出数据即可
打开是三个secret,猜测是flag三个部分,一一解开即可:
flag1:
hnci{Vc0_Yc 经过凯撒密码变换(mode1 #2): flag{Ta0_Wa
得到第一部分
flag2:
提示语是fuck,得知是fuck类型解密
先JSFuck:
++++++++++++[>>>>++++++++++>>++++++++++>++++++++++<<<<<<<-]>>>>->>+>----<<<<<<<++++++++++[>++++++++++>++++++++++>>>++++++++++>>>++++++++++>>++++++++++<<<<<<<<<<-]>----->--->>>--->>>----->>+<<<<<<<<<<++++++++[>>>>>>>>>++F++++++++<<<<<<<<<-]>>>>>>>>>-<<<<<<<<<+++++[>>>++++++++++<<<-]>>><<<+[>>>>>>>>>>>++++++++++<<<<<<<<<<<-]>[.>]
然后BrainFuck 即可得到答案:_a1ways_Ne
flag3:压缩包加密了,给了张图片名为pig,猜测是猪圈密码,对
照解码得到密码
brainboommmm
打开压缩包得到最后一部分flag:ed_br@1n}
4.REAL_QR
打开附件得到了被打乱的9张二维码,利用PS或PPT或在线网站拼图,下面不展示,直接上成品:

扫出来发现是一堆字母,但是发现有flag{}这样的字母类型,便想到字频分析,下面给出代码(在线网站或者工具也行)
from collections import Counter
text = "IfthCAgf!{ffWa)C({!$WWhCa@nhtlanAga{hg}*d!gA}f0laIl@W{gfhf@?t{(fAn{W}g*tl$dgA{tW?I(gtaa0f@C)d0W$AgW{}h@{)WfAfh!AAg*?InIClAgAhdnfdWCWda&gnlClW?a}t{l&*f}C@{nC&Ataf}@lf@fntWfa{dtfdCfh}Algf{W0nCg!h@lCWahl?{aWh0lf!C@@fdftIhgglIan?fl!II{}lga{ngaaWa?hWa{gI!aC$aaffAngAg0a{hf0IAgh?tglWt0AtAC@n$aa{nt<{nAll{nltCl?&IA6?!g{fdh*a{@tIggWCng(Wh{WahWCIltal6h0WAdtgCnllWaA@{fCllgA0h@fldWah@fh0tfh0{l*0tWdIAh@?htgf*!WdCllAa@a{{f&IlCI@h{f@lgag{Wd"
count = Counter(text)
sorted_chars = sorted(count.items(), key=lambda x: (-x[1], x[0]))
result = ''.join(char for char, freq in sorted_chars)
print(result)
5.flappy
玩游戏就能拿flag😋
本题存在超多解法,列出几个在预期之内的:
①.硬玩(bushi)
①.发现小鸟可以飞出屏幕外面,且分数增长更快,所以利用鼠标连点器得到flag即可(大约3min)
②.这个游戏是基于python,且没有加壳,想到了pythonexe转成pyc转py(理论上可行,经过实践发现需要工作量巨大[ ],便没有继续尝试下去)
③.变速齿轮/Cheat Engine开挂飞天发现得到的分数更高(应该是游戏bug)
欢迎各位给出其他解法
6.pptppt
flag被分成了8份
第一份在第二张
移开右边的图片即可

第二,三部分在第三张

一部分是base64编码,另一部分是word文档(放大或者利用其他方式打开即可,里面的内容全部选中换个字体颜色就能发现隐藏的flag
第四部分在第一页,打开就能看到
第五,六部分在第四页,第五部分移开CTF边框即可看到,根据规则移去字符解码即可
第六部分是左下角的二维码放大即可

第七部分就是第五页给的十六进制数转字符串
第八部分是给的pub文件,0宽字符隐写得到答案
7.The_Love
打开视频,发现最后一帧有base64编码
bG92ZV9pc19wYWluZnVsX2FuZF95b3VyX2ZsYWdfaXNfZmFrZQ==
解码得到
love_is_painful_and_your_flag_is_fake
很显然是错误的flag,接下来把视频拖入010editor查看
在结尾处发现了一个zip压缩包和一个rar压缩包,分离出来
其中这个zip压缩包是伪加密的,修复后打开得到了假的flag
那么只能从rar来入手了
rar压缩包里有一张图片和一个加密的压缩包,查看图片属性发现hint

ZZUCTF????FTCUZZ是掩码爆破,且备注有维吉尼亚和密匙love
因此先来爆破压缩包

得到密码ZZUCTF2024FTCUZZ
打开压缩包得到一串密文
qzvk{hwnl_jcp_glb_amyr_tsff_ovfs_gsgs}
利用维吉尼亚和密匙解密即可
8.SKY
(上面是png格式)
给的附件发现png格式的十六进制数四位进行了倒置,故利用脚本恢复,给出下列脚本:
f1 = open('xxx.png', 'rb').read()
f2 = open('data.png', 'ab+')
for i in range(0, len(f1), 4):
f2.write(f1[i:i+4][::-1])
f2.close()
恢复图片发现隐约有flag的痕迹:

猜测是stegslove隐写,最后在不同的通道里发现答案


(也可以用强大的在线网站,个人认为比stegslove好用)
https://29a.ch/photo-forensics/#error-level-analysis
9.pyjail
观察:
- 用global()M=14去限制输入大小
- 只可以输入<128的ASCII字元,防止一些UNICODE的Bypass
- 禁止一些怪怪的东西输入
- 使用exec,可以对global动手脚
由观察1和4,一定会想要对M动手,但是M=99;f(input())之类的payload大小都>=15,不能用。
问题的难点好像在input(五个字元)太长,先去重新定义一个input函数,再去call一次f
w=input;f(w())
第二次去覆蓋掉M
M=99;f(w)
最后把flag提取出来就好
10.Magic_Forest
题目给了一个python脚本,里面有很多层约束,手撕一下,最终可以得到
y0u_f1nd_Y0uR_Tre4sur3_C0ngratu14tI0n!
也可以使用脚本:
import base64
# 初始的flag字符串,长度比补全后的flag略短
flag = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
# 将字符串转换为字符列表
flag_list = list(flag)
# 逐步构造flag
flag_list[0] = chr(89).lower() # 首字符为小写的 'y'
# 修改最后四个字符
flag_list[-4:] = "0n!"
# base64解密并替换中间部分
base64_code = list(base64.b64decode("MHVScmF0").decode('utf-8')) # 解码得到 "0uRrat"
flag_list[9:12] = base64_code[0:3] # 替换第 9 到第 11 个字符为 "0uR"
flag_list[26:29] = base64_code[3:] # 替换第 26 到第 28 个字符为 "rat"
# 替换特定部分为固定字符串并修改大小写
str1 = "T1e4su13".replace("1", "r") # 替换后的字符串为 "Tre4sur3"
flag_list[13:21] = str1 # 替换第 13 到第 20 个字符为 "Tre4sur3"
# 修改 "ng"
flag_list[24:26] = "ng"
# 进一步的修改和分割
flag_list[3] = "_"
flag_list[7] = "_"
flag_list[12] = "_"
flag_list[21] = "_"
# 一些固定字符的替换
flag_list[1] = "0"
flag_list[9] = "0"
flag_list[23] = "0"
flag_list[35] = "0"
# 修改特定字符
flag_list[8] = 'Y'
flag_list[22] = 'C'
flag_list[34] = 'I'
# 替换前两个字符和中间部分
flag_list[1:3] = "0uf1n498"[0:2] # "0u"
flag_list[4:6] = "0uf1n498"[2:5] # "f1n"
# 根据注释修改特定字符
flag_list[7] = 'd' # 必须是 'd'
# 最后四个字符
flag_list[30:35] = "u14t"
# 合成最终的flag字符串
flag = ''.join(flag_list)
# 打印结果
print(flag)
最终输出的 flag 字符串为:
y0u_f1nd_Y0uR_Tre4sur3_C0ngratu14tI0n!
flag看起来不太对,010 分析一下,可以看到 PNG 原本 00 字节地方跟刚刚得到的 key 有一部分是一样的,大概率就是异或了,cyberchef 异或解密一下图片(或者脚本)
下面给出脚本:
enc = open('flag.png', 'rb').read()
key = b'y0u_f1nd_Y0uR_Tre4sur3_C0ngratu14tI0n!'
flag = []
for i in range(len(enc)):
data = enc[i] ^ key[i % len(key)]
flag.append(data)
flag = bytes(flag)
open('flags.png', 'wb').write(flag)
没有直接的flag,crc爆破一下宽高得到flag












