利用mimikatz和procdump在Windows系统下提取密码的实战技巧
1. 认识mimikatz和procdump这对黄金搭档第一次接触mimikatz是在一次内部安全演练中当时我正为如何验证系统密码强度发愁。这款由法国安全研究员Benjamin Delpy开发的小工具用一条简单的命令就让我看到了系统里存储的明文密码那种震撼至今难忘。而procdump则是微软官方出品的调试工具本意是用来帮助开发者分析程序崩溃问题但在安全领域却成了提取内存数据的利器。mimikatz最让人惊叹的地方在于它能直接从lsass.exe进程中提取登录凭证。lsass是Windows系统的本地安全认证子系统服务负责处理用户的登录验证。当你输入密码登录系统时lsass会在内存中保留这些凭证的明文或哈希值。在Windows 7和早期版本中由于没有足够的保护措施这些密码就像放在透明的保险箱里一样容易被读取。procdump的作用则是当直接使用mimikatz遇到阻碍时先把lsass进程的内存数据完整地转储到文件中。这就好比你想研究一个珍贵的标本但不能直接触碰原件于是先做个完美的复制品来研究。特别是在Windows 10和更新的系统中微软加强了内存保护机制直接读取lsass变得越来越困难这时候procdump的价值就凸显出来了。2. 在Windows 7系统下直接提取明文密码Windows 7系统可以说是mimikatz发挥威力的最佳舞台。记得我第一次在虚拟机里测试时只用了几条命令就看到了所有登录过的用户密码那种感觉既兴奋又有点后怕。下面我详细说说具体操作步骤。首先需要以管理员身份运行cmd然后导航到mimikatz所在目录。这里有个小技巧如果遇到杀毒软件拦截可以尝试将mimikatz.exe改名为其他看似无害的名字比如notepad.exe。进入mimikatz交互界面后第一步要做的就是提升权限privilege::debug这条命令会尝试启用SeDebugPrivilege权限这是访问其他进程内存的关键。如果看到Privilege 20 OK的提示说明权限提升成功。接下来就是见证奇迹的时刻sekurlsa::logonpasswords执行后你会看到类似这样的输出Authentication Id : 0 ; 123456 (00000000:001e240) Session : Interactive from 1 User Name : Admin Domain : WORKGROUP Logon Server : WIN7PC Logon Time : 2023/5/15 10:00:00 SID : S-1-5-21-123456789-1234567890-123456789-500 msv : [00000003] Primary * Username : Admin * Domain : WORKGROUP * NTLM : 31d6cfe0d16ae931b73c59d7e0c089c0 * SHA1 : da39a3ee5e6b4b0d3255bfef95601890afd80709 tspkg : wdigest : * Username : Admin * Domain : WORKGROUP * Password : (null) kerberos : * Username : Admin * Domain : WORKGROUP * Password : mypassword123这里最值得关注的是kerberos部分在Windows 7下往往会直接显示明文密码。如果看到的是(null)可能是因为用户登录时间过久系统已经清理了这部分内存数据。这时候可以尝试让目标用户重新登录系统或者检查是否启用了WDigest认证方式。3. Windows 10系统中的密码提取挑战与解决方案到了Windows 10时代微软终于开始认真对待这个问题了。从Windows 8.1开始系统默认不再在内存中存储明文密码这让很多安全研究人员一度以为mimikatz要退出历史舞台了。但事实证明安全攻防就像猫鼠游戏总有新的方法被发掘出来。在Windows 10中直接运行sekurlsa::logonpasswords命令你很可能会发现密码字段都显示为(null)。这是因为微软做了几项重要改进默认禁用WDigest认证引入了LSASS进程保护机制要求更高的权限级别但这并不意味着密码就绝对安全了。我们还有几种应对方案第一种方法是尝试重新启用WDigest。这需要修改注册表reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f修改后需要用户重新登录才能生效。不过在高版本Windows 10中这种方法可能已经被限制。第二种方案是提取NTLM哈希值。虽然这不是明文密码但在很多情况下哈希值同样可以用来进行横向渗透。使用命令sekurlsa::msv获取到的NTLM哈希可以用于哈希传递攻击或者使用彩虹表进行破解。第三种方案就是我们接下来要重点介绍的procdumpmimikatz组合技这也是目前在较新Windows版本中最可靠的方法。4. 使用procdump获取lsass内存转储Procdump是微软Sysinternals工具集中的一个命令行工具原本设计用来帮助开发者捕获应用程序崩溃时的内存状态。但安全研究人员很快发现它可以完美地用于提取lsass进程的内存数据而且由于是微软官方工具往往能绕过一些安全防护。我第一次使用procdump时犯了个错误直接在没有管理员权限的情况下运行结果当然失败了。正确的使用方法是先以管理员身份打开命令提示符然后执行procdump.exe -accepteula -ma lsass.exe lsass.dmp这个命令有几个关键参数-accepteula自动接受最终用户许可协议-ma生成完整内存转储文件lsass.exe指定要转储的进程lsass.dmp输出的转储文件名执行过程中可能会触发Windows Defender的警报这时候可以考虑以下几种应对措施临时禁用实时保护将procdump.exe加入排除列表使用经过签名的procdump版本尝试在其他目录下运行转储文件的大小通常在几十MB到几百MB不等取决于系统运行时间和登录用户数量。我曾经在一个繁忙的服务器上获取过近1GB的lsass.dmp文件分析起来相当耗时。5. 从转储文件中提取密码信息拿到lsass.dmp文件后接下来的工作就可以在攻击者的机器上进行了这大大降低了在目标系统上长时间操作被发现的风险。这里分享一个我实际工作中的案例有一次我们需要对一台关键服务器进行安全评估但只能在凌晨2点到3点之间进行操作。使用procdump快速获取转储文件后我们就能在自己的分析环境中慢慢研究避免了在维护窗口期内匆忙操作。使用mimikatz分析转储文件的命令如下sekurlsa::minidump lsass.dmp sekurlsa::logonpasswords第一行命令告诉mimikatz使用我们转储的文件而不是实时系统第二行命令则是实际提取登录凭证。输出格式与直接运行mimikatz类似但可能会包含更多历史登录信息。在分析大型转储文件时可能会遇到内存不足的问题。我建议使用64位版本的mimikatz并在性能较好的机器上运行。如果还是遇到问题可以尝试先筛选特定用户sekurlsa::minidump lsass.dmp sekurlsa::logonpasswords /user:Admin有时候我们可能只对某些特定类型的凭证感兴趣比如域管理员账户。mimikatz提供了丰富的过滤选项sekurlsa::minidump lsass.dmp sekurlsa::logonpasswords /type:kerberos对于特别大的转储文件分析过程可能会很慢。这时候可以考虑先提取哈希值因为它们的存储格式更紧凑sekurlsa::minidump lsass.dmp sekurlsa::msv6. 应对无法获取明文密码的情况随着Windows系统的不断更新获取明文密码变得越来越困难。在最新的Windows 11 22H2版本中微软甚至默认启用了Credential Guard这给传统的密码提取方法带来了巨大挑战。但安全研究就像一场永无止境的军备竞赛总有新的技术被开发出来。当无法直接获取明文密码时NTLM哈希仍然是很有价值的目标。虽然它不是原始密码但在很多情况下可以用于哈希传递攻击。获取到哈希后可以考虑以下几种利用方式第一种方法是使用哈希直接进行身份验证。很多工具都支持这种攻击方式比如sekurlsa::pth /user:Admin /domain:Corp /ntlm:31d6cfe0d16ae931b73c59d7e0c089c0第二种方法是尝试破解哈希。虽然现代密码的NTLM哈希很难直接暴力破解但如果密码强度不够使用彩虹表仍然可能在较短时间内破解。我曾经遇到过使用公司名称年份作为密码的情况这种密码在大型彩虹表面前不堪一击。第三种方法是检查是否有服务账户使用了相同的密码。在大型企业中服务账户密码往往更新不及时可能还在使用较弱的密码。通过横向移动有时候可以从其他系统获取到更有价值的凭证。7. 防御措施与最佳实践站在防御者的角度了解这些技术同样重要。作为曾经负责企业安全加固的安全工程师我总结了以下几点有效的防御措施首先确保所有终端都启用了LSASS保护。这可以通过组策略配置计算机配置 管理模板 系统 本地安全认证子系统服务 启用配置LSASS以作为受保护进程运行其次定期监控lsass进程的访问行为。高级的EDR解决方案可以检测到异常的内存读取操作。我曾经通过监控procdump的调用参数成功阻止了几起内部渗透测试。第三实施凭证分段管理。域管理员账户不应该直接用于日常管理任务而应该使用专门的账户管理系统。微软的LAPS本地管理员密码解决方案就是个不错的选择它能确保每台机器的本地管理员密码都不同且定期更换。最后也是最重要的启用多因素认证。即使攻击者获取到了密码或哈希没有第二因素也无法完成认证。现代Windows系统已经原生支持多种MFA方案部署起来比想象中简单。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2426191.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!