2022年浙江省大学生网络与信息安全竞赛-Misc部分(决赛)
最终排名:第9还是第8来着,忘了,反正是一等
要附件私信吧,不回复 就是回家掰苞米去了
checkin_gift
两个图片文件拼接,中间冗余字符:
Gift from glzjin: FIWOIxqEZyIWJwIKF01PHxqIZyqYJIWMGHInIRSMJycAGIcKE1yFHH1IZyEAGycEFRWGE0ACDyuAFyWKE05ZAD== Have a nice time, Bye!
双等号后缀,base
家族编码特征
先ROT13
解码 key=13
SVJBVkdRMlVJWjVXS01CUkdVMldLWVJZTUVaVEFZWlpNTVpXR1lSUU1VMlRNTlpRSEJTR0NPQlhNSlJXR05MNQ==
然后Base64
解码
IRAVGQ2UIZ5WKMBRGU2WKYRYMEZTAYZZMMZWGYRQMU2TMNZQHBSGCOBXMJRWGNL5
最后Base32
解码
DASCTF{e0155eb8a30c9c3cb0e56708da87bcc5}
m4a
附件名字是m4a
,修改后缀为.m4a
,打开,是一段摩斯电码的音频
格式工厂,转换为mp3
文件,使用Audacity
打开
将摩斯密码抄下来:
-... .- ....- ...-- -... -.-. . ..-. -.-. ..--- ----- ....-
解密:
BA43BCEFC204
然后发现,文件尾部有逆序的PK头,压缩包
找到文件头和文件尾,手动分离,另存为out.txt
逆序脚本:
with open('out.txt','rb') as f:
hex_list = ("{:02X}".format(int(c)) for c in f.read()) # 定义变量接受文件内容
buflist = list(hex_list) # 用列表保存信息,方便后续操作
list1=buflist[::-1]
flag=''
for i in list1:
flag+=i
print(flag)
然后将16进制数据,恢复为压缩包
import binascii
# 打开文件并读取其中的16进制数据
with open("out.txt", "rb") as f:
hex_data = f.read()
# 将16进制数据转换为二进制数据
bin_data = binascii.unhexlify(hex_data)
# 将二进制数据写入zip文件
with open("out.zip", "wb") as f:
f.write(bin_data)
打开:
密码就是之前摩斯密码恢复出的BA43BCEFC204
拿到:
(+w)v&LdG_FhgKhdFfhgahJfKcgcKdc_eeIJ_gFN
最后Rot47 + Atbash
拿到flag
Unkn0wnData
数位板
文件尾部冗余字符:
手动提取:
V2hlcmUxc0tleT8KCu2gve25g+2gve2yte2gvO28v+2gvO2+pO2gve26qu2gvO28j+2gve2wju2gvu21i+2gve26q+2gve24huKche2gvO29je2gvO2+pO2gve2wmO2gvO28j+KEueKMqO2gve24je2gvO2+iOKcie2gvu20o+2gve27qe2gvO29jO2gve26qu2gvO29tOKEueKYuu2gve26ueKdk+2gvO29tO2gve20rO2gvO28qu2gvO29te2gve2xo+2gve20hOKYg+2gve2xjO2gve24ju2gve2xjO2gve20hO2gve2xjO2gve20qu2gvO29jO2gve2xge2gvO29je2gvO29jO2gvO28j+2gvO2+g+2gve26sO2gvO29te2gve2wje2gvO2+heKche2gvO29je2gvu22k+2gve24ju2gve24iu2gvu20o+2gvO2/ue2gvO29je2gve2yp+2gve20hO2gve20hO2gvu20o+2gve2xge2gvu21i+2gve26q+KYuu2gvO29tO2gve24ge2gve26q+2gve24h+2gve26sOKPqe2gve24je2gvO28v+2gve2yte2gvu22k+2gve24h+2gve27qeKclu2gve21ue2gve2wju2gve2zgu2gve2zgu2gve2yp+2gve23ku2gve23kg==
base64解码:这里需要使用离线工具CyberChef
Where1sKey?
🙃💵🌿🎤🚪🌏🐎🥋🚫😆✅🍍🎤🐘🌏ℹ⌨😍🎈✉🤣🛩🍌🚪🍴ℹ☺🚹❓🍴🔬🌪🍵👣🔄☃👌😎👌🔄👌🔪🍌👁🍍🍌🌏🎃🚰🍵🐍🎅✅🍍🦓😎😊🤣🏹🍍💧🔄🔄🤣👁🥋🚫☺🍴😁🚫😇🚰⏩😍🌿💵🦓😇🛩✖🕹🐎📂📂💧🗒🗒
提示Where1sKey?
,想到Emoji AES
加密,接下来去寻找key
由于png
图片文件存在LSB
隐写的可能,我们使用工具zsteg
进行分析:
zsteg -a flag.png
第一个通道中,是我们在文件尾部发现的冗余字符
b1,rgb,lsb,xy
通道中,发现504B0304
开头的文件,这其实是zip
压缩包的文件头
指令提取出压缩包的16进制数据:
zsteg -e "b1,rgb,lsb,xy" flag.png -> out.txt
手动分离有效的数据部分,另存为out.txt
:
编写脚本,恢复出压缩包原文件:
import binascii
# 打开文件并读取其中的16进制数据
with open("out.txt", "rb") as f:
hex_data = f.read()
# 将16进制数据转换为二进制数据
bin_data = binascii.unhexlify(hex_data)
# 将二进制数据写入zip文件
with open("out.zip", "wb") as f:
f.write(bin_data)
打开压缩包
打开key.txt
,源数据如下:
data:
0000100000000000
00000c0000000000
00000e0000000000
00002a0000000000
0000100000000000
0000040000000000
0000080000000000
00002a0000000000
0000160000000000
00000b0000000000
00000c0000000000
00001c0000000000
00002a0000000000
00002c0000000000
0200340000000000
00002a0000000000
0200090000000000
00000c0000000000
0000110000000000
0000070000000000
0200170000000000
00002a0000000000
0200170000000000
00000b0000000000
0000080000000000
0000120000000000
00002a0000000000
0200150000000000
0000080000000000
0000040000000000
00000f0000000000
00000a0000000000
00002a0000000000
02000e0000000000
0000080000000000
00001c0000000000
00000a0000000000
00002a0000000000
0000040000000000
0000110000000000
0000070000000000
00000f0000000000
00002a0000000000
0200100000000000
0000040000000000
00000e0000000000
0000080000000000
0000080000000000
00002a0000000000
02000c0000000000
0000170000000000
02001e0000000000
0000070000000000
00002a0000000000
显然是USB
设备中的键盘流量,通过脚本恢复信息:
拿到信息:
mimashiFindTheRealKeyandMakeIt!
这句话意思是让我们找到真的Key,显然我们拿到了假的key
我们用更新的脚本恢复数据:
mik<DEL>mae<DEL>shiy<DEL><SPACE>:<DEL>FindT<DEL>Theo<DEL>Realg<DEL>Keyg<DEL>andl<DEL>Makee<DEL>It!d<DEL>
仔细观察删掉的字符,发现正好是key开头,提取出来得到key:Toggled
然后Emoji AES
解密:
hard_Digital_plate
一打开,就是USB
流量
通过名字分析:是数位板的流量
tshark
提取流量的有效位
tshark -r hard_Digital_plate.pcapng -T fields -e usbhid.data | sed '/^\s*$/d' > out.txt
一共36602
条有效数据流量
python提取坐标
nums = []
keys = open('out.txt', 'r')
result = open('result.txt', 'w')
for line in keys:
if int(line[12:16], 16) == 0:
continue
x = int(line[4:6], 16) + int(line[6:8], 16) * 0xff
y = int(line[8:10], 16) + int(line[10:12], 16) * 0xff
result.write(str(x)+' '+str(-y)+'\n')
keys.close()
result.close()
使用gnuplot
画图
plot "result.txt"
拿到密码kfae5y4wi2shwj81y2kda6ax7x
对流量包进行分析:
binwalk hard_Digital_plate.pcapng
发现一张图片,根据图片名,猜到改文件存在oursecret
加密
命令分离文件:
foremost hard_Digital_plate.pcapng -T
同时图片备注出发现文字:
提取低压感数据,以0xf000
作为压感临界值,提取坐标
nums = []
keys = open('out.txt', 'r')
result = open('result2.txt', 'w')
for line in keys:
if int(line[12:16], 16) == 0:
continue
x = int(line[4:6], 16) + int(line[6:8], 16) * 0xff
y = int(line[8:10], 16) + int(line[10:12], 16) * 0xff
if int(line[12:16], 16) < 0xf000:
result.write(str(x)+' '+str(-y)+'\n')
keys.close()
result.close()
重新画图:
plot "result2.txt"
拿到一个新的keyw12kax
ouesecrect解密出flag.txt
打开文件:
U2FsdGVkX18jQgWzhln3pPiVK8gaBxIzhY1JWcFlKiRdBkV/jDmEBxJV9PZmwBJ7MU3IdNf4hWryZLYRLuxA4w==
然后AES
解密,这里通过base64
解密,也能看到加盐了
base64解码:
Salted__#B3Yw$x+H3IYAe*$]E9Utvf@{1MHtWxjrd6.l@c
这里的工具解密:https://github.com/guyoung/CaptfEncoder/releases