概述:域用户 hash 缓存。MSCACHE(Domain Cached Credentials, DCC),域缓存凭据
相关文章:
MSCACHE
说明
MSCACHE,或者叫 domain cached credentials、DCC、域缓存凭据。
它是缓存在机器本地注册表中的域凭据+域授权信息,后面就直接用 “凭据” 来代表 “凭据信息” + “授权信息”。
你的办公笔记本加了公司的域,你一直是使用域账号登陆这台机器。你尝试登陆时所输入的账号密码将由域控来进行验证,验证通过后你就能登陆这台笔记本。但是你是否发现过,当你的笔记本处于断网状态的时候,你依然可以用域账号来登陆这台笔记本。也就是说,当这台机器根本连不上域控的时候,你也可以使用域账号来登陆这台机器,那这个时候,是谁来负责验证你输入的域账号密码是否正确呢? 就是 MSCACHE。
DCC1 与 DCC2
前面说了,MSCACHE 保存的是 dcc hash
,而并不是 NTLM 的 HASH。所以你导出的域缓存的 hash 是不能用于 PTH 的,只能用来破解。
这里简单记录一下两种 Hash 的生成算法:
DCC1=MD4(NTHASH+LowerUnicode(username))
DCC2=PBKDF2(HMAC−SHA1,Iterations,DCC1,LowerUnicode(username))
顺便推荐一个叫做 passlib 的 Python 库,这个库可以生成各种我们可能会在安全行业里面碰见的 Hash 或密文。如果你使用 passlib 生成 nthash,则代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| >>> from passlib.hash import msdcc2
>>> >>> hash = msdcc2.hash("password", user="Administrator") >>> hash '4c253e4b65c007a8cd683ea57bc43c76'
>>> >>> msdcc2.verify("password", hash, user="Administrator") True >>> >>> msdcc2.verify("password", hash, user="User") False >>> >>> msdcc2.verify("letmein", hash, user="Administrator") False
from passlib.hash import msdcc2 from passlib.hash import msdcc from passlib.hash import nthash
hash = msdcc2.hash("Admin@123", user="test")
print("Hash:", hash)
hash = msdcc.hash("Admin@123", user="test")
print("Hash:", hash)
hash = nthash.hash("Admin@123")
print("Hash:", hash)
|
也可以直接用它来生成 dcc hash。