题目
解题
使用wireshark打开
先初步进行过滤,输入icmp
进一步过滤
icmp and icmp.type==8
或者用
icmp and ip.src==30.0.30.10
icmp.type参考表
根据题目给出的提示(length-binary),观察每一条流量的length值
发现都是32或64,可以使用脚本来跑
脚本1:
import subprocess
a=subprocess.check_output("E:\Wireshark\tshark.exe -r icmp_len_binary.pcap -Y icmp.type==8 -T fields -e data.len")
b=a.split()
c1=""
c2=""
d1=""
d2=""
cc1=""
cc2=""
for i in b:
if b'64' in i:
c1=c1+"1"
c2=c2+"0"
if b'32' in i:
c1=c1+"0"
c2=c2+"1"
if len(c1) ==8:
d1=d1+chr(int(c1,2))
cc1=cc1+c1
c1=""
if len(c2) ==8:
d2=d2+chr(int(c2,2))
cc2=cc2+c2
c2=""
print(d1+d2)
print('c1:',cc1)
print('c2:',cc2)
要注意第二行tshark的安装路径,改成你们本机的tshark的路径(tshark是wireshark安装后自带的,位于同一级目录下)
显示的c1和c2是提取出来的值
脚本2(需要使用pyshark模块):
import pyshark
cap = pyshark.FileCapture('icmp_len_binary.pcap', display_filter="icmp && icmp.type==8")
cap.load_packets()
flag = ''
con1 = ""
con2 = ""
for i in range(0, len(cap)):
if cap[i].icmp.data_len == '32':
con1 += '0'
con2 += '1'
elif cap[i].icmp.data_len == '64':
con1 += '1'
con2 += '0'
print(con1)
print(con2)
cap.close()
得到两串二进制的值
合并后在线解码
得到最后的值为ctfhub{04efed1e05}
注意事项
如果使用pyshark模块报错tshark not found的话可以参考这篇文章
主要是路径的位置错了
编辑tshark.py
将系统定义的注释
自己添加本机wireshark的安装路径的上一级,别忘记了转义
program_files = “E:”