CTFHub-Misc-LengthBinary

题目

在这里插入图片描述

解题

使用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:”
在这里插入图片描述

原文地址:https://www.cnblogs.com/Ricardo-W/p/14872209.html