☰
OSCP密码攻击实战:NTLM哈希获取与破解全流程解析
2026/10/9 21:07:53 网站建设 项目流程

“❿⁄₁₀ ⟦ OSCP ⬖ 研记 ⟧ 密码攻击实践 ➱ 获取并破解NTLM哈希”——这个标题刷到的时候我就知道,又是位同行在记录自己的OSCP备考路。零零碎碎的符号背后,其实藏着一个很具体的技术专题:拿到Windows主机之后,怎么把内存里的NTLM哈希变成可控的凭据,再变成真实的密码明文。这篇就来复盘我在授权靶机上完整跑过的“NTLM哈希获取与破解”流程,包括踩过的坑、工具选择的原因、还有几个值得你在考试和实战里反复使用的技巧。适合正在备考OSCP的同学,也适合刚接触Windows内网渗透、想搞清哈希攻击链条的人。

1. 先搞懂:NTLM哈希到底是个什么东西

1.1 哈希、口令与Windows认证的最小单位

做密码攻击前,第一件事不是上手敲命令,而是理解Windows到底拿什么来验证你的身份。绝大多数现代Windows系统默认使用的是NTLM认证体系,它不存明文密码,而是把用户的密码经过特定算法处理后存成一个固定长度的哈希值。最常见的NT哈希是128位,表现形式是一串32位十六进制字符,类似:

aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0

冒号前的部分是LM哈希,现代系统通常留空或者不参与运算,冒号后面才是真正有用的NT哈希。你在抓哈希的实战中看到的这串东西,本质就是用户口令的不可逆摘要,但它又是认证过程中真正被拿来比对的数据。为什么说这是关键?因为Windows的认证本质是“证明你拥有某个哈希”,而不是“证明你记得某个密码”。这直接引出一个渗透法则:拿到哈希就等于拿到了登录资格,哪怕暂时不知道明文密码。

我用一个生活化的类比给朋友解释这事:哈希就像你身份证的复印件,系统认的不是你这个人脸,而是这张复印件是否跟存档一致。攻击者不需要知道原件长什么样,拿着高仿复印件就能办事。所以密码攻击的核心战场,从“猜明文密码”平移到了“获取哈希 + 还原哈希”这两条线上。

1.2 为什么OSCP把哈希攻击当重点

OSCP考纲里的密码攻击不是孤立章节,它跟Windows提权、横向移动、域渗透都绑得很紧。我在准备过程中梳理出一个共性规律:几乎所有Windows后渗透场景,最终都要落到“拿到某个账号的哈希”这个动作上。比如:

  • 拿到低权限WebShell,需要横向提升到SYSTEM或管理员权限
  • 拿下第一台Windows机器,想继续探内网,需要目标域账号的凭据
  • 域控被突破的常见路径之一,就是从普通主机抓到域管理员的NTLM哈希或明文口令

换句话说,哈希获取与破解贯穿了“立足点—提权—横向—域控”整条攻击链。考试时,一台Windows靶机的分数常常取决于你能从它身上榨出多少哈希。单纯用弱口令爆破当然也算密码攻击,但在现代Windows默认开启账户锁定策略的环境下,在线爆破又慢又容易触发告警,远不如“抓哈希离线破解”来得稳。

1.3 理解NTLM哈希在整个攻击链里的位置

把NTLM哈希放到全链路看会更清晰,它只是密码攻击的中间态。完整的攻击路径是:

  1. 发现目标主机并拿到一个初始执行点(可能是Web漏洞、服务漏洞、弱口令等)
  2. 在目标主机内执行命令,提取本地或账户的哈希数据
  3. 对哈希进行离线分析,尝试还原明文口令
  4. 若破解成功,拿明文口令去撞更多服务器;若破解不成功,直接使用哈希完成横向移动

这个链条说明了为什么工具选择很重要。哈希提取工具要选对,哈希破解工具也要会配,缺一环都会让密码攻击卡壳。后面我会把每个环节的实操细节展开讲清楚。

