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

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

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

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

工具目录

分类

查看所有分类
Loading categories
NachoVPN — 一个美味但恶意的 SSL-VPN 服务器 🌮 | Kitploit
工具/GitHubGitHub/amberwolfcyber/nachovpn
权限提升漏洞分析漏洞利用网络安全渗透测试红队Payload 开发对抗性攻击
GitHubamberwolfcyber/nachovpn

NachoVPN

一个美味但恶意的 SSL-VPN 服务器 🌮

查看仓库
2673146个月前Kitploit 审核通过

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

NachoVPN 🌮🔒

NachoVPN 是一个概念验证(Proof of Concept)项目,演示了如何通过恶意 VPN 服务器利用 SSL-VPN 客户端。

它采用基于插件的架构,使社区能够为更多 SSL-VPN 产品贡献支持。目前支持多种流行的企业 VPN 产品,例如 Cisco AnyConnect、SonicWall NetExtender、Palo Alto GlobalProtect 和 Ivanti Connect Secure。

有关更多详细信息,请参阅我们的博客文章,以及 HackFest Hollywood 2024 演讲[幻灯片|视频]。

安装

先决条件

  • Python 3.9 或更高版本
  • Docker(可选)
  • osslsigncode(仅限 Linux)
  • msitools(仅限 Linux)
  • python3-netfilter(仅限 Linux)
  • git

Linux 安装

NachoVPN 在 Ubuntu 22.04 上构建和测试。

  • 安装 python3-nftables 和 nftables

  • 可选:使用 setcap 以避免 sudo 要求:

    root@kitploit:~
    sudo setcap 'cap_net_raw,cap_net_bind_service,cap_net_admin=eip' /usr/bin/python3.10
    
  • 启用 IP 转发:

    root@kitploit:~
    sudo sysctl -w net.ipv4.ip_forward=1
    

从源码安装

NachoVPN 可以使用 pip 从 GitHub 安装。请注意,这需要安装 git。

首先,创建一个虚拟环境。

在 Linux 上,请确保虚拟环境可以访问系统 site-packages,以便 nftables 正常工作:

root@kitploit:~
python3 -m venv env --system-site-packages
source env/bin/activate

在 Windows 上,nftables(以及数据包转发)处于禁用状态,因此请使用:

root@kitploit:~
python -m venv env
.\env\Scripts\activate

然后,安装 NachoVPN:

root@kitploit:~
pip install git+https://github.com/AmberWolfCyber/NachoVPN.git

如果您更喜欢使用 Docker,则可以从 GitHub Container Registry 拉取容器:

root@kitploit:~
docker pull ghcr.io/AmberWolfCyber/nachovpn:release

构建分发版本

构建 wheel 文件

首先,克隆此仓库,并通过 pip 安装 setuptools 和 wheel。然后即可运行 setup.py 脚本:

root@kitploit:~
git clone https://github.com/AmberWolfCyber/NachoVPN
pip install -U setuptools wheel
python setup.py bdist_wheel

这将在 dist 目录中生成一个 wheel 文件,可以使用 pip 安装:

root@kitploit:~
pip install dist/nachovpn-1.0.0-py3-none-any.whl

构建用于本地开发

另外,对于本地开发,您可以使用以下命令以可编辑模式安装软件包:

root@kitploit:~
pip install -e .

构建容器镜像

您可以使用以下命令构建容器镜像:

root@kitploit:~
docker build -t nachovpn:latest .

运行

要以独立模式运行服务器,请使用:

root@kitploit:~
python -m nachovpn.server

或者,您可以使用 Docker 运行服务器:

root@kitploit:~
docker run -e SERVER_FQDN=connect.nachovpn.local -e EXTERNAL_IP=1.2.3.4 -v ./certs:/app/certs -p 80:80 -p 443:443 --rm -it nachovpn

这将使用 certbot 为 SERVER_FQDN 生成证书,并将其保存到 certs 目录(我们已将其挂载到容器中)。

另外,出于测试目的,您可以通过设置 SKIP_CERTBOT 环境变量来跳过证书生成。

这样将改为生成自签名证书。

root@kitploit:~
docker run -e SERVER_FQDN=connect.nachovpn.local -e SKIP_CERTBOT=1 -e EXTERNAL_IP=1.2.3.4 -p 443:443 --rm -it nachovpn

