通过Dpapi获取Windows身份凭证
字数 1762 2025-08-26 22:11:56
Windows DPAPI 身份凭证提取技术详解
1. DPAPI 概述
Data Protection Application Programming Interface (DPAPI) 是 Windows 2000 及以后版本提供的数据保护接口,主要用于敏感信息的加密和解密。
核心功能
- 加密函数:
CryptProtectData - 解密函数:
CryptUnprotectData
应用范围
DPAPI 保护的数据包括但不限于:
- 浏览器自动填充凭证(IE、Chrome)
- PowerShell 加密函数
- 邮件客户端密码(Outlook、Windows Mail)
- FTP 管理账户密码
- 共享资源文件夹访问密码
- 无线网络账户密钥和密码
- 远程桌面身份凭证
- EFS(加密文件系统)
- EAP/TLS 和 802.1x 身份凭证
- 凭据管理器数据
- 第三方应用数据(Skype、Windows Media、MSN Messenger 等)
2. Master Key 机制
DPAPI 使用对称加密,关键在于获取 Master Key。
Master Key Files
- 存储路径:
%APPDATA%/Microsoft/Protect/%SID% - 本质: 随机 64 位字节码经用户密码等信息加密后的密文
- 解密条件: 需要用户明文密码/NTLM/SHA1 哈希
Preferred 文件
- 记录当前使用的 Master Key 文件及其过期时间
- 未加密,可直接修改
- Master Key 默认每 90 天更新一次
CREDHIST 文件
- 路径:
%APPDATA%/Microsoft/Protect/ - 内容: 保存用户历史密码(NTLM hash/SHA1 hash)
- 用途: 确保接口在密码更改后仍能正常工作
3. 获取 Master Key 的方法
3.1 使用用户凭证
- 工具: Mimikatz
- 命令:
dpapi::masterkey指定目标用户 Master Key 文件 - 参数:
/password: 输入明文密码/hash: 输入密码哈希
3.2 获取 DPAPI_SYSTEM
- DPAPI_SYSTEM 作为 Master Key 本地备份文件的密钥
- 存储位置: LSA secret
- 获取方法:
- 内存转储
- 注册表提取
- Mimikatz 命令:
lsadump::secrets
3.3 从 LSASS 进程转储
- 提升权限:
privilege::debug - 获取 Master Key:
sekurlsa::dpapi - 查看缓存:
dpapi::cache
4. 使用 Master Key 解密
4.1 凭据文件解密
- 凭据存储路径:
%APPDATA%/Microsoft/Credentials/ - 解密步骤:
- 使用
dpapi::cred /in:<文件路径>查看结构体 - 获取
guidMasterKey值(即 Master Key 文件名) - 使用对应 Master Key 解密
- 使用
4.2 自动化工具
SharpDPAPI
- 项目地址: https://github.com/GhostPack/SharpDPAPI
- 功能:
- 批量解密 credentials/vaults/RDP 凭据文件
- 与 Mimikatz 集成,自动匹配 Master Key
- 使用命令:
sharpDPAPI -dump: 自动提取并解密sharpDPAPI -allkeys: 使用凭据存储中的所有 DPAPI 密钥
SharpChrome
- 功能: 解密 Chrome 浏览器数据
- 命令示例:
SharpChrome.exe cookies /target:"C:\Users\user\AppData\Local\Google\Chrome\User Data\Default\Cookies" /unprotect SharpChrome.exe logins /target:"C:\Users\user\AppData\Local\Google\Chrome\User Data\Default\Login Data" /unprotect
SharpWeb
- 项目地址: https://github.com/djhohnstein/SharpWeb
- 特点: 更好的输出格式,但不支持 Cookie 导出
5. 防御建议
- 限制对 LSASS 进程的访问
- 启用 Credential Guard
- 定期轮换 Master Key
- 监控对 DPAPI 相关文件的异常访问
- 限制高权限账户的使用