一、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,推荐从 官方网站 下载最新版本。
- 基本操作:
- 选择网络接口(如 eth0 或 Wi-Fi)开始抓包,或导入
.pcap文件。 - 使用过滤器筛选感兴趣的流量。
- 右键数据包,选择 Follow > TCP Stream 或 Follow > UDP Stream 查看完整会话内容(如 HTTP 请求或 FTP 登录凭据)。
- 选择网络接口(如 eth0 或 Wi-Fi)开始抓包,或导入
📌 实战案例:捕获 FTP 明文密码
- 打开抓包文件,输入过滤器
ftp查看 FTP 流量。 - 找到
USER和PASS数据包,右键选择 Follow TCP Stream。 - 检查会话内容,可能直接看到明文用户名和密码。
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 语法 是核心技能,熟练掌握能极大提升抓包效率。
- 学习建议:
- 练习靶场(如 TryHackMe 或 Hack The Box)中实践抓包技能。
- 学习常见协议(如 HTTP、DNS、FTP)的封包结构,结合 Wireshark 分析。
- 熟悉 BPF 语法的更多高级用法,参考 tcpdump 手册 或 Wireshark 官方文档。
原文 https://blog.csdn.net/2301_79518550/article/details/145405480