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

了解:

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

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

SAM文件路径:%SystemRoot%\system32\config

SYSTEM文件路径:%SystemRoot%\system32\config

利用方式:

导出sam和system:

reg save hklm\sam sam.hiv
reg save hklm\system system.hiv

解密工具mimikatz:

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


原理:

1、读取HKLM\SYSTEM,获得syskey:

syskey的由来: 读取注册表项HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa下的键值JDSkew1GBGData中的内容,拼接成syskey

syskey的作用: Syskey中的加密的是账号数据库,也就是位于%SystemRoot%\system32\config的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解密HKLM\SAM:

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

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


总结:

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

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

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

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

猜你喜欢

转载自www.cnblogs.com/zpchcbd/p/12180129.html