通过SAM数据库获得本地用户HASH的方法和原理

了解:

sam文件:是用来存储本地用户账号密码的文件的数据库
system文件:里面有对sam文件进行加密和加密的密钥

不知道讲的对不对,自己感觉是这样理解的,有错误麻烦说下

SAM文件路径:%SystemRoot%system32config

SYSTEM文件路径:%SystemRoot%system32config

利用方式:

导出sam和system:

reg save hklmsam sam.hiv
reg save hklmsystem system.hiv

解密工具mimikatz:

lsadump::sam /sam:sam.hiv /system:system.hiv


原理:

1、读取HKLMSYSTEM,获得syskey

syskey的由来: 读取注册表项HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlLsa下的键值JDSkew1GBGData中的内容,拼接成syskey

syskey的作用: Syskey中的加密的是账号数据库,也就是位于%SystemRoot%system32config的SAM文件

代码可参考:

https://github.com/johannwmeyer/quarkspwdump/blob/a68aa6330f37eb8d00055c73e6a4e3cb52bcdd6d/src/crypt.cpp#L222

https://github.com/gentilkiwi/mimikatz/blob/master/mimikatz/modules/kuhl_m_lsadump.c#L219

完整计算代码可参考:

https://raw.githubusercontent.com/3gstudent/Writeup/master/getsyskey.cpp

(Steal from http://www.zcgonvh.com/post/ntds_dit_pwd_dumper.html)


2、使用syskey解密HKLMSAM:

读取注册表项HKEY_LOCAL_MACHINESAMSAMDomainsAccountUsers下每个用户中F项和V项的内容,使用syskey进行一系列的解密

详细解密过程可参考链接:http://www.xfocus.net/articles/200306/550.html


总结:

综上,想要通过SAM数据库获得用户hash,需要获得两个文件:HKLMSYSTEMHKLMSAM

最直接的导出方式是读取当前系统下的注册表HKLMSYSTEMHKLMSAM,但需要获得system权限

admin切换到system权限参考文章:https://www.secshi.com/goto/zkv7

参考文章:https://www.secshi.com/21709.html

原文地址:https://www.cnblogs.com/zpchcbd/p/12180129.html