2. 动手之前:信息收集决定你用什么姿势抓哈希

很多新手上来就想跑Mimikatz,结果权限不够抓了个寂寞。抓哈希的方式取决于当前环境条件,所以信息收集才是整件事真正的地基。我在靶机上复现的步骤大致是端口扫描、服务识别、补丁信息判断、现有权限确认,这些做完再决定走哪条抓哈希的路径。

2.1 端口扫描与服务识别

拿到一个IP或网段,先用Nmap扫清楚开放端口,重点看几个跟哈希攻击强相关的服务:

端口服务意义
135RPC Endpoint Mapper远程哈希提取需要RPC管道支持
139/445NetBIOS / SMB共享枚举、远程执行、哈希传递
3389RDP拿到哈希后可做远程登录
5985/5986WinRMPowerShell远程执行通道
389/636LDAP域内用户枚举
88Kerberos域认证核心端口

我常用的探测命令大概是:

nmap -sC -sV -O -p 135,139,445,3389,5985 192.168.1.10

加上-sC让默认脚本自动跑一下SMB相关的检测,能看到共享列表、系统版本、是否开放SMB签名等信息。这些信息的价值在后期很大:比如发现SMB签名未启用,意味着存在SMB中继攻击的可能性;发现NetBIOS名,有助于判断目标是否加入域。

2.2 用户枚举与当前权限确认

抓哈希之前,先确认你手里是什么权限。不同权限决定你能走哪条路:普通用户只能看自己的进程和部分共享资源,管理员或SYSTEM用户才有资格读取SAM和LSASS内存。用whoami /priv查看当前令牌权限,如果看到SeDebugPrivilege已启用,那是好消息,Mimikatz或类似工具就有机会读取LSASS进程。

同时用户枚举也能提前锁定目标。在无域环境,本地用户名通常在SAM里;在有域环境,可以用crackmapexec smb <目标IP> -u '' -p ''做匿名枚举,或用enum4linux拉取用户列表。我在一次靶机练习里发现目标存在管理员账号admin,密码策略又允许一定次数尝试,这条信息直接引导我决定先尝试弱口令登录,而不是盲目爆破。枚举出来的用户名图谱,往往是后续密码攻击的字典前缀来源,比如用户名是sunny.chen,那密码字典里就值得放Sunny@123、sunnychen2024这类变体。

2.3 判断是否在域环境

这个判断影响哈希抓取策略。如果主机在域里,优先考虑拿域用户哈希,因为域账号往往在多个机器上通用;如果只是孤立工作组的本地账号,哈希只能在这台机器上使用。一条经典命令是net config workstation,它会直接给出当前工作站和域信息;或者systeminfo里看域属性。我在实操中习惯用resolve判断DNS后缀,再用nltest /dclist:测域控连通性,这些信息组合起来,能快速画出环境的认证地图。

3. 四路抓哈希:从本机到远程的全场景打法

抓哈希不是只有一种手法,四种思路覆盖了不同权限和访问条件。多数情况下,攻击者已经不只有“读文件”的权限,甚至已经拿到了SYSTEM级别的执行权,差异只在于是本机操作还是远程操作。

3.1 本机提取:Registry SAM + SYSTEM文件

Windows把本地用户的哈希存在注册表的SAM键值里,正常情况下只有SYSTEM账号能读取。拿到SYSTEM权限后,最稳的做法是先把注册表文件导出到自己的目录,再下载到攻击机离线分析。这里有个细节值得说:直接在目标机运行reg save导出SAM、SYSTEM、SECURITY 三个文件是最常规的操作。

reg save HKLM\SAM sam.hiv reg save HKLM\SYSTEM system.hiv reg save HKLM\SECURITY security.hiv

导出之后把三个文件下载回Kali,用impacket-secretsdump解析即可。注意SYSTEM文件必须同时导出,因为SAM里的哈希是用SYSTEM文件的BootKey加密的,少了它就解不开。

3.2 本机内存提取:LSASS进程里捞会话凭据