为方便起见,还提供了一个示例 docker-compose 文件。

调试

您可以使用 -d 或 --debug 命令行参数运行 nachovpn,以提高日志记录的详细程度,这有助于调试。

另外,如果日志过于冗长,您也可以改用 q 或 --quiet 命令行参数。

插件

NachoVPN 支持以下插件和功能:

URI 处理器

  • 可通过访问 NachoVPN 服务器上的 /pulse URL 来触发 Ivanti Connect Secure(Pulse Secure)URI 处理器。
  • 可通过访问 NachoVPN 服务器上的 /sonicwall URL 来触发 SonicWall NetExtender URI 处理器。这要求客户端机器上安装了 SonicWall Connect Agent。
  • 可通过访问 NachoVPN 服务器上的 /delinea URL 来触发 Delinea URI 处理器。

操作说明

  • 建议使用由受信任的证书颁发机构(CA)签发的 TLS 证书。Docker 容器会使用 certbot 自动完成此过程。如果您不使用受信任的证书,NachoVPN 将改为生成自签名证书,在大多数情况下,这会导致客户端弹出证书警告,或拒绝连接,除非您修改客户端设置以接受自签名证书。对于 Palo Alto GlobalProtect 插件,这还会导致 MSI 安装程序失败。
  • 为了给 SonicWall 插件模拟有效的代码签名证书,NachoVPN 将使用自签名证书对 NACAgent.exe 载荷进行签名。出于测试目的,您可以在触发漏洞利用之前从 /sonicwall/ca.crt 下载并安装此 CA 证书。对于生产环境用例,您需要从公共 CA 获取有效的代码签名证书,对您的 NACAgent.exe 载荷进行签名,并将其放置在 payloads 目录中(如果使用 docker,则可将其挂载到 /app/payloads)。
  • 为方便起见,SonicWall 插件会生成一个默认的 NACAgent.exe 载荷,并写入 payloads 目录。该载荷会在当前用户的桌面上以 SYSTEM 身份生成一个新的 cmd.exe 进程。
  • Palo Alto GlobalProtect 插件要求 downloads 目录中存在 MSI 安装程序和 msi_version.txt 文件。您可以手动添加这些文件,或运行 msi_downloader.py 脚本进行下载。
  • 要执行 Palo Alto GlobalProtect 降级攻击,请确保 downloads 文件夹中存在 和 。这些文件应包含 的、版本 6.2.6(例如 6.2.5)的 MSI 安装程序。

禁用插件

要禁用某个插件,请将其添加到 DISABLED_PLUGINS 环境变量中。例如:

root@kitploit:~
DISABLED_PLUGINS=CiscoPlugin,SonicWallPlugin

环境变量

NachoVPN 通过环境变量进行配置,这使其易于兼容容器化部署。

全局环境变量:

插件特定环境变量:

缓解措施

我们建议采取以下缓解措施:

  • 确保 SSL-VPN 客户端更新到供应商提供的最新版本。
  • 大多数 VPN 客户端支持将 VPN 配置文件锁定到特定端点,或使用始终在线(always-on)VPN 模式。应尽可能启用此功能。
  • 遗憾的是,在某些情况下,恶意本地用户可以解除此锁定,因此还建议使用基于主机的防火墙规则来限制 VPN 客户端可以通信的 IP 地址。
  • 考虑使用应用程序控制策略(如 WDAC)或 EDR 解决方案,以确保 VPN 客户端只能执行经批准的应用程序和脚本。
  • 检测 VPN 客户端执行非标准子进程的行为并发出警报。

参考资料

  • AmberWolf Blog: NachoVPN
  • HackFest Hollywood 2024: Very Pwnable Networks: Exploiting the Top Corporate VPN Clients for Remote Root and SYSTEM Shells, Rich Warren & David Cash [视频]
  • BlackHat 2008: Leveraging the Edge: Abusing SSL VPNs, Mike Zusman
  • BlackHat 2019: Infiltrating Corporate Intranet Like NSA, Orange Tsai & Meh Chang
  • NCC Group: Making New Connections: Leveraging Cisco AnyConnect Client to Drop and Run Payloads, David Cash & Julian Storr
  • The OpenConnect Project

贡献

我们欢迎贡献!请提交 Issue 或发起 Pull Request。

如果您有兴趣开发新插件,可以查看 ExamplePlugin 以开始使用。

