CTF—Wireshark数据包分析实战:从TCP三次握手到流量过滤技巧

发布时间:2026/7/27 4:02:18

CTF—Wireshark数据包分析实战:从TCP三次握手到流量过滤技巧 1. Wireshark基础与TCP三次握手解析第一次接触Wireshark时我被满屏跳动的数据包吓到了——直到理解了TCP三次握手的原理。这个像打招呼-回应-确认的过程其实是所有网络通信的起点。想象你打电话给朋友你说喂听得到吗SYN朋友回答听得到你听得到我吗SYN-ACK你最后确认我也听得到ACK在Wireshark中抓取网页访问流量时你会看到类似这样的三次握手包No. Time Source Destination Protocol Info 1 0.000000 192.168.1.100 93.184.216.34 TCP SYN 2 0.028761 93.184.216.34 192.168.1.100 TCP SYN, ACK 3 0.028903 192.168.1.100 93.184.216.34 TCP ACK关键字段解读SYN同步序列号携带初始序列号ISNACK确认号对方序列号1Window Size通告接收窗口大小实际分析时容易踩的坑过滤语法错误用tcp.flags.syn1 and tcp.flags.ack0找纯SYN包握手失败情况SYN重传可能意味着网络问题或防火墙拦截序列号混淆绝对序列号与相对序列号的显示切换右键菜单可切换2. Wireshark界面操作实战安装完Wireshark后首次启动可能会被复杂的界面劝退。别急我们先认识五个核心区域2.1 主界面功能详解显示过滤器栏输入http只显示HTTP流量封包列表关键字段排序技巧右键列标题可添加自定义列如HTTP状态码颜色规则默认粉色是TCP重传红色是错误封包详情逐层展开看协议栈Frame物理层信息到达时间、包长度Ethernet IIMAC地址IPTTL、源/目的IPTCP端口号、序列号十六进制视图手动分析原始数据字符串搜索CtrlF选择String模式偏移量计算左下角显示当前选中位置2.2 抓包配置技巧在CTF中经常需要特殊配置# 只抓特定端口的流量 tcp port 80 or tcp port 443 # 排除干扰IP比赛环境常用 not (ip.src 192.168.1.1) # 保存抓包前设置BPF过滤器 capture - Options - Input - Manage Interfaces3. 过滤语法深度解析Wireshark过滤分为捕获过滤BPF语法和显示过滤Wireshark自有语法新手最容易混淆这两者。分享几个CTF常用技巧3.1 协议级过滤# 找HTTP请求方法 http.request.method POST # 过滤特定URI路径 http.request.uri contains admin # 提取HTTP文件传输 http.content_type contains octet-stream3.2 流量特征过滤# 中国菜刀连接特征 http contains eval || http contains base64_decode # 找SQL注入尝试 http contains union select || http contains 11 # 木马通信特征 tcp.payload contains cmd.exe3.3 高级复合过滤# 同时满足多个条件 ip.src 192.168.1.100 tcp.port 3389 # 排除干扰流量 !(ip.addr 10.0.0.1) !(udp.port 53) # 正则表达式匹配 http.host matches \d\.\d\.\d\.\d4. CTF实战案例分析去年某CTF赛题提供了一个2GB的流量包要求找出被窃取的flag。我的解题步骤4.1 初步筛选# 先看HTTP对象列表 File - Export Objects - HTTP # 发现可疑的flag.zip但需要密码4.2 追踪TCP流# 过滤FTP流量 ftp || ftp-data # 在FTP登录包中找到密码明文 tcp.stream eq 12 # 查看完整会话4.3 文件重组# 从HTTP流中提取图片隐写 1. 右键图片数据包 - Follow - TCP Stream 2. 显示格式选择Raw 3. 保存为flag.jpg 4. 用steghide提取隐藏信息4.4 协议分析# 发现异常的ICMP流量 icmp !icmp.type0 # 提取ICMP payload中的异常数据 tshark -r capture.pcap -Y icmp -T fields -e data.data icmp.txt5. 高阶技巧与性能优化处理大型流量包时Wireshark可能会卡死。这些技巧能提升效率5.1 命令行预处理# 用tshark预过滤 tshark -r huge.pcap -Y http -w filtered.pcap # 只提取关键字段加速分析 tshark -r capture.pcap -T fields -e ip.src -e http.host5.2 统计分析工具# 统计协议分布 Statistics - Protocol Hierarchy # 查看会话统计 Statistics - Conversations # 绘制IO图表找流量突增点 Statistics - IO Graphs5.3 自定义解析器对于非标准协议可以编写Lua解析器-- 注册新协议 local my_proto Proto(myproto, My Custom Protocol) -- 定义字段 local fields { magic ProtoField.string(myproto.magic, Magic Header), length ProtoField.uint16(myproto.len, Packet Length) } -- 注册到协议 my_proto.fields fields -- 解析函数 function my_proto.dissector(buffer, pinfo, tree) local subtree tree:add(my_proto, buffer()) subtree:add(fields.magic, buffer(0,4)) subtree:add(fields.length, buffer(4,2)) end -- 注册到端口 DissectorTable.get(tcp.port):add(9999, my_proto)6. 常见问题排查遇到奇怪现象时先检查这些时间显示问题View - Time Display Format 选择相对时间调整时区Edit - Preferences - Appearance - Columns解码错误右键包 - Decode As 强制指定协议检查TCP重组Analyze - Enabled Protocols丢包重传过滤tcp.analysis.retransmission统计重传率Statistics - TCP Stream Graphs - Round Trip Time记得有次比赛遇到SSL加密流量其实密钥就藏在某个HTTP响应头里。用Wireshark导入密钥后所有加密流量瞬间明文显示——这种啊哈时刻正是CTF最迷人的地方。

相关新闻