了解:
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
下的键值JD
、Skew1
、GBG
和Data
中的内容,拼接成syskey
syskey的作用: Syskey中的加密的是账号数据库,也就是位于%SystemRoot%system32config
的SAM文件
代码可参考:
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,需要获得两个文件:HKLMSYSTEM
和HKLMSAM
最直接的导出方式是读取当前系统下的注册表HKLMSYSTEM
和HKLMSAM
,但需要获得system权限
admin切换到system权限参考文章:https://www.secshi.com/goto/zkv7