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

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

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

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

工具目录

分类

查看所有分类
Loading categories
ets5-password-recovery — ETS5 密码恢复工具是 CVE-2021-36799 的概念验证(PoC) | Kitploit
工具/GitHubGitHub/robertguetzkow/ets5-password-recovery
密码破解加密/解密工具漏洞分析漏洞利用逆向工程密码学Archived
GitHubrobertguetzkow/ets5-password-recovery

ets5-password-recovery

最受欢迎

查看全部 →

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

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

ETS5 密码恢复工具是 CVE-2021-36799 的概念验证(PoC)

查看仓库
334184年前尚未审核

ETS5 密码恢复工具

目录

  • 简介
  • 安装
  • 系统要求
  • 密码恢复如何工作?
  • 设计缺陷是如何发现的?
  • 如何降低风险?
  • 协调漏洞披露
  • 许可证
  • 更新日志

简介

您是否忘记了某个 ETS5 项目的密码,无法再访问 KNX 安装的配置?ETS5 密码恢复工具可让您检索存储在 ETS5 项目存储中的项目密码和其他机密。这是因为 ETS5 存在一个严重的设计缺陷,它使用硬编码的密码和盐值来加密项目信息(CVE-2021-36799)。

Command prompt

将加密秘密存储在源代码中是不明智的,因为它们可以通过逆向工程软件恢复,因此提供的保护比以明文形式存储信息好不了多少。这可能对 KNX 安装的安全构成威胁。如果攻击者能够访问项目存储中的文件,他们可以在不知道项目密码的情况下解密这些文件。其中包含的信息允许窃听、冒充和重新配置 KNX 设备。这尤其成问题,因为 ETS5 给用户的印象是项目密码将用于加密项目信息,而不仅仅是用于导出的项目。因此,许多用户和系统集成商很可能没有采取额外措施来确保项目存储的机密性。如果 ETS5 正确实现加密并选择了强项目密码,那么即使攻击者成功远程访问计算机,也会给他们带来更大的挑战。

以下机密信息被不当加密:

  • 项目密码
  • FDSK
  • 骨干密钥
  • 设备验证码及派生密钥
  • 设备管理密码及派生密钥
  • 用户/隧道密码及派生密钥
  • 工具密钥

ETS5 密码恢复工具是一个概念验证,通过解密并显示敏感信息来演示该问题。它是作为协调漏洞披露的一部分开发的,并在 KNX 协会的许可下发布。发布该工具用于以下目的:

  1. 它公开记录了安全问题,从而允许用户采取预防措施来降低风险。
  2. KNX 协会不打算在当前或未来版本的 ETS 中修复此问题。提高对设计缺陷的认识可能会改变他们的想法。(更新请参见协调漏洞披露部分)
  3. 公开设计缺陷有望鼓励 KNX 协会和任何阅读本文档的人采用更好的软件工程实践。
  4. 如果有人忘记了自己项目的密码,ETS5 密码恢复工具实际上可能会很有用。

警告:仅在您获得合法授权查看项目信息的情况下使用此工具。绕过安全措施(即使是无效的措施)以获取您无权查看的信息,在您所在的司法管辖区可能构成重罪。

安装

可执行文件可从发布页面下载。它无需安装,可以放在任何选择的目录中。

或者,如果您不想在系统上运行不受信任的二进制文件,您可以在 CyberChef 网站上解密项目 XML 文件中的各个属性。

系统要求

该软件依赖于 .NET Framework 4.6 或更高版本。Windows 10 默认已包含合适的 .NET 版本。早期 Windows 版本的用户需要安装最新的 .NET Framework 版本才能运行该软件。

密码恢复如何工作?

与用户界面的提示相反,ETS5 并没有使用项目密码加密您本地存储在 C:\ProgramData\KNX\ETS5\ProjectStore 中的项目文件。相反,它使用硬编码的密码 ETS5Password 和盐值 Ivan Medvedev 来混淆项目 XML 文件中的特定属性。硬编码的加密秘密违背了最佳实践,如 CWE-798 和 CWE-321 所述。

