1 题目分析
给了一个 pcap 包,文件名是 MISC_ping
,用 wireshark 打开。
由于文件名指出是 ping,所以直接过滤 ICMP 协议。观察一下,数据部分都是字母,但没什么规律。
注意到每条报文的长度两两重复,大概扫了一眼,基本都是 32 - 127 的可打印字符,所以应该是把所有长度取出来再分析。
2 脚本编写
利用 python 的 dpkt 库取出报文长度,相同的只取一个
import dpkt
import os
def main():
curpath = os.path.dirname(os.path.realpath(__file__))
p = "4.pcapng"
p = os.path.join(curpath, p)
f = open(p, ‘rb‘)
index = 0
res_arr = []
try:
pcap = dpkt.pcap.Reader(f)
except Exception as e:
f.seek(0, 0)
pcap = dpkt.pcapng.Reader(f)
for timestamp, buf in pcap:
index += 1
eth = dpkt.ethernet.Ethernet(buf)
if not isinstance(eth.data, dpkt.ip.IP):
print(‘Non IP Packet type not supported %s\n‘ % eth.data.__class__.__name__)
continue
ip = eth.data
if isinstance(ip.data, dpkt.icmp.ICMP) and index % 2 == 0:
res_arr.append(len(eth))
print(res_arr)
res_str = ""
for item in res_arr:
res_str += chr(item)
print(res_str)
if __name__ == "__main__":
main()
得到一个字符串:zMXHz3TIDdCYm284BhaYmdL1AxD9
,看着像 BaseX 编码,试了一遍 Base64/32/84。。。,统统不行。
尝试变化大小写,print(res_str.swapcase())
,再用 Base 解码,Base64 解码可以得到 flag。
Over。