许可证

NachoVPN 采用 MIT 许可证。有关详细信息,请参阅 LICENSE 文件。

下载工具
插件产品CVEWindows RCEmacOS RCE提权URI 处理器数据包捕获演示
CiscoCisco AnyConnectN/A✅✅❌❌✅Windows / macOS
SonicWallSonicWall NetExtenderCVE-2024-29014✅❌✅✅❌Windows
PaloAltoPalo Alto GlobalProtectCVE-2024-5921 (部分修复)✅✅✅❌✅Windows / macOS / iOS
PulseSecureIvanti Connect SecureCVE-2020-8241(已被绕过)✅✅✅✅(仅限 Windows - 在 22.8R1 中默认禁用)✅Windows
NetskopeNetskopeCVE-2025-0309✅❌✅❌❌Windows
DelineaProtocol HandlerCVE-2026-????✅✅❌✅❌Windows
GlobalProtect.msi.old
GlobalProtect64.msi.old
未修改
早于
变量描述默认值
SERVER_FQDN服务器的完全限定域名(FQDN)。connect.nachovpn.local
EXTERNAL_IP服务器的外部 IP 地址。127.0.0.1
WRITE_PCAP是否将捕获的 PCAP 文件写入磁盘。false
DISABLED_PLUGINS要禁用的插件列表,以逗号分隔。
USE_DYNAMIC_SERVER_THUMBPRINT是否动态计算服务器证书指纹(在代理后面时很有用)。false
SERVER_SHA1_THUMBPRINT允许覆盖计算得出的服务器证书 SHA1 指纹。
SERVER_MD5_THUMBPRINT允许覆盖计算得出的服务器证书 MD5 指纹。
SMB_ENABLED启用 SMB 共享,可通过隧道在 \\10.10.0.1\<SMB_SHARE_NAME> 访问。false
SMB_SHARE_NAME用于 SMB 共享的名称。SHARE
SMB_SHARE_PATH用于 SMB 共享的目录路径。smb
TUNNEL_PRIVATE设置为 true 时,启用隧道传输,但禁用 VPN 客户端的互联网转发。客户端只能访问 SMB 共享。false
TUNNEL_FULL设置为 true 时,启用完全隧道传输,允许 VPN 客户端访问互联网。同时隐含 TUNNEL_PRIVATE=true。false
变量描述默认值
VPN_NAMEVPN 配置文件的名称,会呈现给 Cisco AnyConnect 客户端。NachoVPN
PULSE_LOGON_SCRIPTPulse Secure 登录脚本的路径。C:\Windows\System32\calc.exe
PULSE_LOGON_SCRIPT_MACOS适用于 macOS 的 Pulse Secure 登录脚本路径。
PULSE_DNS_SUFFIX用于 Pulse Secure 连接的 DNS 后缀。nachovpn.local
PULSE_USERNAME在 Pulse Secure 登录对话框中预填的用户名。
PULSE_SAVE_CONNECTION是否在用户的客户端中保存 Pulse Secure 连接。false
PULSE_ANONYMOUS_AUTH是否对 Pulse Secure 连接使用匿名身份验证。如果设置为 true,将不会提示用户输入用户名或密码。false
PULSE_HOST_CHECKER_RULES_FILE一个 JSON 文件,包含用于 ICS 的基于注册表的主机检查器规则列表。示例见 src/nachovpn/plugins/pulse/test/example_rules.json。
PALO_ALTO_MSI_ADD_FILE要添加到 Palo Alto 安装程序 MSI 中的文件路径。
PALO_ALTO_MSI_COMMAND由 Palo Alto 安装程序 MSI 执行的命令。net user pwnd Passw0rd123! /add && net localgroup administrators pwnd /add
PALO_ALTO_FORCE_PATCH如果 MSI 安装程序已存在于 payloads 目录中,是否强制对其进行修补。false
PALO_ALTO_PKG_COMMAND由 Palo Alto 安装程序 PKG 在 macOS 上执行的命令。touch /tmp/pwnd
CISCO_COMMAND_WIN由 Cisco AnyConnect OnConnect.vbs 脚本在 Windows 上执行的命令。calc.exe
CISCO_COMMAND_MACOS由 Cisco AnyConnect OnConnect.sh 脚本在 macOS 上执行的命令。touch /tmp/pwnd