Misc-encrypt
压缩包里有flag.txt
文件,我的banzip软件直接破了伪加密
flag.txt文件内容为UTAxSlUwTkRWRVo3Um1GclpWOWxibU55ZVhCMGFXOXVmUT09
用base64解密,得到Q01JU0NDVEZ7RmFrZV9lbmNyeXB0aW9ufQ==
明显结尾有=
,再一次用base64解密,得到flag:CMISCCTF{Fake_encryption}
Misc-Burps
打开压缩包,有1.txt~6.txt以及flag.txt
,且1~6文件的大小比较小,应该用crc32碰撞
照常用crc32碰撞脚本,每次运行脚本会得到4个字节的数据
python crc32.py reverse 0x6083a1c8
将得到的4块十六进制的数据,提取出来,得到7468655f
将其转换成ASCII码,得到the_
其后的5个文件都如此,提取4块十六进制数据并转ASCII码
最终得到解压密码the_password_here_cipher
打开flag.txt
,得到flag:CMISCCTF{how_to_burp_by_coding}
Misc-blind
打开压缩包有blind.png
和enc.rar
,其中enc.rar
有密码
所以考虑从图片入手,且题目也提示盲水印
拉进kali进行binwalk分析
发现有两张图片,分离,得到两张一模一样的图片
用普通的盲水印脚本解析,发现得到的图片啥也没有,宽高也没被修改
于是考虑用频域盲水印进行解析
python2 BlindWaterMarkplus.py --original 1.png --image 2.png --result res.png
得到一张有点模糊的解压密码照片,获得解压密码Q@CTF@NX
具体内容可参考ctf misc 图片题知识点volcano的博客-CSDN博客ctf misc 图片
解压压缩包,得到一张图片
照常拉进kali进行分析,发现有两个zlib,说明有两张png图片结尾,第二张照片数据损坏了或被删去文件头了
有两种方法分离
第一种:用zsteg工具分析,可以发现有异常块,为image
然后进行提取
zsteg -E "extradata:0" ctfer.png > 1.jpg
第二种:在010editor搜索49 48 44 52
十六进制字节可以找到IHDR块
然后标记为开始,拉到最后标记为结束,保存选择,改后缀为png,即可得到缺失文件头的图片
得到图片后,拉进010editor,插入12个0数值
修改文件头为89 50 4E 47 0D 0A 1A 0A 00 00 00 0D
最终得到flag的图片,flag为CMISCCTF{double_picture}
Misc-Trees
压缩包里有张图片,解压得到
题目提示是LSB,不会,放脚本
from PIL import Image
img = Image.open('enc.png')
w = img.width
h = img.height
img_obj = Image.new("RGB",(w//16,h//16))
for x in range(w//16):
for y in range(h//16):
(r,g,b)=img.getpixel((x*16,y*16))
img_obj.putpixel((x,y),(r,g,b))
img_obj.save('ok.png')
得到flag:CMISCCTF{coconut_tree}
看wp说有非预期解,用stegsolve
调颜色通道调偏移量什么的可以得到模糊的字符
Misc-music
打开压缩包里有一个_MACOSX文件夹
和music.wav
文件,被那个文件夹骗了,以为有啥提示
后来得知是在mac电脑上压缩生成的
用audacity
打开,看波形图有一高一低
估计是高的波形转成1,低的转成0
摆上大佬的脚本
import numpy as np
import struct
import wave
import re
def write_records(records, format, f):
#Write a sequence of tuples to a binary file of structures.
record_struct = Struct(format)
for r in records:
f.write(record_struct.pack(*r))
path = "./music.wav"
f = wave.open(path, "rb")
# 读取格式信息
# (nchannels, sampwidth, framerate, nframes, comptype, compname)
params = f.getparams()
nchannels, sampwidth, framerate, nframes = params[:4]
# 读取波形数据
str_data = f.readframes(nframes)
f.close()
#将波形数据转换为数组
wave_data = np.fromstring(str_data, dtype=np.short)
b = ''
# arr = [elem for elem in wave_data if elem >0]
max = 0
d = ''
for i in wave_data:
if i <0:
if max !=0:
if max<25000:
d +='0'
else:
d += '1'
pass
max = 0
if max < i:
max = i
print(d)
print("\n\n\n\n")
a = re.findall(r'.{8}',d)
hex_list=[]
for i in a:
res = hex(int(i,2))
hex_list.append(res)
print(hex_list)
with open("result.txt","wb") as f:
for x in hex_list:
s = struct.pack('B',int(x,16))
f.write(s)
看到运行解压后的前四个字符是52 61 72 21
,是rar压缩包的文件头,改后缀名为rar
打开压缩包,提示没有flag
题目提示NTFS数据流,用winrar
解压,用NtfsStreamsEditor2
扫描解压后的文件夹,扫描得到png图片
打开图片,是一个残缺的二维码,猜测是修改了宽高,脚本计算CRC32并修复
最终扫描得到flag:flag{4dcfda814ec9fd4761c1139fee3f65eb}