当前位置:首页 > 渗透测试 > 正文内容

Linux下使用tcpdump捕获攻击流量实战教程

admin4小时前渗透测试2

# Linux下使用tcpdump捕获攻击流量实战教程


## 简介


`tcpdump` 是 Linux 系统中最强大的命令行网络抓包工具之一。它能够实时捕获网络接口上的数据包,并支持灵活的过滤规则,非常适合用于分析网络攻击流量、排查异常连接和进行安全取证。本文将通过具体示例,演示如何使用 `tcpdump` 捕获常见的攻击流量,包括端口扫描、DoS 攻击、SQL 注入等,并给出防御建议。


## 基础用法


### 安装 tcpdump


大多数 Linux 发行版默认已安装 `tcpdump`。若未安装,可使用以下命令:


# Debian/Ubuntu
sudo apt-get install tcpdump


# CentOS/RHEL
sudo yum install tcpdump


### 基本抓包语法


sudo tcpdump -i eth0 -nn -X


- `-i eth0`:指定监听的网络接口(可用 `ip a` 查看)。
- `-nn`:不解析域名和端口名,显示原始 IP 和端口号,提高性能。
- `-X`:以十六进制和 ASCII 形式显示数据包内容。


## 捕获攻击流量实战


### 1. 捕获端口扫描流量


攻击者常使用 `nmap` 进行端口扫描。我们可以通过捕获 SYN 包来发现扫描行为。


sudo tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) == 0'


**说明**:
- 该命令仅捕获 TCP SYN 包(不包含 ACK),即连接请求的第一个包。
- 大量来自同一 IP 的 SYN 包可能表示端口扫描。


**示例输出**:

22:15:30.123456 IP 192.168.1.100.54321 > 10.0.0.1.80: Flags [S], seq 123456789, win 65535, length 0
22:15:30.123457 IP 192.168.1.100.54321 > 10.0.0.1.443: Flags [S], seq 123456790, win 65535, length 0


**注意事项**:
- 忽略自身发起的连接,可使用 `and not src host 你的IP`。
- 对于 SYN 扫描,可进一步统计同一源 IP 的 SYN 包数量。


### 2. 捕获 DoS/DDoS 攻击流量


DoS 攻击通常表现为大量数据包涌向目标。以下命令捕获目标 IP 为 `10.0.0.1` 的所有流量:


sudo tcpdump -i eth0 -nn 'dst host 10.0.0.1'


更精确地,针对 SYN Flood 攻击,捕获大量 SYN 包:


sudo tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) == 0 and dst host 10.0.0.1'


**防御建议**:
- 使用防火墙限制单位时间内来自同一 IP 的连接数。
- 部署专业的 DDoS 防护设备或云服务。


### 3. 捕获 SQL 注入尝试


SQL 注入通常通过 HTTP 请求中的特殊字符实现。我们可以捕获 80 端口的 HTTP 请求,并过滤出包含 SQL 关键字的包:


sudo tcpdump -i eth0 -nn -A 'tcp port 80 and (dst host 你的Web服务器IP)' | grep -i -E 'select|union|drop|insert|delete|update|--'


**说明**:
- `-A`:以 ASCII 格式显示包内容,便于查看 HTTP 数据。
- `grep` 过滤常见 SQL 关键词。


**示例输出**:

GET /index.php?id=1 UNION SELECT username,password FROM users -- HTTP/1.1


**防御建议**:
- 使用参数化查询或预编译语句。
- 部署 Web 应用防火墙(WAF)。


### 4. 捕获暴力破解尝试


暴力破解通常表现为大量登录请求。以下命令捕获 SSH 端口的连接尝试:


sudo tcpdump -i eth0 -nn 'tcp port 22 and (tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) == 0)'


然后统计每个源 IP 的 SYN 包数量:


sudo tcpdump -i eth0 -nn -c 10000 'tcp port 22 and (tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) == 0)' 2>/dev/null | awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -nr | head -10


**防御建议**:
- 使用 `fail2ban` 等工具自动封禁可疑 IP。
- 修改 SSH 默认端口,使用密钥认证。


## 保存和分析捕获的数据


将捕获的数据保存到文件,便于后续分析:


sudo tcpdump -i eth0 -nn -w attack.pcap


使用 `-r` 读取文件:


tcpdump -r attack.pcap -nn


也可用 Wireshark 等工具进行图形化分析。


## 常见错误及解决


### 错误1:权限不足


tcpdump: no suitable device found


**解决**:使用 `sudo` 或以 root 用户运行。


### 错误2:过滤表达式错误


tcpdump: syntax error


**解决**:检查过滤表达式,确保括号匹配,关键字正确。例如,`host` 和 `port` 后需跟具体值。


### 错误3:捕获不到任何包


**可能原因**:
- 接口名称错误:使用 `ip a` 确认接口名。
- 过滤条件过于严格:先使用 `-i eth0` 不加过滤测试。
- 网卡未开启混杂模式:`tcpdump` 会自动设置,但某些环境需手动开启 `ip link set eth0 promisc on`。


## 总结


`tcpdump` 是网络安全的瑞士军刀。通过本文的实战示例,你可以捕获端口扫描、DoS 攻击、SQL 注入和暴力破解等常见攻击流量。记住,捕获只是第一步,结合日志分析、防火墙规则和入侵检测系统才能构建全面的防御体系。


在安全事件响应中,`tcpdump` 的快速部署和精确过滤能力无可替代。建议在日常运维中定期使用 `tcpdump` 监控网络异常,防患于未然。


相关文章

ELK(Elasticsearch + Logstash + Kibana)详细部署方法

ELK(Elasticsearch + Logstash + Kibana)详细部署方法

ELK(Elasticsearch + Logstash + Kibana)详细部署方法ELK是Elasticsearch、Logstash、Kibana三个开源工具的简称,是目前最流行的日志分析和可...

Nginx安全配置最佳实践(2026版)——抵御现代Web攻击的完整指南

Nginx安全配置最佳实践(2026版)——抵御现代Web攻击的完整指南

Nginx作为全球使用率最高的Web服务器之一,承载着大量关键业务。然而,默认配置下Nginx存在诸多安全隐患。本文从攻击者视角出发,提供一套可落地的Nginx安全加固方案。一、隐藏版本号与服务器信息...

Linux下使用tcpdump捕获攻击流量实战教程

Linux下使用tcpdump捕获攻击流量实战教程

# Linux下使用tcpdump捕获攻击流量实战教程 ## 概述 `tcpdump`是Linux环境下最经典的网络抓包工具,能够实时捕获网络接口上的数据包,并支持多种过滤表达式。本教程将带你从基础到...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。