2022年浙江省大学生网络与信息安全竞赛-Misc部分(决赛)

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打开

image-20230930162806587

将摩斯密码抄下来:

-... .- ....- ...-- -... -.-. . ..-. -.-. ..--- ----- ....-

解密:

image-20230930163203965

BA43BCEFC204

然后发现,文件尾部有逆序的PK头,压缩包

image-20230930163323762

找到文件头和文件尾,手动分离,另存为out.txt

image-20230930163422112

逆序脚本:

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)

image-20230930163743251

然后将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)

打开:

image-20230930163903834

密码就是之前摩斯密码恢复出的BA43BCEFC204

拿到:

(+w)v&LdG_FhgKhdFfhgahJfKcgcKdc_eeIJ_gFN

最后Rot47 + Atbash拿到flag

image-20230930164017554

Unkn0wnData

数位板

文件尾部冗余字符:

image-20230928210221397

手动提取:

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

image-20230928211231550

Where1sKey?

🙃💵🌿🎤🚪🌏🐎🥋🚫😆✅🍍🎤🐘🌏ℹ⌨😍🎈✉🤣🛩🍌🚪🍴ℹ☺🚹❓🍴🔬🌪🍵👣🔄☃👌😎👌🔄👌🔪🍌👁🍍🍌🌏🎃🚰🍵🐍🎅✅🍍🦓😎😊🤣🏹🍍💧🔄🔄🤣👁🥋🚫☺🍴😁🚫😇🚰⏩😍🌿💵🦓😇🛩✖🕹🐎📂📂💧🗒🗒

提示Where1sKey?,想到Emoji AES加密,接下来去寻找key

由于png图片文件存在LSB隐写的可能,我们使用工具zsteg进行分析:

zsteg -a flag.png

image-20230928211454506

第一个通道中,是我们在文件尾部发现的冗余字符

b1,rgb,lsb,xy通道中,发现504B0304开头的文件,这其实是zip压缩包的文件头

指令提取出压缩包的16进制数据:

zsteg -e "b1,rgb,lsb,xy" flag.png -> out.txt

手动分离有效的数据部分,另存为out.txt

image-20230928212427645

编写脚本,恢复出压缩包原文件:

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)

打开压缩包

image-20230928212146418

打开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设备中的键盘流量,通过脚本恢复信息:

image-20230928213117639

拿到信息:

mimashiFindTheRealKeyandMakeIt!

这句话意思是让我们找到真的Key,显然我们拿到了假的key

我们用更新的脚本恢复数据:

image-20230928213310515

 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解密:
image-20230928213445338

hard_Digital_plate

一打开,就是USB流量

image-20230928213640034

通过名字分析:是数位板的流量

tshark提取流量的有效位

tshark -r hard_Digital_plate.pcapng -T fields -e usbhid.data | sed '/^\s*$/d' > out.txt

image-20230928213835962

一共36602条有效数据流量

image-20230928213952280

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()

image-20230928214849315

使用gnuplot画图

plot "result.txt"
image-20230928215122138

拿到密码kfae5y4wi2shwj81y2kda6ax7x

对流量包进行分析:

image-20230928215624764

binwalk hard_Digital_plate.pcapng

发现一张图片,根据图片名,猜到改文件存在oursecret加密

命令分离文件:

foremost hard_Digital_plate.pcapng -T

同时图片备注出发现文字:

image-20230928220212101

提取低压感数据,以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()

image-20230928220459548

重新画图:

plot "result2.txt"

image-20230928220658074

拿到一个新的keyw12kax

ouesecrect解密出flag.txt

image-20230928220038955

打开文件:

U2FsdGVkX18jQgWzhln3pPiVK8gaBxIzhY1JWcFlKiRdBkV/jDmEBxJV9PZmwBJ7MU3IdNf4hWryZLYRLuxA4w==

然后AES解密,这里通过base64解密,也能看到加盐了

base64解码:		
Salted__#B3Yw$x+H3IYAe*$]E9Utvf@{1MHtWxjrd6.l@c

这里的工具解密:https://github.com/guyoung/CaptfEncoder/releases

image-20230928225802484

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值