Windows获取明文密码

目前网络上已经有许多获取Windows系统明文密码的方式了,且都比较成熟,所以我这里写的和那些相比就属于小巫见大巫了。

这里主要将抓取明文密码,抓Hash方法也适用,但是包含但不限于下述这些方法。

直接使用mimikatz

第一种比较常见的就是直接使用mimikatz抓取目标机器上的明文密码信息,但是目标机器有杀软的时候会受到阻碍。

抓取明文命令语法

mimikatz.exe "privilege::debug" "sekurlsa::logonpasswords fill" "exit"

若是远程执行命令,无交互式的情况下,可以将该结果重定向输出到一个新文件,然后再查看文件内容也是一样的。

条件:管理员权限

注意事项:当系统为win10或2012R2以上时,系统默认禁止在内存缓存中保存明文密码,Password字段显示为null,此时可以通过修改注册表的方式抓取明文,但需要用户重新登录后才能成功抓取。

修改注册表:

reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f # 允许保存明文密码

reg add HKLMSYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 0 /f # 禁止保存明文密码,默认值

注销并重新登录:

总结:

  • 目标机器没有杀软,或者自身有免杀版本的mimikata使用,然后上传到目标机器调用相关命令。

  • 或者是使用CobaltStrike自带的mimikatz插件执行抓取明文密码的命令,但是有杀软的情况下可能会触发告警,导致目标掉线。

  • 若是目标服务器版本大于等于2012,则需要更改注册表配置。

转储lsass.exe进程

转储lsass的原因是如果mimikatz上传到目标服务器后被杀或者其他原因无法直接使用mimikatz抓取明文的情况下,需要转储lsass进程,然后再使用mimikatz提取转储的lsass进程文件中缓存的明文密码信息。

任务管理器转储

转储lsass.exe进程信息,保存为文件格式后,下载到本机,使用本机的mimikatz提取明文密码。

创建成功后,将该文件拷贝到本地提取明文密码,使用如下命令进行提取明文信息。

mimikatz.exe "privilege::debug" "sekurlsa::minidump lsass.dmp" "sekurlsa::logonPasswords full" "exit"

总结:

  • 该操作需要登录远程桌面操作,风险较大;

  • 该操作可通过命令方式实现,从而不必登录远程桌面,降低风险;

ProcDump转储

使用ProcDump + mimikatz的方式,将目标机器的lsass进程转储为文件,然后将文件拷贝到本地,使用本地mimikatz提取明文。

ProcDump是一个命令行实用工具,其主要用途是在管理员或开发人员可用于确定峰值原因的峰值期间监视 CPU 峰值和生成故障转储的应用程序。

ProcDump下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/procdump

使用ProcDump转储lsass进程,使用如下命令转储lsass进程:

Procdump64.exe -accepteula -ma lsass.exe lsass.dmp

lsass.dmp文件名可以任意,建议实际使用过程中更改该文件名以及后缀。

转储成功后,将文件拷贝到本地,然后使用mimikatz提取明文。

Comsvcs.dll转储

每个Windows系统中都可以找到该文件,可以使用Rundll32执行其导出函数MiniDump实现进程的完全转储。

该文件是一个白名单文件,主要是利用了`Comsvsc.dll`中的导出函数API`MiniDump`来实现转储`lsass.exe`的目的,注意同样是需要管理员权限:

首先是查询lsass.exe进程的PID,然后再利用Comsvsc.dll中的API来进行转储。

tasklist|findstr lsass # 查pid 然后替换<lsass.exe pid>为查询出的pid

rundll32 C:\windows\system32\comsvcs.dll MiniDump <lsass.exe pid> dump.bin full

使用该方式可能会出现的情况,因为要使用MiniDump需要用户支持SeDebugPrivilege且状态为”已启用“,但是在CMD模式下,即便是以管理员权限运行cmd,在执行上面转储lsass命令的时候,无法成功转储lsass,因为在cmd模式下,虽然支持SeDebugPrivilege权限,但是状态是”已禁用“状态,导致无法在cmd模式下正常转储lsass。

解决该问题,切换到powershell下执行该命令,powershell下,默认是支持SeDebugPrivilege且状态为”已启用“,所以在powershll下转储lsass即可成功。

转储成功后,即可将文件拷贝到本地,使用mimikatz提取明文密码。

使用该方式可能会遇到的问题:杀软会将转储的文件识别为恶意,从而删除转储文件。

DumpMinitool.exe转储

这是vs2022自带的一个工具,可以利用该程序来导出lsass进程。

本站下载:blog.axzzsec.com/upload/2022/08/DumpMinitool.exe

程序路径:"C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\IDE\Extensions\TestPlatform\Extensions\DumpMinitool.exe"

可以在本机安装vs2022后将该程序单独拷贝出来,上传到目标机器上使用,从而将lsass进程转储,用于提取明文密码信息。

使用方式:

tasklist|findstr lsass

DumpMinitool.exe --file 1.txt --processId 504 --dumpType Full

SQLDumper转储

该方式我未实际测试及使用。

这个没有官方下载地址,但是安装了SQL Server后会包含该程序,可以将该程序单独提取出来,然后上传到目标机器上使用。

tasklist /svc | findstr lsass.exe # 查看lsass.exe 的PID号

Sqldumper.exe [ProcessID] 0 0x01100 # 导出mdmp文件

也是导出成功后,将文件拷贝到本地使用mimikatz提取明文。

总结

  • ProcDump目前有些杀软会查杀,虽然这个程序是官方的,但是很多杀软厂商也将该程序加到了恶意程序名单中。

  • Comsvcs.dll如果直接使用rundll32无法成功导出的话,可以尝试在powershell下执行,但是多数安全软件对powershell监控较为严格,且多数杀软会查杀转储的“dump.bin”文件;

其他方式

收集于网络,未实际测试。

HandleKatz

项目地址:https://github.com/codewhitesec/HandleKatz

nanodump

项目地址:https://github.com/helpsystems/nanodump

powershell脚本

工具地址:https://github.com/PowerShellMafia/PowerSploit/blob/master/Exfiltration/Out-Minidump.ps1

mimikatz功能代码提取

将mimikatz或者其他方式抓取明文的代码单独提取编译为一个新程序,从而绕过杀软转储lsass进程。

总结

每种方法都各自有适用的情况,根据不同的情况来甄别使用哪种方法比较合适。

若是获取明文路走不通的情况下,还可以获取Hash值,尝试解密。

方法不止上述几种,还有其他方法等着我去挖掘。