比SAM更进一步的是直接从运行中的LSASS进程里提取明文口令和哈希。因为当一个用户登录后,LSASS会在内存里缓存认证凭据,包含NT哈希、LM哈希,某些配置下甚至会保留可逆加密的明文密码。这个场景用Mimikatz最有名,命令也简单:

mimikatz.exe privilege::debug sekurlsa::logonpasswords

但这条命令有前提:当前进程必须持有SeDebugPrivilege权限,通常是SYSTEM或管理员权限。我在VM里演示时遇到过杀毒干扰,Mimikatz的签名特征太明显,所以实际考试环境中我更推荐从文件中提取,而不是直接上传Mimikatz。就用系统的comsvcs.dll转储LSASS进程的内存,或者用PowerShell的MiniDump思路,把内存dump下载回本地再用Mimikatz离线解析。这一步能同时避免杀毒拦截和网络传输流量问题。

3.3 远程提取:impacket-secretsdump 一把梭

如果已经有了一组管理员凭据,不管它是明文密码还是哈希,都可以直接远程提取目标机器的SAM。这是OSCP考生最容易忽略的一个点:不需要先登录进去弹一个Shell,凭一条带凭据的命令就能把哈希捞出来。

impacket-secretsdump -sam sam.hiv -system system.hiv LOCAL impacket-secretsdump domain/user:password@192.168.1.10

如果已知哈希,也可以直接替换:

impacket-secretsdump -hashes :<NTLM哈希> domain/admin@192.168.1.10

原理是 impacket 通过 SMB 协议访问目标的 ADMIN$ 共享,再利用服务控制管理器在远端创建临时服务,执行注册表导出操作后读取回传数据。这套流程绕过了“必须交互式登录”的限制,非常适合横向移动时批量收集哈希。我在多台主机间做横向时,通常写一个小循环脚本,把已知凭据逐一试过去,能避开大量无意义的爆破。

3.4 网络流量捕获收哈希:Responder 的猎场

有时候攻击者没有目标的任何凭据,却在同一内网里能监听流量。此时可以借助LLMNR/NBT-NS协议回应机制,诱使客户端向我们伪造的服务器发起认证请求,从而抓取NetNTLM哈希。命令很简单:

responder -I eth0 -wdP

启动后,当同一内网里的其他主机尝试解析一个不存在的主机名时,Responder会声称自己就是目标,诱导对方使用来源账号或本机账号发起SMB认证。我们捕获到的不是明文口令,而是NetNTLMv2哈希。注意这里的NetNTLMv2与前面说的NT哈希有本质区别,前者是网络认证过程中的挑战响应,后者才是本机存取的真实口令哈希。两者的破解模式也不同,hashcat里分别对应模式5600和1000。

Responder收到的NetNTLM哈希可以尝试离线破解,如果目标账号有强密码,大概率破不干净,但没关系,这条路径的意义在于告诉你“内网里有谁在频繁申请新主机”,为后续定向爆破提供了侦查方向。

4. 实操演示:一台Windows靶机上抓全NTLM哈希

前面讲了原理和四条路径,现在拿一台模拟靶机完整走一遍。假设我已经通过Web应用漏洞拿到了目标机器的低权限Shell,目标IP是192.168.10.20,当前权限是普通用户webapp。

4.1 提权到SYSTEM

因为SAM和LSASS都需要高权限读取,低权限Shell抓不了哈希,第一步永远是提权到SYSTEM或本地管理员。常见的路径是检查目标机器是否存在已知漏洞,用工具去利用;我这次更简单,发现webapp用户属于本地管理员组,只是不是SYSTEM,所以直接用UAC绕过的思路提权,或者用服务配置漏洞。

在拿到SYSTEM权限后,whoami会显示nt authority\system,此时才是抓哈希的正确时机。我在测试中会刻意先确认权限,再执行哈希抓取命令,避免在一台低权限机器上反复折腾。

4.2 注册表导出与本地解析

