// 红队渗透 · 2025-01-31

掌握网络流量分析:wireshark、tcpdump 与 Berkeley 数据包过滤语法实战

一、OSI 七层模型:流量分析的基石

OSI(Open Systems Interconnection)七层模型 是网络通信的标准框架,理解各层功能有助于快速定位流量中的异常或漏洞。以下是各层概要及其在抓包分析中的关注点:

层级 功能 示例协议/技术 抓包分析关注点
应用层 处理用户应用程序请求 HTTP、SMTP、FTP、DNS 明文凭据、HTTP 请求、DNS 查询
表示层 数据格式转换、加密 JPEG、TLS/SSL 加密协议、编码格式
会话层 管理会话连接 NetBIOS、RPC 会话维持、异常断开
传输层 可靠/无连接数据传输 TCP、UDP 端口扫描、TCP 握手、UDP 流量
网络层 IP 寻址与路由 IPv4、IPv6、ICMP 源/目标 IP、ICMP 异常
数据链路层 MAC 地址与帧传输 以太网、ARP、PPP MAC 溯源、ARP 欺骗
物理层 比特流传输 网线、光纤、Wi-Fi 信号完整性、物理层攻击

📌 抓包时的重点分析方向:

  • 应用层:捕获 HTTP GET/POST 请求、DNS 查询或 SMTP 邮件内容,寻找明文密码或敏感数据。
  • 传输层:检查 TCP 三次握手、端口扫描行为,或 UDP 无连接数据包。
  • 网络层:分析源/目标 IP,识别攻击来源或隐藏的 C2 通信。
  • 数据链路层:通过 MAC 地址溯源设备,检测 ARP 欺骗或局域网异常。

二、Wireshark:图形化抓包分析利器

Wireshark 是一款功能强大的开源网络协议分析工具,支持实时抓包和离线分析,具备直观的图形界面,能解析数百种协议,广泛应用于渗透测试和网络诊断。

1. 快速上手 Wireshark

  • 安装:支持 Windows、macOS 和 Linux,推荐从 官方网站 下载最新版本。
  • 基本操作:
    1. 选择网络接口(如 eth0 或 Wi-Fi)开始抓包,或导入 .pcap 文件。
    2. 使用过滤器筛选感兴趣的流量。
    3. 右键数据包,选择 Follow > TCP Stream 或 Follow > UDP Stream 查看完整会话内容(如 HTTP 请求或 FTP 登录凭据)。

📌 实战案例:捕获 FTP 明文密码

  1. 打开抓包文件,输入过滤器 ftp 查看 FTP 流量。
  2. 找到 USER 和 PASS 数据包,右键选择 Follow TCP Stream。
  3. 检查会话内容,可能直接看到明文用户名和密码。

2. Wireshark 数据包结构解析

每个数据包在 Wireshark 中按 OSI 模型分层展示,方便逐层分析:

  • Frame(物理层):包含帧大小、时间戳,检查数据完整性。
  • Ethernet II(数据链路层):显示源/目标 MAC 地址,分析局域网设备。
  • IPv4/IPv6(网络层):关注源/目标 IP,追踪攻击来源或目标。
  • TCP/UDP(传输层):查看端口号、TCP 标志位(如 SYN、ACK),识别扫描或异常连接。
  • 应用层(HTTP/DNS/FTP 等):提取具体协议数据,如 HTTP 请求头、DNS 查询记录。

3. Wireshark 过滤器与 BPF 语法

Wireshark 使用 Berkeley Packet Filter (BPF) 语法进行流量过滤,BPF 是高效的底层过滤机制,适用于 Wireshark 和 tcpdump。以下是一些常用过滤器:

过滤目标 Wireshark 过滤器 BPF 语法
特定 IP 地址 ip.addr == 192.168.1.1 host 192.168.1.1
源 IP ip.src == 192.168.1.1 src host 192.168.1.1
目标 IP ip.dst == 192.168.1.1 dst host 192.168.1.1
特定端口 tcp.port == 80 port 80
HTTP GET 请求 http.request.method == "GET" tcp port 80
DNS 查询 dns.qry.name contains "example.com" udp port 53
FTP 登录 ftp.request.command == "USER" tcp port 21

📌 BPF 语法结构:

  • 基本格式:[协议] [方向] [条件]
    • 协议:ip、tcp、udp、arp 等
    • 方向:src(源)、dst(目标)
    • 条件:host(IP)、port(端口)、net(网段)
  • 逻辑运算:and、or、not
    • 示例:(tcp port 80) and (host 192.168.1.1) 过滤 192.168.1.1 的 HTTP 流量。

📌 实战技巧:

  • 查找 SQL 注入尝试:http.request.uri contains "SELECT" or http.request.uri contains "UNION"
  • 检测 DNS 隧道:dns.qry.name.len > 50(异常长的 DNS 查询可能隐藏隧道数据)
  • 捕获异常端口扫描:tcp.flags.syn == 1 and tcp.flags.ack == 0

三、tcpdump:轻量级命令行抓包神器

