windows下系统密码的多种提取方式
本文来自“白帽子社区红队知识星球”
作者:白帽子社区红队-伟大宝宝
写在前面
在后渗透阶段,想要长久控制一台或多台主机,获取主机密码是非常关键的一个环节,本次 为各位提供了目前非常有效的几种密码提取方法。
需要注意,windows server 2008 及以前的版本在系统中存储的是明文密码,而在之后的版本 默认导出的密码均为 NTLM hash,本文会提供此类问题的解决方法。
procdump 转储 lsass dmp 获取系统密码
使用 procdump 获取密码副本,采用此方式可以解决 mimikatz 无法使用的问题,导出的 dmp 文件可在其他主机进行还原密码。
在导出 dmp 文件后通过 Mimikatz 对密码进行
通过 Wdigest 获取 Windows 密码
Wdigest 是 lsass 进程的一个 SSP 程序,用于 LDAP 认证和 WEB 身份认证,他会将用户的密码 信息以加密的形式存储在内存中。而我们常用 Mimikatz 的 logonpasswords 命令也是依托于 它运行的。
在这里可以看到使用 logonpasswords 无法获取系统密码,因为这个方法是在 windows server 2012 上运行的,在该版本的windows 中默认是无法获取到明文密码的。
解决这个问题的方法很简单,通过将注册表 HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest 下的 UseLogonCredential 的值修改为 1 即可,如果没有这一项可以自己添加(下面第一张图是没有这个选项的)。
操 作 命 令 :
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /vUseLogonCredential /t REG_DWORD /d 1 /f
剩下的就是需要让用户再次输入密码登录(锁屏、故意使服务挂掉),然后再次运行
logonpasswords 命令便可看到内存中的明文密码。
这种方法同样适用于导出 dmp 文件的场景,同样都是需要在修改注册表后让用户再次登录。
使用 comsvcs.dll 导出系统密码
这种方法与方法一的原理一样,通过转储 lsass 进程的 dmp 文件来解密获取密码。只不过这 里不需要依托于 procdump,而是直接依靠系统自带的组件。首先需要获取 lsass.exe 的进程号
之后通过 comsvcs.dll 的 minidump 函数来转储文件
需要注意这里的命令需要在 powershell 中执行,因为转储文件需要有 SeDebugPrivilege 权限,
而 cmd 下默认是没有开启的。
注册表导出 SAM 文件
通过注册表导出的方式只能获取到 hash,无法获取到明文,命令比较简单可参考下图。
恶意 SSP 记录用户登录密码
这属于被动的获取密码方法,需要让用户登录。原理是通过修改 lsass 进程的 SSP 加载程序 来执行恶意操作。这里所用到恶意程序就是 mimikz 中的 mimilib.dll 在使用时候请根据操作 系统情况选择不同位数的 mimilib.dll。
将 mimilib.dll 放在 C:/windows/system32/目录下
修改注册表 HKLM\SYSTEM\CurrentControlSet\Control\lsa 中 Security Packages 项的值如下图
用户再次登以后在 C:/windows/system32/目录下会生成 kiwissp.log 文件,里面会记录用户的密码信息。