系统散列值获取分析
LM Hash和NTLM Hash
Windows操作系统使用两种方法对用户的明文密码进行加密处理。在域环境中,用户信息存储在ntds.dit
中,加密后为散列值。
操作系统的密码一般分为两部分,一部分是LM Hash
,另一部分是NTLM Hash
。Hash的结构如下username:RID:LM-HASH:NT-HASH
。
LM Hash的全名是LM Manager Hash
,是为了提高Windows操作系统的安全性,它的本质是DES加密,但是在Windows2008之后,LM Hash就被禁用了,原因是它的密码不足14字节将用0补全,极易被破解。如果LM Hash被禁用了,那么工具抓取到的hash通常为aad3b435b51404eeaad3b435b51404ee
。
NTLM Hash为了提高安全性设计的一种新的散列加密算法,它基于MD4加密算法进行加密,现在大多数Windows操作系统都是使用NTLM Hash认证方式。
单机密码抓取与防范
要想在Windows操作系统中抓取散列值或明文密码,就必须将权限提升为system。有关散列值的相关信息全都保存在SAM文件中,lsass.exe
进程用于实现Windows的安全策略。可以使用mimikatz
将散列值和明文密码从内存中的lsass.exe进程或SAM文件中导出。
SAM文件的保存位置是C:\Windows\System32\config
,该文件是被锁定的,不允许复制。我们可以在关闭操作系统之后,使用PE盘进入文件管理环境,直接复制SAM文件,也可以使用VSS等方法进行复制。
Getpass
PwDump7
在命令行环境中运行PwDump这个工具,可以得到系统中所有账户的NTLM Hash
,我们可以使用彩虹表来破解散列值。如无法破解,我们也可以使用哈希传递进行横向移动。
QuarksPwDump
我们输入QuarksPwDump.exe --dump-hash-local
获取本地用户的对应哈希值
我们输入QuarksPwDump.exe --dump-hash-domain-cached
来获取域用户对应的hash值
导出SAM和System文件
通过reg的save选项将注册表中的SAM、System文件导出到本地磁盘
reg save hklm\sam C:\Users\pyh\Desktop\sam.hive
reg save hklm\system C:\Users\pyh\Desktop\system.hive
读取SAM和System文件获得NTLM Hash
使用mimikatz读取SAM和System文件
该工具可以从内存中提取明文密码、散列值、PIN和kerberos票据。它也可以执行哈希传递、票据传递或者构建黄金白银票据。
我们输入lsadump::sam /sam:../../sam.hive /system:../../system.hive
使用Cain读取SAM文件
安装Cain我们需要关闭防火墙,不然会运行失败。我们运行Cain,然后进入Cracker模块,选中LM&NTLM
选项,点击加号选项,选择Import Hashes From a SAM databse
选项。将我们本地的sam文件导入,点击Next选项。导入后显示系统中存在的三个账号的LM Hash
和NTLM Hash
信息。
使用mimikatz直接读取本地SAM文件,导出Hash信息
在进行渗透测试时,需要考虑mimikatz在目标机器上的免杀特性。我们首先运行mimikatz,输入privilege::debug
提升权限,然后输入token::elevate
将权限提升至system
输入lsadump::sam
,读取本地SAM文件,获得NTLM Hash
使用mimikatz在线读取SAM文件
我们输入如下命令mimikatz.exe "privilege::debug" "log" "sekurlsa::logonpasswords"
,在线读取散列值及明文密码
使用mimikatz离线读取lsass.dmp文件
我们先找到lsass.exe
进程,然后右击选择创建转储文件
,此时在本地的Temp目录下生成了一个lsass.DMP
文件
除此之外,我们还可以使用微软的Procdump
工具导出lsass.dmp
文件。因为这个软件不会被杀软报毒,因此操作起来相当方便。对应的命令为Procdump.exe -accepteula -ma lsass.exe lsass.dmp
使用powershell对散列值进行Dump操作
我们使用的是Nishang
的Get-PassHashes.ps1
脚本进行哈希值的导出。执行的前提是必须以管理员权限打开powershell命令行
powershell.exe -exec bypass "Import-Module .\Get-PassHashes.ps1;Get-PassHashes"
单机密码抓取的防范方法
微软为了防止用户密码在内存中以明文的形式被抓取,发布了补丁KB2871997
,并且关闭了Wdigest
功能。
在日常网络维护中,通过查看注册表项Wdigest可以判断Wdigest功能状态。如果值为1,用户下次登录时,攻击者就能使用工具获取明文密码。应该确保该值为0
使用reg add命令
开启Wdigest
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
关闭Wdigest
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f
使用powershell
开启WDigest
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 1
关闭WDigest
Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest -Name UseLogonCredential -Type DWORD -Value 0