如何提取非明文凭据以便对数据库和服务器进行身份验证。
我们将介绍以下工具:
- WinSCP
- RoboMongo
- MobaXterm
WinSCP
WinSCP。它提供了保存用于通过 SSH 连接到远程计算机的凭据详细信息的选项。WinSCP 混淆凭据并将它们保存在 Windows 注册表中。凭据根本没有加密,任何知道用于混淆的算法的人都可以访问凭据。
保存在注册表中的凭据:
Computer\HKEY_CURRENT_USER\SOFTWARE\Martin Prikryl\WinSCP 2\Sessions
WinSCP 的源代码在 GitHub 上,它使用的混淆算法:
https://github.com/winscp/winscp/blob/master/source/core/Security.cpp
我们使用了一个实现相同算法的工具来对凭据进行去混淆处理,并且我们获得了对明文凭据的访问权限:
实施混淆算法来保护存储的凭据并不是最佳做法,因为它很容易被逆转并导致凭据被盗。让我们看看下一个分析的工具是否使用更好的方法来保护凭证存储。
RoboMongo
RoboMongo 是一个 MongoDB 客户端,用于连接到 Mongo 数据库服务器。当您保存凭据时,它们会被加密并保存在一个 JSON 文件中:
%USERPROFILE%\.3T\robo-3t\1.4.4\robo3t.json
但是,用于加密凭据的密钥也以明文形式保存在文件中:
%USERPROFILE\.3T\robo-3t\robo3t.key:
这意味着获得计算机访问权限的攻击者可以使用以明文形式保存的密钥来解密凭据。
RoboMongo 是开源的,所以我们决定查看 GitHub 上的源代码,以了解如何使用密钥来加密密码。我们发现 Qt 中的 SimplCrypt 库用于加密和解密凭据:
https://github.com/Studio3T/robomongo/blob/master/src/robomongo/utils/SimpleCrypt.cpp
每个人都可以访问这个库,所以我们可以用它来解密凭据:
RoboMongo 使用加密来安全地存储凭据,但密钥以明文形式保存,这也不是最佳实践。密钥以明文形式存储,任何有权访问工作站的用户都可以解密凭据。让我们看看另一个工具并分析凭据是如何保存的。
MobaXterm
MobaXTerm 是一个强大的工具,可以使用各种协议(如 SSH、Telnet、RDP、FTP 等)连接到远程机器。想要在 MobaXTerm 中保存凭证的用户将被要求创建一个主密码来保护他们的敏感数据。
默认选项是 MobaXTerm 将要求仅在新计算机上输入此主密码:
这意味着主密码保存在某个地方,MobaXTerm 将检索它以访问加密保存的凭据。我们使用 Sysinternals Suite 中的 Procmon 来映射 MobaXTerm 访问的所有注册表项和文件,我们发现主密码保存在以下注册表项中:
Computer\HKEY_CURRENT_USER\SOFTWARE\Mobatek\MobaXterm\M
凭据和密码分别保存在 C 和 P 注册表项中,而 M 注册表项包含主密码。
Master Password好像是用DPAPI加密的,但是我们解密失败了。
在用base64解码后,再与标准的DPAPI加密密码进行对比,我们了解到,始终相同的前20个DPAPI字节已被删除。
您可以在下面看到,第一行是我们使用 DPAPI 加密的密码,第二行是在注册表中找到的加密值。
右移后,我们可以看到字节是相同的。实际上,使用 DPAPI 加密的数据始终具有第一个恒定的 ~60 字节元数据。
我们添加了前二十个字节,我们成功解密了 DPAPI 密码,它对应于主密码的 SHA512 哈希。此哈希用于加密和解密凭据。
我们编写了一个工具,可以使用上述方法解密保存的凭据:
在这里,用于安全存储凭据的加密密钥是使用 DPAPI 保存的。这意味着只有保存凭据的用户才能访问它们。但是,具有管理员访问权限的用户或获得受害者会话访问权限的攻击者也可以解密存储在计算机上的凭据。
上面使用的所有工具点击下方
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。