去混淆的过程如下:

  1. 混淆后的属性是 Base64 编码的,需要解码,参见 RFC 4648。
  2. 获取 Ivan Medvedev 的字节表示,作为 ASCII 或 UTF-8 编码的字符串。
  3. 使用 .NET Framework 中 PasswordDeriveBytes 实现的密钥派生函数。它基于 PBKDF1,但在密钥派生算法中添加了一个计数器。在 ETS5 中,它使用 SHA-1 作为哈希函数,100 次迭代,以 ETS5Password 作为密码,以 Ivan Medvedev 的字节表示作为盐值。密钥派生输出的前 32 个字节用作密钥,接下来的 16 个字节用作 IV。
  4. 使用 AES-256 CBC 模式,结合步骤 3 中的密钥和 IV,解密解码后的属性。
  5. 去除 PKCS#7 填充,结果即为属性的原始值。

去混淆的实现可以在 Deobfuscator.cs 文件中找到。由于密码和盐值是固定的,可以预计算密钥和 IV 以跳过密钥派生。本软件的实现中没有这样做,因为它旨在展示去混淆的所有步骤。不过,如果您需要密钥和 IV,它们如下所示。

HexBase64
Key22BD16CDBB96B0E18E977BB3FEFADD8886E7E38A2F8A6FD9D2F2F5663AC20371Ir0WzbuWsOGOl3uz/vrdiIbn44ovim/Z0vL1ZjrCA3E=
IV8E977BB3FEFADD88E6AE6CBEAE3E7CAFjpd7s/763Yjmrmy+rj58rw==

导出的项目文件(.knxproj)不受此设计缺陷影响,因此该工具无法用于恢复它们的项目密码。.knxproj 文件是一个 ZIP 文件,其中包含另一个包含敏感信息的 ZIP 文件。后者使用 Deflate 压缩、ZipCrypto / PKWARE 加密,并使用项目密码来派生加密密钥。

设计缺陷是如何发现的?

在准备我的论文《KNXnet/IP 安全协议的安全分析》期间,我调查了 ETS5 如何存储项目信息。由于 ETS 生成并存储 KNX IP Secure 设备用于相互认证、为多播通信提供机密性以及确保设备配置安全的加密密钥和密码,因此保持信息秘密至关重要。如果攻击者能够访问 ETS 存储的项目信息,将完全破坏 KNX 安装的安全性。

因此,检查了 ETS5 的项目存储,以检查数据是否以确保机密性的方式存储。C:\ProgramData\KNX\ETS5\ProjectStore 中的项目文件可以被每个用户帐户读取,无需管理员权限。发现以下指标引起了数据未正确加密的怀疑:

  1. XML 配置文件整体未加密。只有敏感属性(如设备验证码、设备管理密码、FDSK 和工具密钥)被修改为不包含其明文值。
  2. 项目密码的属性存储在一个 XML 文件中。这似乎有点奇怪,因为如果实现正确,加密会从项目密码派生密钥,因此存储它并不是严格必要的。不过,假设上,这可用于在尝试解密其他属性之前检查输入的密码是否正确。
  3. 两个具有不同项目密码但设备相同的项目,在某些设备特定属性(如 FDSK)上具有相同的值。

最后一点明确指出项目密码并未用于修改属性值的算法。下面可以看到一个例子,两个项目 P-02FB 和 P-0117 中的设备验证码设置为相同的值。尽管使用了不同的项目密码,但混淆后的输出也是相同的。由于在 ETS5 中打开项目时除了项目密码外没有提示输入任何其他内容,这意味着密钥要么必须存储在某个地方,要么是一个不需要任何密钥的简单混淆算法。看起来该解决方案并不理想,无法确保机密性,并可能使 KNX 安装面临风险。

下载工具