3.8-实战演练:利用Mimikatz从SAM和LSASS中提取密码与HASH

📅 发布时间:2026/7/8 19:01:58 👁️ 浏览次数:
3.8-实战演练:利用Mimikatz从SAM和LSASS中提取密码与HASH
1. 从“瑞士军刀”说起Mimikatz到底是什么如果你在安全圈里混过一阵子肯定听过Mimikatz的大名。这玩意儿在圈内有个外号叫“Windows凭证提取的瑞士军刀”。我第一次接触它还是在一次内部的安全演练里当时看着前辈在命令行里敲了几行“咒语”屏幕上就哗啦啦地滚出了一堆用户名和密码那种震撼感至今难忘。简单来说Mimikatz是一个运行在Windows系统上的开源安全工具它的核心能力就是深入Windows操作系统的“腹地”把那些系统认为已经妥善保护起来的密码、哈希值HASH、票据Ticket等敏感信息给“掏”出来。为什么这很厉害因为Windows系统尤其是企业里常用的域环境它的安全基石很大程度上就建立在密码和哈希的保护上。系统会把这些凭证信息加密后存放在特定的地方比如注册表里的SAM文件或者一个叫LSASS的系统关键进程的内存里。理论上只有系统本身才有权限访问。但Mimikatz的出现就像是为我们打开了一扇后门它利用了一系列Windows的合法功能和已知的安全机制特性有些是设计如此有些则是漏洞让我们能够以管理员权限直接读取这些“保险库”里的内容。你可能会问学这个干嘛我又不是黑客。这正是关键所在。我常跟刚入行的朋友说最好的防御就是真正理解攻击者会怎么打进来。作为系统管理员、安全工程师或者红队成员你只有亲手用Mimikatz走一遍攻击者的路亲眼看到自己的密码哈希是怎么被提取的你才能切身体会到“仅靠密码有多不靠谱”才会真正重视起多因素认证、特权账户管理、Credential Guard这些防护措施。这完全是一个“以攻促防”的学习过程。今天我就带你从零开始手把手进行一次实战演练目标很明确从SAM和LSASS里把密码和哈希给“拿”出来。2. 磨刀不误砍柴工实战前的环境与心态准备在真正动手之前咱们得先把“道场”布置好心态也得摆正。这是我踩过几次坑之后总结的经验能帮你省下大量折腾的时间。首先是实验环境。绝对不要在你日常办公、存有重要资料的电脑上直接操作最稳妥、最推荐的方式是使用虚拟机。你可以用VMware Workstation或者VirtualBox安装一个Windows 10或Windows Server的虚拟机。我个人的习惯是准备两个虚拟机一个作为“靶机”模拟被攻击的系统另一个作为“攻击机”用来运行Mimikatz。这样网络一桥接环境就隔离了随便折腾也不怕。这次我们的演练就假设你已经在虚拟机里准备好了一个Windows 10或Windows 11系统并且你已经拥有了这台机器的本地管理员权限。这是前提因为Mimikatz的大部分功能都需要管理员权限才能执行。其次是工具准备。Mimikatz的官方项目在GitHub上由法国大神Gentil Kiwi维护。获取方式很简单去它的GitHub发布页面下载编译好的二进制文件就行通常是一个zip包里面包含32位和64位的mimikatz.exe。这里有个小细节由于Mimikatz的“名声”它很容易被Windows Defender或其他杀毒软件当成病毒直接干掉。所以在实验前你得在虚拟机里暂时关闭实时防护或者把Mimikatz的目录添加到杀毒软件的排除列表里。这是正常操作别担心。最后也是最重要的是法律与道德心态。我必须严肃地强调我们今天学习Mimikatz唯一合法的用途是在你自己完全拥有和控制的环境中进行安全研究、渗透测试学习和系统加固验证。未经授权对任何不属于你的系统进行测试都是非法的并且可能构成犯罪。我们的目的是提升自己的安全技能和认知从而更好地保护系统绝不是为了去做坏事。请务必牢记这一点带着学习和防御的目的开始我们的演练。3. 第一战场从SAM文件中提取本地账户哈希好环境齐备心态端正咱们开始第一个实战目标搞定SAM文件。SAM全称是Security Accounts Manager你可以把它理解成Windows系统本地用户的“花名册”。所有本地用户的用户名、经过加密的密码哈希LM Hash和NTLM Hash等信息都加密存储在这里。系统运行时这个文件是被锁定的无法直接读取。我们的任务就是让Mimikatz帮我们打开它。3.1 理解SAM与权限提升的关键步骤直接去C:\Windows\System32\config\sam路径下找这个文件是没用的系统核心进程正占用着呢。Mimikatz采用了一种更“聪明”的方式它通过调用Windows自身的API从注册表中去读取SAM数据库的内容。但这需要很高的权限。所以操作流程通常分为三个核心步骤我把它比喻成“开门、上楼、拿东西”。第一步privilege::debug。这个命令是请求“调试权限”。在Windows里调试权限是一个很高的特权允许一个进程去“附着”和检查其他进程包括系统关键进程。你可以把它理解为拿到了进入系统核心区域大门的“访客卡”。没有这张卡你连门都进不去。第二步token::elevate。光有访客卡可能还不够有些房间需要更高级别的权限才能进。这个命令的作用是提升当前进程的访问令牌权限。简单说就是让我们当前运行的Mimikatz进程获得与SYSTEM账户Windows系统中权限最高的账户同等的权限。这就好比从普通访客升级成了拥有所有门禁权限的系统管理员。第三步也是我们的目标lsadump::sam。在前两步铺好路之后这个命令才能真正执行。它会定位到注册表中的SAM项解密并提取出其中所有本地账户的信息包括我们梦寐以求的密码哈希。这个过程完全在内存中完成不会在磁盘上留下痕迹如果你不把输出保存到文件的话。3.2 完整命令实战与结果解读理论说再多不如动手试一次。打开你的虚拟机以管理员身份运行命令提示符CMD或PowerShell然后切换到你的Mimikatz工具所在目录。最直接的方式是把三条命令组合起来一次性执行mimikatz.exe privilege::debug token::elevate lsadump::sam exit注意看命令的写法mimikatz.exe后面跟着用双引号包裹的三条指令最后一条exit是让Mimikatz执行完自动退出。你也可以分开执行先运行mimikatz.exe进入交互式命令行然后依次输入那三条命令。我更喜欢组合命令的方式一气呵成。执行之后如果一切顺利你会看到类似下面的输出我隐藏了具体的哈希值mimikatz # privilege::debug Privilege 20 OK mimikatz # token::elevate Token Id : 0 User name : SID name : NT AUTHORITY\SYSTEM mimikatz # lsadump::sam Domain : VIRTUAL-PC SysKey : 1234567890abcdef1234567890abcdef ... RID : 000001f4 (500) User : Administrator Hash NTLM: 31d6cfe0d16ae931b73c59d7e0c089c0 ... RID : 000001f5 (501) User : Guest Hash NTLM: 31d6cfe0d16ae931b73c59d7e0c089c0 ... RID : 000003e9 (1001) User : TestUser Hash NTLM: 098f6bcd4621d373cade4e832627b4f6我们来解读一下这个“战利品”。RID是相对标识符500代表内置管理员账户501是来宾账户。Hash NTLM后面那一长串看起来像乱码的字符串就是NTLM哈希这是Windows目前主要使用的密码哈希格式。你看到Administrator和Guest的哈希是一样的31d6...这其实是空密码的哈希是默认值。而下面我们创建的TestUser账户其哈希098f...就对应着它的密码。拿到这个哈希能干嘛这就是攻击者兴奋的原因。他们不需要知道你的明文密码“123456”他们只需要这个哈希值就可以在许多场景下进行“哈希传递”攻击直接使用这个哈希来通过身份验证访问网络共享、Web应用等。这也是为什么在安全领域常说“哈希即密码”。看到这里你应该立刻明白保护本地管理员账户、使用强密码有多么重要。4. 第二战场深入LSASS进程内存挖掘凭证宝藏如果说SAM文件是存储静态密码哈希的“档案库”那么LSASS进程就是系统运行时凭证活动的“交通枢纽”。LSASS本地安全机构子系统服务是Windows安全的核心进程。用户登录、密码更改、票据管理这些事都归它管。因此它的内存里充满了“宝贝”不仅有哈希还有可能存在的明文密码、Kerberos票据、会话密钥等。从LSASS提取信息是Mimikatz更强大、也更令人警醒的功能。4.1 为什么LSASS里会有明文密码这里有个历史背景和设计权衡的问题。为了兼容一些旧的认证协议比如WDigest用于IIS的Web认证或者为了支持一些特定的功能比如远程桌面连接的“受限管理模式”Windows在某些配置下会允许将用户的明文密码缓存在LSASS进程的内存中。虽然微软在新版本系统中如Win8.1/Server 2012R2之后默认关闭了WDigest的明文缓存但通过修改注册表键值或者在某些特定触发条件下明文密码依然有可能出现。更常见的是一些第三方单点登录SSO软件、密码管理工具为了“方便用户”也会将密码注入到LSASS内存里。这就给Mimikatz这样的工具留下了可乘之机。4.2 Mimikatz的“七星宝刀”sekurlsa模块详解Mimikatz针对LSASS的挖掘主要依靠sekurlsa模块这个名字源于法语“secrétaires”和“lsa”的组合。它提供了多把“钥匙”用来打开LSASS内存中不同的“保险箱”。下面我带你逐一试试这些威力强大的命令。首先依然是获取调试权限这是与LSASS进程交互的前提。在Mimikatz交互界面输入privilege::debug看到“Privilege 20 OK”就成功了。第一把钥匙sekurlsa::msv这是最基础、最常用的一把。它直接从LSASS的内存结构中提取MSV1_0认证包的数据主要就是NTLM哈希。sekurlsa::msv执行后你会看到每个登录会话的用户名、域名如果是域用户、以及对应的NTLM哈希可能还有更古老的LM哈希。这和从SAM里提取的哈希是等价的但这里获取的是当前所有登录会话包括交互登录、网络登录、服务登录等的哈希。第二把钥匙sekurlsa::wdigest这就是寻找明文密码的“神器”。WDigest协议在过去默认会缓存明文密码。sekurlsa::wdigest如果系统配置允许或者被攻击者修改了注册表UseLogonCredential值你可能会在输出中直接看到Password字段后面跟着明文的密码我第一次在实验环境里看到自己刚输入的密码以明文形式显示出来时后背一阵发凉。这直观地说明了禁用WDigest或启用Credential Guard的重要性。第三把钥匙sekurlsa::kerberos在域环境中这是获取高权限票据的关键。Kerberos是域认证的核心协议。sekurlsa::kerberos这个命令会提取当前会话中的Kerberos票据TGT和ST。如果当前登录的用户恰好是域管理员那么攻击者就可以窃取这些票据进行“票据传递”攻击直接 impersonate冒充域管理员去访问域内其他资源危害极大。第四、五、六把钥匙tspkglivesspssp这些命令分别针对其他一些可能缓存凭证的安全支持提供程序SSP。例如tspkg与终端服务远程桌面相关livessp与LiveSSP在线账户有关。它们的用法类似sekurlsa::tspkg sekurlsa::livessp sekurlsa::ssp在某些特定的登录场景或系统配置下这些模块也可能泄露凭证信息。把它们都跑一遍是为了进行更全面的信息收集。终极武器sekurlsa::logonpasswords这是最省事、最全面的命令。它相当于一次性调用上面提到的多个模块msv, wdigest, kerberos, tspkg等尝试提取所有它能找到的凭证信息包括哈希、明文密码、票据等。sekurlsa::logonpasswords在实际的渗透测试或安全评估中我通常会先运行这个命令它能给我一个最全的概览。输出信息会非常详细包含每个登录会话的SID、登录类型、凭证来源以及最重要的认证数据。5. 举一反三防御视角下的思考与加固建议亲手操作完以上步骤我相信你和我当初一样既惊叹于工具的威力又对Windows系统的凭证安全感到担忧。别慌攻击手段的出现恰恰指明了防御的方向。从防御者的角度我们该如何应对呢1. 严防死守本地管理员权限。Mimikatz需要管理员权限才能运行。因此首要原则就是严格限制本地管理员账户的使用。日常办公账户绝不应该拥有本地管理员权限。使用标准用户账户可以阻断绝大部分此类攻击。2. 启用Credential Guard凭据保护。这是微软针对此类内存提取攻击推出的“杀手锏”级防护。它基于虚拟化安全技术将LSASS进程隔离在一个受保护的内核区域使像Mimikatz这样的用户态工具完全无法访问其内存。对于Windows 10/11 Enterprise和Windows Server 2016及以上版本强烈建议在支持VT-x/AMD-V的硬件上启用它。3. 应用最小权限原则与LAPS。对于不得不存在的本地管理员账户比如用于加域的计算机本地管理其密码应该是随机的、每台机器不同的并且定期更改。微软的LAPS本地管理员密码解决方案就是干这个的它能自动化管理每台域内计算机的本地管理员密码防止“一密多用”导致的横向移动。4. 禁用或限制WDigest协议。既然知道WDigest会缓存明文密码就在组策略里把它关掉。路径是计算机配置 - 管理模板 - 系统 - 凭据分配 - 设置“将WDigest身份验证策略设置为已禁用”。对于新版本系统这已是默认但检查一下总没错。5. 监控与检测。安全团队需要部署EDR端点检测与响应或高级别的杀毒软件它们能够检测到类似Mimikatz进程的创建、对LSASS进程的敏感内存操作等可疑行为并及时告警。监控事件日志中4688事件进程创建和4672事件特殊权限分配关注可疑的父进程如cmd, powershell创建了mimikatz.exe。6. 定期进行漏洞扫描与渗透测试。最好的检验方法就是聘请专业的安全人员或使用授权的工具定期对你的网络进行模拟攻击。用攻击者的视角审视你的防御体系你才能发现那些真正脆弱的环节。自己用Mimikatz在测试环境里练手就是培养这种视角的第一步。技术永远在博弈中前进。Mimikatz展示了攻击者的一种强大能力但它更像是一面镜子照出了我们系统安全配置中可能存在的疏忽。通过今天的实战我希望你收获的不仅仅是几条命令更是一种“知己知彼”的安全思维。真正理解了攻击的原理你制定的防御策略才会更加有的放矢才能真正筑牢系统的安全防线。记住安全是一个过程而不是一个状态持续的学习和演练是守护这片阵地最可靠的武器。