在SYSTEM权限下,切换当前目录到一个可写的临时目录,比如C:\Windows\Temp,然后执行:

reg save HKLM\SAM sam.hiv reg save HKLM\SYSTEM system.hiv

把两个文件下载到Kali后,运行:

impacket-secretsdump -sam sam.hiv -system system.hiv LOCAL

输出会列出所有本地用户的RID、用户名和哈希。比如靶机上会有Administrator、Guest、webapp、backup几个账户。观察哈希形态,注意RID 500的Administrator哈希价值最高,通常拥有全机最高权限。

4.3 内存转储与离线分析

如果我还想抓当前登录用户的内存凭据,最稳妥的办法是导出LSASS进程的内存文件。先查看进程:

tasklist /fi "imagename eq lsass.exe"

然后使用rundll32 comsvcs.dll MiniDump <PID> lsass.dmp导出。这个操作在Windows 10/11上也能执行,前提是SYSTEM权限。下载回Kali后:

mimikatz.exe "sekurlsa::minidump lsass.dmp" "sekurlsa::logonpasswords" exit

可以看到是否有明文密码残留。有一次我在测试环境里真的抓到域管理员明文密码,因为目标机启用了WDigest明文缓存。这个概率在真实环境里不算高,但值得每次尝试,毕竟明文密码可以直接用于所有后继攻击。

4.4 Responder实战与结果对比

在另一台攻击机上启动Responder监听同一网段,等一段时间后查看Logs目录生成的文件,里面会有NTLMv2哈希。我用同一组账号对比了它和NT哈希的区别,发现Responder拿到的是挑战响应对,攻击价值低于本机SAM里的真实NT哈希。这提醒我:能本机离线提取就优先本机,抓包属于“被动兜底”手段。

5. 破解哈希:从密文到口令的关键步骤

抓到哈希不等于攻击完成,真正的密码攻击闭环是从哈希中还原明文口令。离线破解是所有方式里最可控、最安静的一种,不触发账户锁定,也不会产生大量认证日志。

5.1 识别哈希类型与选择hashcat模式

NTLM哈希的格式决定了hashcat的破解模式。常见映射关系如下:

哈希类型hashcat模式说明
NT哈希1000SAM和LSASS提取的常见类型
LM哈希3000普遍被禁用,少数老系统存在
NetNTLMv15500Responder捕获类型
NetNTLMv25600Responder捕获的主流类型

用hashcat -m 1000 hash.txt rockyou.txt就能开始破解。注意哈希文件格式要一行一条,不能有空格或说明文字。我见过不少初学者把impacket-secretsdump的完整输出直接丢给hashcat,结果解析失败,这是最不该浪费的时间。

5.2 字典选择与规则搭配

默认的rockyou字典能破出一批弱口令,但考试环境里的密码往往有特定规则。我更推荐用基础字典加规则组合:

hashcat -m 1000 -a 0 hash.txt rockyou.txt -r kali.rule

规则的意义是给字典词加上常见变形,比如password变成Password123、p@ssword、password2024。这里最实用的是给每个关键词追加年份、特殊符号尾缀。同时不要忘了在字典中加入目标机的用户名、公司名、域名缩写这些有针对性信息。我测算过,同样的哈希集,纯rockyou破解率和加了公司名定制字典的破解率能差30%到50%。

5.3 掩码爆破与畸形口令补充

当字典命中率下降时,掩码爆破是最后一根稻草。比如猜到目标管理员密码是Admin2024!这样:大写字母开头、四到五位数字结尾、再加一个特殊符号。可以用:

hashcat -m 1000 -a 3 hash.txt ?u?a?a?a?a?d?d?d?d?s

不过掩码爆破效率低,不建议一上来就用,而是先把字典和规则跑完,再看剩余哈希值数量决定要不要开大掩码。从成本收益看,绝大多数CTF和OSCP靶机密码都能通过字典或小范围掩码命中,硬跑八位以上的纯大掩码属于浪费电费。

5.4 破解不出来的退路:哈希传递