tcpdump 是一款轻量高效的命令行抓包工具,适合在无图形界面的服务器(如 Linux VPS)上使用,尤其在 OSCP 考试中常用于快速分析流量。tcpdump 同样支持 BPF 语法,与 Wireshark 过滤器兼容。

1. 基本使用

  • 安装:大多数 Linux 发行版预装 tcpdump,若无,可用 sudo apt install tcpdump 安装。
  • 常用命令:
    • 实时抓包:tcpdump -i eth0
    • 保存抓包文件:tcpdump -i eth0 -w capture.pcap
    • 读取抓包文件:tcpdump -r capture.pcap

2. 常用 BPF 过滤器示例

tcpdump 的强大之处在于其灵活的 BPF 过滤器,以下是一些高频用法:

过滤目标 tcpdump 命令
特定 IP tcpdump -i eth0 host 192.168.1.1
源 IP tcpdump -i eth0 src host 192.168.1.1
目标 IP tcpdump -i eth0 dst host 192.168.1.1
特定端口 tcpdump -i eth0 port 80
HTTP 流量 tcpdump -i eth0 tcp port 80
非 HTTP 流量 tcpdump -i eth0 not port 80
特定网段 tcpdump -i eth0 net 192.168.1.0/24
TCP SYN 包(端口扫描) tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0'

📌 参数说明:

  • -n:不解析域名,显示原始 IP,提升速度。
  • -X:显示数据包的 HEX 和 ASCII 内容,适合查找明文数据。
  • -c:限制抓包数量,如 -c 100 抓取 100 个包。
  • -A:以 ASCII 格式显示包内容,适合查看 HTTP 请求或 FTP 凭据。

3. 实战案例

案例 1:统计流量中的活跃源 IP

分析抓包文件中哪些 IP 最活跃,可能发现攻击来源:

tcpdump -n -r capture.pcap | awk '{print $3}' | sort | uniq -c | sort -nr | head
  • 提取源 IP,统计出现次数,降序排列,显示前 10 个。

案例 2:捕获 FTP 明文凭据

过滤 FTP 流量并查看明文内容:

tcpdump -i eth0 -n -A 'tcp port 21'
  • -A 显示 ASCII 内容,可能捕获 USER 和 PASS 命令。

案例 3:检测 ICMP 异常(Ping 洪水)

监控 ICMP 流量,识别可能的 DoS 攻击:

tcpdump -i eth0 icmp

案例 4:分析 DNS 查询

检查 DNS 请求,寻找异常域名:

tcpdump -i eth0 udp port 53

4. 高级技巧:结合其他工具

  • 提取 HTTP 请求:用 tcpdump 抓包后,结合 grep 过滤:
    tcpdump -i eth0 -A 'tcp port 80' | grep -i "GET\|POST"
  • 导出 Wireshark 分析:用 tcpdump 抓包后保存为 .pcap,导入 Wireshark 进行图形化分析:
    tcpdump -i eth0 -w capture.pcap 'tcp port 80'

四、BPF 语法进阶:打造高效过滤器

Berkeley Packet Filter (BPF) 是 Wireshark 和 tcpdump 的核心过滤机制,掌握 BPF 能显著提升抓包效率。以下是一些高级用法:

1. 复杂逻辑组合

  • 示例 1:捕获来自 192.168.1.0/24 网段的 HTTP 和 HTTPS 流量:
    tcpdump -i eth0 'net 192.168.1.0/24 and (port 80 or port 443)'
  • 示例 2:排除 SSH 流量,捕获其他 TCP 流量:
    tcpdump -i eth0 'tcp and not port 22'

2. 协议特定字段过滤

  • TCP 标志位:捕获仅包含 SYN 的包(端口扫描):
    tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack == 0'
  • ICMP 类型:捕获特定 ICMP 类型(如 ping 请求):
    tcpdump -i eth0 'icmp[icmptype] == icmp-echoreq'

3. 数据包偏移量过滤

BPF 允许直接操作数据包的原始字节,适合分析非标准协议:

  • 示例:检查 HTTP 请求中特定字符串:
    tcpdump -i eth0 'tcp port 80 and tcp[20:4] = 0x47455420'
    • GET 的 ASCII 编码为 0x47455420,位于 TCP 头后。

📌 注意:

  • BPF 过滤器对性能敏感,过于复杂的表达式可能降低抓包效率。
  • 在高流量环境中,建议先保存完整抓包文件,再用离线过滤分析。

五、总结与进阶学习建议

  • Wireshark 适合直观分析,擅长解析协议细节,推荐用于初学者和复杂场景。
  • tcpdump 轻量高效,适合服务器环境,结合 BPF 语法可快速过滤关键数据。
  • BPF 语法 是核心技能,熟练掌握能极大提升抓包效率。
  • 学习建议:
    1. 练习靶场(如 TryHackMe 或 Hack The Box)中实践抓包技能。
    2. 学习常见协议(如 HTTP、DNS、FTP)的封包结构,结合 Wireshark 分析。
    3. 熟悉 BPF 语法的更多高级用法,参考 tcpdump 手册 或 Wireshark 官方文档。

原文 https://blog.csdn.net/2301_79518550/article/details/145405480