BUUCTF: https://buuoj.cn/challenges
相关阅读
CTF Wiki
Hello CTF
NewStar CTF
buuctf-蜘蛛侠呀
BUUCTF:蜘蛛侠呀
MISC(时间隐写)蜘蛛侠呀
题目描述:#
将你获得的明显信息md5加密之后以flag{xxx}的格式提交。 注意:得到的 flag 请包上 flag{} 提交
密文:#
下载附件,解压得到out.pcap
解题思路:#
1、打开out.pcap,发现大量ICMP报文,携带以 $$START$$ 开头的数据,似乎是Base64数据。
使用Python脚本,提取数据。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| import pyshark
import binascii
# 打开PCAP文件并设置过滤器
packets = pyshark.FileCapture('out.pcap', display_filter="icmp.type==0")
res = []
# 处理每个数据包
for each in packets:
try:
# 解码ICMP数据负载
data = binascii.unhexlify(each.icmp.data).decode()
# 去除头部的 $$START$$
if data.startswith('$$START$$'):
data = data[len('$$START$$'):]
# 去除重复项
if data not in res:
res.append(data)
except Exception as e:
print(f"Error processing packet: {e}")
# 将结果写入文件
with open('out.txt', 'w') as f:
f.write(''.join(res))
# 关闭数据包读取器
packets.close()
print('done')
|
得到的数据,删除头部和尾部的标识,复制到在线网站进行Base64解码。
Base64 在线解码、编码
解码后的数据提示是一个zip文件,另存为zip。
2、解压zip文件,得到flag.gif
观察该GIF,发现播放非常缓慢,猜测帧间隔存在隐写数据。这似乎是 时间隐写 。
使用Kali下的identify工具提取数据,命令如下:
1
| identify -format '%T' flag.gif
|
1
| 2050502050502050205020202050202020205050205020502050205050505050202050502020205020505050205020206666
|
得到的数据由 20 和 50 组成,猜想二进制。将 20 替换为 0 , 50 替换为 1 ,去掉尾部的 6666 。
1
| 011011010100010000110101010111110011000101110100
|
将二进制数据转换为ASCII,得到
2进制到ASCII字符串在线转换工具
将 mD5_1t 进行md5加密,得到flag: f0f1003afe4ae8ce4aa8e8487a8ab3b6 。
MD5加解密工具
在Kali中使用tshark也可以提取数据,只需要将十六进制数据转换为字符即可。
1
| tshark -r out.pcap -T fields -e data > data.txt
|
Python脚本如下:
1
2
3
4
5
6
| import binascii
with open('data1.txt','r') as file:
with open('data2.txt','wb') as data:
for i in file.readlines():
data.write(binascii.unhexlify(i[:-1]))
|
flag:#
1
| flag{f0f1003afe4ae8ce4aa8e8487a8ab3b6}
|
$$
\min (\text{Difficulty}{\text{User}}) = \min \left( \sum{i=1}^{n} (\text{Query}_i - \text{Answer}_i)^2 \right)
$$