即使破解所有字典都失败,也别急着放弃。我是说,你要记得哈希本身已经具备“登录凭证”的属性了。用哈希直接做远程认证喊作哈希传递,这是密码攻击里最核心的备用方案。

crackmapexec smb 192.168.1.0/24 -u admin -H aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0

这条命令会把哈希作为凭据,尝试登录网段内所有主机的SMB,能直接跳过多台机器的认证。我实际用过一次,一台机器的缓存抓到的哈希,直接把一个三段式的横向渗透结算完,全程没跑出一个明文密码。由此可见,哈希破解成功与否只管明文还原,不影响横向利用,这一步往往比暴力破明文更高效。

6. 高频坑点与排障手记

6.1 抓取阶段常见失败原因

抓哈希失败时,我第一个检查的是权限。低权限下执行reg save或MiniDump 会直接报错,这不是命令错误,而是令牌能力不足。其次检查杀毒软件状态,系统会干扰LSASS内存的读取。如果你的Shell是内存WebShell,有些虚拟化环境下部分API会被屏蔽,右转用文件落地方式执行更稳妥。

我在实验中还遇到过SMB 445端口不通导致远程提取失败的情况,这时要确认目标防火墙是否放行139或135端口,或者改用WinRM通道的远程执行方式。记住一个原则:本地提权后再本地提取永远比远程提取失败概率低,所以能落地就先落地。

6.2 哈希破解不中的常见原因

hashcat输出很慢或者长期未命中时,不要盲目加长跑,先确认哈希格式对不对。我用hashid工具快速判断类型,避免拿NetNTLMv2按NT模式强行破解。其次确认字典路径里没有乱码,有些从Windows下载的字典文件带BOM头,会让第一行哈希解析失败。

有些NTLM哈希是空密码对应值,这个值固定是31d6cfe0d16ae931b73c59d7e0c089c0,一眼就能识别,不用跑。还有Guest这类禁用账户,哈希也经常是空值。把这些干扰项从哈希列表里去清理,可以保持破解结果干净。

6.3 Responder收不到响应

如果启动Responder后长时间没有哈希,先看目标主机是否关闭了LLMNR和NBT-NS。域内如果配置了禁用这些协议,Responder自然没有用武之地。还有一个常见网络问题:攻击机和目标不在同一二层广播域。Responder依赖广播和组播触发,最好保证网卡在同一VLAN、禁用了WIFI隔离。我在VMware里经常遇到这类问题,解决办法是用桥接网卡而非NAT模式。

6.4 防御视角:防守方如何狙击这类攻击

写完攻击心得,我也要说点防守向的东西。普通运维人员面对哈希攻击,最便宜有效的防守是:关闭LLMNR和NBT-NS,开启SMB签名,限制本地管理员权限,启用Credential Guard,复杂化并定期轮换所有本地管理员口令,尤其要避免多台机器共用同一个本地管理员密码。只要其中两项做到,上面的攻击链就会断裂大半。

从攻击者视角倒过来看防守,也能帮我们更好理解为什么有些授权模拟最终会失败,这反过来让我更敬畏真实环境的复杂性。

实用结论

OSCP备考里,密码攻击是少数几个“理论—工具—实战”链路极短的知识点。从注册表、内存、网络流量三处拿到NTLM哈希,再用hashcat离线破解或哈希传递完成利用,整套流程清晰到像一本流水账,但它恰恰是很多高价值系统的软肋。多台机器共用管理员密码、忽略SAM文件泄漏、开放LLMNR、允许SMB未签名流量,这些配置在日常工作中太常见了。

我个人实际体会最深的点是:不要总想着一击必中。抓哈希、跑字典、开规则、上掩码,这个顺序本身就是一种穷举策略,跟钓鱼要一遍遍抛竿是一个道理。备好字典变体、摸清目标命名习惯,往往比下载几百G的所谓“超大字典”更实效。下一阶段等我刷完横向渗透和域环境内容,再来继续分享。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询