域渗透各种哈希值的作用与利用

在此之前也写过一篇过于 NTLM 认证相关的文章,可以参考Windows的NTLM认证和hash攻击 (这篇文章中存在错误,将在本文中进行更正)

本文主要是想把所有的 hash 都给总结起来,然后总结一下可以攻击利用的方向。就我目前学习到的知识内容来看,密码喷洒和哈希传递攻击在域渗透占据至关重要的位置,对各种 hash 的理解越深刻,在域环境渗透中可能就有越发多的攻击面。

1 hash 一览表

凭据/哈希 生成位置 主要功能/协议 可落地攻击 常用工具 检测/加固要点
LM Hash 旧版 Windows SAM、NTDS 兼容性登录 离线暴力破解、协议降级 secretsdump.pyhashcat -m 3000 GPO 禁用LM;监控明文 <=7 字符密码
NT Hash (NTLM) SAM、NTDS、LSASS 默认口令表示、NTLM 认证 Pass-the-Hash、金/银票、离线破解 mimikatz, NanoDump, crackmapexec, hashcat -m 1000 监控 LSASS 访问、禁用 SMBv1、启用 LSA 保护
Net-NTLMv1/v2 SMB/HTTP/LDAP 挑战-响应 无需传输明文即可认证 LLMNR/NBNS 捕获、NTLM Relay、离线破解 Responder, Inveigh, mitm6, ntlmrelayx, hashcat -m 5500/5600 禁用LLMNR/NBNS、启用 SMB 签名、EPA
MSCache (DCC2) HKLM\SECURITY\Cache 离线登录缓存 定向 GPU 破解获取域密码 mimikatz lsadump::cache, secretsdump.py, hashcat -m 2100 减少缓存条数、加强移动端口令策略
Kerberos 密钥 (krbtgt/服务) NTDS、LSASS、复制流量 TGT/TGS 加密材料 Pass-the-Key、金票/银票、Overpass mimikatz dcsync, Rubeus asktgt, kekeo 监控 DCSync、定期滚动 krbtgt 密钥
Kerberoast TGS 哈希 SPN 服务票据 Kerberos 服务认证 Kerberoasting、离线破解服务账号 GetUserSPNs.py, Rubeus kerberoast, hashcat -m 13100/19700 服务账号最小权限、复杂密码、AES-only
AS-REP Roast 哈希 禁用预认证账户 Kerberos 初始认证 AS-REP Roasting、破解敏感账户 GetNPUsers.py, Rubeus asreproast, hashcat -m 18200 禁用 DONT_REQ_PREAUTH、监控 4768 失败
LSA Secrets / DPAPI MasterKey SECURITY hive、LSASS、DPAPI 存储 储存服务口令、浏览器/VPN 凭据 解密服务账号、获取 VPN/浏览器密码 mimikatz lsadump::lsa, SharpSecDump, SharpDPAPI LAPS/ gMSA 管理、限制本地管理员分发

2 LM Hash

2.1 概述

LM Hash 的全称为 LAN Manager Hash(局域网管理哈希),是Windows操作系统使用的最早的密码存储机制之一。在 Windows Vista/Server 2008 开始默认不在使用 LM Hash 作为密码存储机制。
LM Hash 主要存储在 Windows SAM 数据库和域控制器 NTDS.DIT 数据库中。

LM Hash的计算方式如下:

  1. LM Hash 的用户密码最长为 14 个字符,不足 14 个字符将会使用 NULL 补齐
  2. 将密码字符串分成 7 字节的两个部分。
  3. 分别使用 key 为KGS!@#$%进行 DES 加密
  4. 将加密后的两组拼接在一起,得到最终的 LM Hash 值;

根据上述的计算方法可以知道,如果采用暴力破解的方案,则是需要对两组 7 个字符的 hash 进行破解,复杂度远小于对 14 个字符哈希的破解,这种计算方式导致了暴力破解 LM Hash 成为可能。

在不采用 LM Hash 存储或者空密码的情况下,抓取到的 LM Hash 值为aad3b435b514a4eeaad3b935b51304fe,这是一个需要注意的点,如果在实战环境中碰到这个 hash 值,也不在需要进行爆破了。

因此,目前这种 Hash 已经不在推荐使用,但是目前依旧有系统在使用这种密码的存储方式。如果确实碰到,而且没有其他办法入手的时候(例如一些其他获取权限或 shell 的方式),则尝试爆破获取到的 LM Hash。

2.2 利用思路

收集渠道:获得 SYSTEM/Domain Admin 后,可通过 reg save SAM/SECURITY/SYSTEM + secretsdump.pypwdumpmimikatz lsadump::sam 或 DCSync 导出 LM Hash;也可拷贝卷影副本、备份镜像离线挂载 C:\Windows\System32\config 目录获取 hive。

拆分破解:LM 将密码切成两个 7 字节块,结合 hashcat -m 3000john --format=lm、RainbowTable 等 GPU/彩虹表资源进行掩码、字典或暴力破解,重点尝试“常用词+年份”“短 PIN”“补零凑 7 位”等模式。

明文复用:拿到明文后可直接通过 runas /netonlypsexecwmiexecevil-winrm 等工具横向登录,或在目标主机上修改密码生成新的 NT Hash;遇到仍支持 LM/NTLMv1 的老服务时也能重放响应。

协议降级:借助中间人对 SMB/HTTP/LDAP 协议协商过程的篡改或利用旧式打印机、NAS、嵌入式设备,诱导客户端回退到 LM/NTLMv1,从而捕获可破解的 LM Hash 再转化为更高价值的凭据。

2.3 防御建议

  • 启用 “Network security: Do not store LAN Manager hash value on next password change”,统一改密清除历史 LM Hash,确保新密码只生成 NT Hash
  • 将 “Network security: LAN Manager authentication level” 设为 “Send NTLMv2 response only. Refuse LM & NTLM”,并禁用 SMBv1/NTLMv1,减少协议降级空间。
  • 通过 LAPS/gMSA 管理本地管理员,密码长度 >=15 位且按策略滚动,避免 7 字节拆分暴力破解。
  • 打开 Credential Guard、LSASS 受保护进程 (RunAsPPL) 或部署 EDR,阻断未签名代码访问 SAM/LSASS 内存。
  • 利用 Event ID 4624/4776LmPackageName=NTLM V1AuthenticationPackage=MICROSOFT_AUTHENTICATION_PACKAGE_V1_0 等特征建立告警,定位仍残留 LM 的资产及时淘汰。

3 NT Hash(NTLM)

3.1 概述

NT 局域网管理器(NT LAN Manager, NTLM)在 Windows NT 3.1 中引入,从 Windows Vista/Server 2008 开始默认使用 NTLM 作为密码的存储机制。

生成的 Hash 存储在本地 SAM 数据库或域控制器的 NTDS.DIT 数据库文件中,初代的 NTLM 还可能存储在 LSASS 中,在 Net-NTLMv1、Net-NTLMv2 中则只可能在在本地 SAM 数据库和域控制器的 NTDS.DIT 数据库中。

由于 NTLM 支持全部的 Unicode 字符集 65536 个字符,虽然依旧可以使用 Hashcat 等工具进行暴力破解,但是复杂度与 LM Hash 已经不在同一个层次,想要强行爆破密码的可能性不是非常大(这取决于密码的复杂度),不到迫不得已在 NTLM Hash 中则不采用暴力破解攻击。

NTLM 容易受到哈希传递攻击,通过成功攻击获取到的 NTLM Hash 值去认证目标系统中的服务。

3.2 NTLM Hash 格式

格式:username:RID:LM Hash:NT Hash:::

3.3 利用思路

  1. 获取 Hash:通过 mimikatz sekurlsa::logonpasswordsnanodumpInvoke-DCSyncsecretsdump.py -sam/-ntds 等手段从 LSASS、SAM、NTDS 或备份/休眠文件中导出 NT Hash;虚拟机镜像、卷影副本同样可以被离线解析。
  2. Pass-the-Hash 横向移动:把 NT Hash 直接注入到 impacket-psexec/wmiexec/smbexec/atexeccrackmapexec smbevil-winrmwinrs 等工具中,快速访问 SMB、WMI、WinRM、RPC、MSSQL、RDP Restricted Admin 等服务。
  3. Overpass-the-Hash / Pass-the-Key:在本地伪造 Kerberos 票据,使用 mimikatz sekurlsa::pthRubeus asktgt /pttkekeo 等把 NT Hash 转成 TGT/TGS,从而在要求 Kerberos 的服务(LDAP/HTTP/SMB)上绕过 NTLM 限制。
  4. 离线破解与凭据喷洒:针对关键账户将 Hash 导入 hashcat -m 1000john --format=NT 进行掩码/规则/组合攻击,结合内网定制字典或数据泄露库提升命中率,之后可在 VPN、VDI、邮件或 SaaS 上重放。
  5. 持久化与凭据打包:利用已获得的 Hash 注入访问令牌、添加计划任务或导出 DPAPI MasterKey,进一步窃取浏览器 Cookie、SSH key、API token,形成链式扩散。

3.4 防御要点

  • 在所有服务器/高敏主机启用 Credential Guard、LSASS RunAsPPL、WDAC/CFG,降低 LSASS 被转储和内核注入的概率。
  • 通过 LAPS/gMSA、AESA 分层模式管理管理员账号,避免密码复用并确保长度 >14 位,辅以强制历史密码不重复和频繁轮换
  • 利用 “Network security: Restrict NTLM” 策略在域控、服务器上限制或拒绝 NTLM,配合 SMB/LDAP 签名、Kerberos 约束委派和禁用 LocalAccountTokenFilterPolicy=1,减少 Hash 可直接认证的面。
  • 监控 Event ID 4624/4648/4776/8004、NTLM 审计日志和 Sysmon Event 1/3/10,将异常的 NTLM Type 3、远程执行进程与网络会话关联告警。
  • 采用分层管理 (Tier Model)、Just Enough Admin/Just-in-Time (JEA/JIT) 等策略,把高权限操作限定在受控主机上,缩短 Hash 被窃取后的可利用窗口。

4 Net-NTLMv1

4.1 概述

NTLMv1 基于挑战/响应,使用 NT 哈希(NT hash)派生出 3 个 DES 密钥去加密服务器 challenge,得到 24 字节的响应。

Net-NTLMv1、Net-NTLMv2 中则只可能在在本地 SAM 数据库和域控制器的 NTDS.DIT 数据库中。

Net-NTLMv1 算法描述:

  1. 客户端计算 NT 哈希:NT_hash = MD4(UTF-16LE(password))(16 字节)
  2. NT_hash 后面补 5 个 0,得到 21 字节;分成三段(每段 7 字节):K1 | K2 | K3
    每段 7 字节被转换为 8 字节 DES 密钥(奇偶校验位扩展)。
  3. 服务器发送 8 字节server_challenge(随机)。
  4. 客户端计算响应:
    response = DES_encrypt(K1, server_challenge) || DES_encrypt(K2, server_challenge) || DES_encrypt(K3, server_challenge)(共 24 字节)
  5. response 发回服务器用于验证。
  6. (可选)双方基于响应/哈希派生会话密钥(用于签名/加密)。

4.2 Net-NTLM 工作组身份认证

NTLM 的身份认证可以用以下的图片进行概述

  1. 客户端向服务器发出 Type1 消息(Negotiate),表明它希望使用 NTLM 进行认证,并在消息中包含协商的选项标志(negotiate flags)、可选的域名(Domain)与工作站名(Workstation),以告诉服务器客户端支持的功能(比如是否支持 NTLMv2、是否要求加密会话等)。
  2. 服务端接收到客户端发送过来的 Type1 消息后,会读取其中的内容,并从中选择出自己所能接受的服务内容、加密等级、安全服务等,传入 NTLM SSP,得到 Type2 Challenge 消息(被称为 Challenge 挑战消息),并将此 Type2 消息发回给客户端。 Type2 消息至少包含:随机的 8 字节server_challenge(或称 nonce),以及可选的target name/target info(AV-pairs,服务器可提供的额外信息,用于 NTLMv2 的 blob)。Type2 用来向客户端发出本次会话的随机 challenge。服务器会记下/保持此 challenge 以便后续验证。
  3. 客户端收到 Type2 后,使用本地保存的用户凭据(基于用户密码计算的 NT 哈希,或 NTLMv2_hash 的派生值)与 challenge 结合,生成认证响应 **Net-**NTLM-Hash,最后将 **Net-**NTLM-Hash 封装到 Type 3 Authenticate 消息中(被称为 Authenticate 认证消息),发往服务端。 Type3 消息通常包含:用户名、目标域名、工作站名、以及计算出的 LM/NTLM 响应(而不是明文密码或直接的哈希值)。客户端把 Type3 发回服务器以供验证。
  4. 服务器收到 Type3 后,从它自己的账户数据库(例如域控 AD/NTDS)读取该用户的凭据(例如 NT 哈希,或在 Kerberos/策略下不同),然后使用相同的算法将 server_challenge(和blob/client_challenge/时间戳等)与该凭据结合计算期望响应。将计算得到的期望响应与客户端在 Type3 中提供的响应字节逐位比较:相同则认证通过,否则失败。
  1. SSPI

SSPI(Security Support Provider Interface),即 安全服务提供接口,这是 Windows 定义的一套接口,该接口定义了与安全有关的功能函数,包含但不限于:

  • 身份验证机制
  • 信息完整性
  • 为其他协议提供的会话安全机制
  1. SSP

SSP(Security Service Provider),即 安全服务提供,它是 SSPI 的实现者,是对 SSPI 相关功能函数的具体实现。微软自己实现了如下的 SSP,用于提供安全功能:

NTLM SSP

Kerberos

Digest SSP

Cred SSP

……

在系统层面,SSP 就是一个 dll,来实现身份验证等安全功能,实现的身份验证机制是不一样的。比如 NTLM SSP 实现的就是一种 Challenge/Response 验证机制。而 Kerberos SSP 实现的就是基于 ticket 的身份验证机制。我们可以编写自己的 SSP,然后注册到操作系统中,让操作系统支持更多的自定义的身份验证方法。

4.3 Net-NTLM 域环境身份认证

NTLM 在域环境中的认证的前三步与NTLM 在工作组环境中的认证是一样的,不同的地方开始出现在第四步:

  1. 首先,若客户端要访问服务器上的某项需要认证的服务,客户端会发起认证协商。客户端向服务器发送 Type 1 (Negotiate) 消息,表明自己支持的认证选项(negotiate flags),并可选地包含客户端的域名(Domain)与工作站名(Workstation)。
  2. 服务端接收到客户端发送过来的 Type1 消息后,会读取其中的内容,并从中选择出自己所能接受的服务内容、加密等级、安全服务等,传入 NTLM SSP,得到 Type2 Challenge 消息(被称为 Challenge 挑战消息),并将此 Type2 消息发回给客户端。 Type2 至少包含由服务器生成的随机 server_challenge(通常 8 字节),并可包含 target name / target info(AV-pairs,用于 NTLMv2 的 blob)。服务器应保存该 server_challenge 以便后续验证(或将其与会话关联)。
  3. 客户端收到 Type2 后,使用本地的凭据(即基于用户明文密码派生的 NT 哈希,或进一步派生出的 NTLMv2_hash)与 server_challenge 及(若为 NTLMv2)自身生成的 client_challenge、时间戳与 target_info 一起计算认证响应(LM/NT/NTLMv2 response)。计算完成后,客户端把 Type 3 (Authenticate) 消息发回服务器;Type3 包含用户名、域名、工作站名以及计算出的响应。
  4. 服务器接收到 Type3 后,开始验证该请求。若要验证的账户为本地账户,服务器可直接使用本地 SAM 中存储的哈希重新计算期望响应并比对;若为域用户(常见场景),服务器会将需要验证的信息(通常是从 Type3 中提取的用户名/域/response/原始 challenge 等)转发给域控制器(Domain Controller,DC)进行验证。****
  5. 域控制器收到服务器的验证请求后,使用其存储的该用户凭据(例如 AD 中的 NT 哈希)按相同的协议算法计算期望响应(对 NTLMv2 包括对 challenge||blob 的 HMAC_MD5 等),并将比对结果(通过/失败)和相关会话密钥(如果协商)返回给请求的服务器。若比对成功,DC 可返回认证成功并帮助派生会话密钥;若比对失败,则返回失败。
  6. 服务器根据域控制器返回的结果决定是否允许客户端访问,并与客户端建立后续会话(若协商了签名/加密,则使用派生的会话密钥对会话进行保护)。服务器同时记录认证结果以便审计与后续授权决策。

4.4 NTLMv1 利用思路

格式:username:domain:LM Hash:NT Hash:challenge

由于响应依赖服务器的随机 challenge,所以直接使用 NT Hash 无法构造合法的响应,因此无法通过哈希传递实现攻击利用,但是依旧可以使用中继攻击利用。攻击者可中间人转发 challenge/response,或实时使用被窃取的哈希在可接受 NTLM 的服务上完成认证(具体场景取决于目标服务接受的认证形式)。

  1. 诱导客户端发起 NTLM 认证:通过 LLMNR/NBNS/WPAD/MDNS 欺骗 (ResponderInveigh)、恶意 SCF/URL 文件、PrinterBug/PetitPotam/DFSCoerce 等手段向攻击者主机发起 SMB/HTTP 请求,从而拿到 NTLMv1 challenge-response。
  2. 协议降级:在中间人场景操控协商标志,关闭或篡改 NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY,或针对只支持 NTLMv1/LM 的老旧设备/域成员制造兼容性场景,让客户端退回 NTLMv1。
  3. 离线破解:捕获到的 Net-NTLMv1 可放入 hashcat -m 5500john --format=netntlm 配合掩码/规则/彩虹表进行破解,利用 56-bit DES keyspace 较小的特点快速还原明文。
  4. 中继利用:当目标服务器未启用 SMB/LDAP 签名时,可以 ntlmrelayx --no-smb-signing --lmimpacket-ntlmrelayx 把 NTLMv1 响应中继到 SMB、LDAP、ADCS、SQL、WinRM,执行命令、创建本地管理员或写入计算机对象;也可将 NTLMv1 转换成 Kerberos PAC 伪造,进一步扩展权限。
  5. 链式打通:破解或中继获得的凭据常用于添加域管理员、修改 GPO、部署服务端 payload,或与 RBCD/Shadow Credentials 结合实现持久化。

4.5 防御建议

  • 将 “Network security: LAN Manager authentication level” 设为 “Send NTLMv2 response only. Refuse LM & NTLM”,同时在域控启用 “Restrict NTLM: NTLM authentication in this domain = Deny all”。
  • 对 SMB/LDAP/LDAPS/HTTP 启用签名或 Extended Protection (EPA)、Channel Binding Token、MIC,强制客户端使用 NTLMv2 并验证服务器身份,防止中继。
  • 关闭 LLMNR、NBNS、mDNS 与 WPAD,结合 DNS Suffix、静态代理、802.1X 限制局域网欺骗触发的认证流量。
  • 在 DC/服务器上开启 NTLM Auditing(如 Event ID 8001~8004)与 Event ID 4624 里的 LmPackageName=NTLM V1 告警,发现遗留资产并限期整改。
  • 定期安全评估 SMBv1/老旧打印机、NAS 等设备,迁移或隔离只能使用 NTLMv1/LM 的系统,避免成为协议降级突破口。

5 Net-NTLMv2

5.1 概述

NTLMv2协议最初在Windows NT 4.0 SP4中引入,作为NTLMv1的更强大的替代品。自从2000服务器版以来,它一直是Windows的默认设置。它增强了对NTLMv1易受攻击的某些欺骗攻击的防护。NTLMv2 在 NTLMv1 基础上大幅改进,使用 HMAC-MD5 结构、绑定用户名/域名、包含时间戳和 target info(服务器提供),更难重放和离线破解。

Net-NTLMv1、Net-NTLMv2 中只可能在在本地 SAM 数据库和域控制器的 NTDS.DIT 数据库中。

Net-NTLMv2 算法描述:

  1. 客户端计算 NT 哈希:NT_hash = MD4(UTF-16LE(password))(16 字节)
  2. 派生 NTLMv2 哈希(又称 NTLMv2_hash):NTLMv2_hash = HMAC_MD5(key=NT_hash, msg=UpperCase(Username) || Domain)(注意用户名大写与域名一起作为消息)
  3. 服务器发送 8 字节 server_challenge(随机)并可能提供 target_info(AV pairs)。
  4. 客户端构造 blob(client challenge blob),常包含:
  • Blob signature(固定)
  • Timestamp(文件时间格式)
  • Client challenge(8 字节随机)
  • Target info(来自服务器,可为空)
  • Blob terminator
  1. 计算 NTLMv2 响应(NT proof + blob):NTProofStr = HMAC_MD5(key=NTLMv2_hash, msg=server_challenge || blob)``NTLMv2_response = NTProofStr || blob(最终响应长度可变,前 16 字节为 proof,后面为 blob)
  2. 服务器用相同方法校验 NTProofStr 是否匹配,匹配则认证通过。
  3. 会话密钥(session key)可由 NTLMv2_hashNTProofStr 等派生出来,用于签名/加密。

5.2 Net-NTLMv2 利用思路

格式:username:domain:challenge:NT Hash response:other info

NTLMv2_hash 绑定用户名与域名,难以直接用哈希在其他上下文重用(提高针对离线攻击的难度)。响应包含时间戳、随机 client_challenge 与 server target_info,使得简单的重放/预计算变得困难。

如果攻击者能把认证请求中继到另一个可接受 NTLM 的服务(目标服务不要求 channel binding 或强验证),那么中继仍然能完成认证(NTLMv2 证明是在两个端的实时对话中生成的)。

  1. 触发客户端认证:通过 LLMNR/NBNS/WPAD 欺骗、恶意 UNC/SCF、钓鱼宏、WebDAV、PrinterBug/PetitPotam/DFSCoerce/MS-EFSRPC、mitm6 等方式诱导受害者向攻击者服务器发起 SMB/HTTP/LDAP 请求,收集 Net-NTLMv2 challenge-response。
  2. NTLM Relay:将捕获到的会话实时转发至未开启签名的 SMB/LDAP/LDAPS/ADCS/WinRM/MSSQL 服务 (ntlmrelayx, cme smb --relay),借机写入本地管理员、修改 gMSA/LAPS 密码、创建/修改计算机对象或为目标账户添加 SPN。
  3. 衍生利用:利用中继权限进一步执行 RBCD、Shadow Credentials、GenericWrite、ADCS ESC8/ESC11(请求可导出私钥的证书),或通过 LDAP 修改用户属性、组成员,最终获取更高等级的 Kerberos 凭据。
  4. 离线破解:将 username:domain:challenge:response 导入 hashcat -m 5600john --format=netntlmv2,结合掩码、规则和泄露词库尝试还原明文,在 VPN/邮件/云服务等其他入口重复使用。
  5. 凭据重放与会话劫持:在部分老旧服务上直接重放捕获到的 Net-NTLMv2 响应,或结合 SMB 会话密钥劫持 NTLMSSP Session Key,进一步获取文件系统与服务令牌。

5.3 防御建议

  • 在域控启用 “Restrict NTLM” 系列策略(Audit/Block domain accounts、Incoming NTLM Traffic),并为关键服务器配置 AllowList,逐步消除 NTLM 依赖。
  • 强制 SMB/LDAP/LDAPS/HTTP/ADCS 使用签名或 Extended Protection,开启 Channel Binding、MIC、”Require NTLMv2 session security”,从根源上阻断 NTLM Relay。
  • 关闭 LLMNR/NBNS/WPAD,推送静态代理/DNS 后缀,结合 WPAD 注册表 AllowAutodiscovery=0,减少可被诱导的认证流量。
  • 对 ADCS/WEB Enrollment、IIS、Exchange、SCCM 等常被中继的服务启用 Kerberos Only/证书身份验证,并限制具有 ESC 漏洞模板的注册权限。
  • 监测 Event ID 4624 (LogonType=3, AuthenticationPackage=NTLM)46488002/8004、ADCS 4886/4887 等日志,结合 PCAP/Zeek 检测异常的 NTLM 流量与未知主机的身份验证。

6 MSCache (DCC2)

6.1 概述与存储位置

MSCache(Domain Cached Credentials,简称 DCC)用于便携设备在脱机时完成域登录。

Windows XP/2003 使用 DCCv1(mscash),Vista 及以后使用 DCCv2(mscash2),后者默认缓存最近 10 组域凭据。缓存内容位于 HKLM\SECURITY\Cache\NL$1...NL$10,配置信息位于 NL$Control,解密依赖 SYSTEM hive 中的 BootKey。

在线状态下,LSASS 内存同样持有 DCC 结果,可被 mimikatz sekurlsa::logonpasswords 直接读取。

MSCache 算法描述:

  1. 将用户密码转成 UTF-16LE,计算 NT Hash:NT = MD4(UTF-16LE(password))取用户名(默认大写)作为 salt,执行 10240 次 PBKDF2:
  2. DCC2 = PBKDF2(HMAC-SHA1, NT, UpperCase(username), 10240, 16)
  3. 将 DCC2、域 SID、时间戳等封装到缓存条目中

6.3 获取方式

  • 在线注入mimikatz lsadump::cache /injectsekurlsa::logonpasswords
  • 本地离线reg save HKLM\SYSTEM system.hivreg save HKLM\SECURITY security.hiv 后,secretsdump.py -system system.hiv -security security.hiv -just-dc-cache
  • 远程 DC:对域控执行 secretsdump.py <domain>/<user>:<pass>@dc -just-dc-cache 或使用 crackmapexec smb --lsa

6.4 利用思路

  1. 离线爆破:DCC2 无法像 NTLM 那样直接 Pass-the-Hash,必须解出明文或导出可复用的 NT Hash;适合 GPU 集群长时间爆破,常配合集中策略中“永不过期/弱口令”账户。
  2. 旁路字典:将已知的组织口令策略(季节+年份等)投喂 hashcat -m 2100 -a 6/-a 7,命中后即得到明文,可用于 VPN、RDP、Kerberos。
  3. 蹭缓存:针对笔记本或工作组 DMZ 主机,物理访问后离线提取 hive,恢复密码用于远程横向。
  4. 配合 DCSync:若仅能拿到缓存而无 NTDS,可先爆破出明文,再借此账户远程执行 DCSync/提权。

6.5 防御建议

  • HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\cachedlogonscount 设为最小值甚至 0
  • 对本地管理员开启 LAPS/GMSA,降低缓存价值;
  • 通过 Credential Guard、LSA 保护模式限制 LSASS 内存读取;
  • 针对 Event ID 4624/4768 中的 LogonType=11(缓存登录)做异常检测,关注长期脱网终端。

7 Kerberos 密钥 (krbtgt/服务)

7.1 密钥类型与位置

  • krbtgt 账户密钥:域根账号,密钥(RC4-HMAC、AES128、AES256)保存在 NTDS.DIT 中,LSASS 持有当前与上一次版本,用于加密/签名 TGT。
  • 服务/SPN 账户密钥:注册了 SPN 的用户/服务账号(如 SQLSvc/HTTPSvc),密钥用于解密针对该 SPN 的 TGS。
  • 票据缓存:客户端 lsass.exe 会缓存 TGT/TGS;klistRubeus triage 可查看。夺取任意一种密钥都能伪造票据或派生更多凭据,因此 Kerberos 密钥是横向移动的核心资产。

7.2 Kerberos 身份验证流程

图中三类密钥分别兑现为:客户端口令派生出的预身份验证密钥、KDC 持有的 krbtgt 密钥、目标服务/计算机账户密钥。攻击者只要能替代任一环节,即可伪造票据或冒用身份。

7.3 常见利用思路

  1. DCSync + Golden Ticket
    • 使用 mimikatz lsadump::dcsync /domain:<d> /user:krbtgt 导出 krbtgt RC4/AES;
    • mimikatz kerberos::golden /user:<u> /domain:<d> /sid:<SID> /krbtgt:<NT> 生成自定义 TGT,甚至可将票据有效期设置为多年;
    • 利用 misc::cmd/sekurlsa::pth 注入票据,永续域管理员。
  2. Silver Ticket / Pass-the-Key
    • 针对单个服务账号(如 HTTP/iis01.lab.local)获取其 NT hash,即可离线伪造 TGS;
    • mimikatz kerberos::golden /ticket:... /target:http/iis01 直接访问服务,无需与 KDC 通讯,适合绕过 KDC 审计。
  3. Overpass-the-Hash (Pass-the-Key)
    • 以 NT Hash/AES Key 请求合法 TGT:mimikatz sekurlsa::pth /user:u /domain:d /ntlm:<hash> /run:cmd
    • 结合 Rubeus asktgt /aes256 支持仅 AES 的现代域。
  4. Pass-the-Ticket
    • 将窃取到的 .kirbi 注入当前会话:Rubeus ptt /ticket:xxx.kirbi
    • 常用于委派/中继场景,例如从 SQL Server SETSPN 获得的 TGS 直接注入访问后台。
  5. Skeleton Key / 域内后门
    • 向 LSASS 注入通用口令(mimikatz misc::skeleton),任意用户使用预设口令即可通过 Kerberos,典型持久化手段。

7.4 常用工具与命令

  • mimikatz lsadump::dcsync / kerberos::golden / kerberos::ptt
  • Rubeus dump / asktgt / tgtdeleg / harvest / s4u
  • kekeo 生成自定义 AP-REQ/TGS
  • Impacketticketer.pygetTGT.pygetST.py
  • 检查票据:klist, Invoke-Kerberoast -Ticket, Get-KerberosTicket

7.5 安全加固

  • 定期轮换 krbtgt(两次以上),并监控 4624(4768) 中异常长的 TicketAge;
  • 限制 DCSync 权限(仅授予 Enterprise/Domain Admins),开启 LAPS/ESAE 管理模型;
  • 对启用委派的计算机启用 Kerberos Armoring/FASTSIDHistory 审计;
  • 通过 Event ID 4769/4771 + PAC 验证失败来发现伪造票据。

8 Kerberoast TGS 哈希

8.1 概述

Kerberoasting 针对启用 SPN 的服务账户。攻击者使用任意普通域用户向 KDC 请求目标 SPN 的 TGS,然后离线破解 TGS 中的服务密钥(RC4/AES)。一旦还原明文口令,即可接管服务或进一步提权。

8.2 攻击流程图

8.3 hash 格式

  • RC4-HMAC(type 23):兼容旧系统,hashcat -m 13100,最易破解;
  • AES128/AES256(type 17/18)hashcat -m 19700/-m 19800,对口令复杂度要求高;
  • 输出格式通常为:$krb5tgs$23$*account$REALM$spn*$checksum$data...

8.4 利用链

  1. 枚举 SPN:GetUserSPNs.py lab.local/user:pass -dc-ip x.x.x.xSetSPN -Q */*
  2. 请求票据:Rubeus kerberoast /domain:lab.local /nowrapAdd-Type ...; Request-SPNTicket
  3. 处理结果:hashcat -m 13100 hashes.txt -a 0 rockyou.txt --force
  4. 登录/横向:明文口令可用于 WinRM、MSSQL、IIS,或进一步 DCSync。若命中托管服务账户(gMSA)或高权限服务,常可直达域控权限。

8.5 变种与扩展

  • 目标 AES-onlyRubeus kerberoast /aes,或 GetUserSPNs.py --request --aes
  • 隐蔽收集Rubeus harvest /interval:30 定期请求 TGS;
  • 影子委派:联合资源委派(Resource-Based Constrained Delegation)获得服务票据后,使用 s4u 代发票据;
  • Kerberoast + Relay:将 TGS 转发到其它服务(如 LDAP)进行 S4U2Self/Proxy 滥用。

8.6 防御建议

  • 强制服务账户使用复杂随机口令,优先 gMSA;
  • 禁止不必要的 SPN,删除过期服务账户;
  • 监控 4769 事件中来自非服务主体的大量 TGS 请求;
  • 开启 AES-only 并禁用 RC4,缩小爆破面。

9 AS-REP Roast 哈希

9.1 概述

AS-REP Roasting 针对禁用预身份验证 (DONT_REQ_PREAUTH) 的域账户。无需有效密码即可请求 AS-REP,KDC 会直接使用账户密钥加密回复,攻击者离线破解即可。

9.2 攻击步骤

  1. 列举目标:GetNPUsers.py lab.local/ -dc-ip x.x.x.x -usersfile users.txt,或 LDAP 过滤 userAccountControl:1.2.840.113556.1.4.803:=4194304
  2. 发送 AS-REQ,不包含 PA-ENC-TIMESTAMP;
  3. 接收 AS-REP(EncPart 由用户密钥加密),保存为哈希。

9.3 hash 格式

  • RC4(etype 23)对应 hashcat -m 18200
  • AES128/AES256(etype 17/18)分别使用 hashcat -m 19800/19900
  • 格式例:$krb5asrep$23$user@REALM:checksum$data...

9.4 利用路线

  1. 获取 AS-REP:GetNPUsers.pyRubeus asreproast /format:hashcat /outfile:hashes.txt
  2. GPU 爆破明文;
  3. 使用明文进行 VPN/RDP/Pass-the-Hash;
  4. 若账户自带高权限,可直接 DCSync;若为普通用户,可结合 Kerberoast、ACL 提权。AS-REP hash 不需要事先域凭据,适合渗透初期信息搜集。

9.5 防护措施

  • 禁用 DONT_REQ_PREAUTH,除非与某些旧系统兼容,否则无任何理由启用;
  • 监控 Event ID 4768Pre-Authentication Type = 0Status = 0x18/0x19 的失败日志;
  • 利用 Fine-Grained Password Policy 强制弱口令账户过期;
  • 对暴力破解告警(Kerberos 错误 4771)做阈值监控。

10 LSA Secrets / DPAPI MasterKey

10.1 概述

LSA Secrets 存放在本地 SECURITY hive 的 Policy\Secrets 下,内容包括自动登录口令、服务账户密码、RDP 共享密钥等;DPAPI(Data Protection API)通过 MasterKey 派生 session key 用于保护系统/用户级凭据,如浏览器密码、Chrome Cookies、远程桌面凭据。它们常常与域 hash 联动:只要掌握系统/用户口令或其哈希,即可还原 DPAPI 解密链。

10.2 存储位置

  • HKLM\SECURITY\Policy\Secrets\*L$HYDRA(IIS)、_SC_<Service>(服务账号),DefaultPassword(自动登录);
  • HKLM\SYSTEM\CurrentControlSet\Control\Lsa\JD/Skew1/GBG/Data:LSA Key, DPAPI System Key;
  • %APPDATA%\Microsoft\Protect\<SID>\*:用户 MasterKey;
  • %ProgramData%\Microsoft\Crypto\SystemKeys:本地系统 MasterKey。

10.3 导出方式

  • 在线注入mimikatz lsadump::lsa /patchsekurlsa::dpapi
  • 离线导出reg save HKLM\SYSTEM system.hivreg save HKLM\SECURITY security.hivreg save HKLM\SOFTWARE software.hiv,随后 secretsdump.py -system system.hiv -security security.hiv -sam sam.hiv
  • DPAPI 解密SharpDPAPI masterkeys / credentials / rdg / browser,或 DPAPIPeep

10.4 DPAPI 解密链路

若为计算机账号(如 SYSTEM)创建的凭据,则需要 DPAPI System Key;若为域用户登录产生的 MasterKey,还可使用 Domain Backup Key(DCK)脱机解密。

10.5 攻击场景

  • 服务账号/计划任务:读取 _SC_serviceL$SECRETS 以获得明文,随后横向;
  • RDP/RemoteAppmimikatz dpapi::rdg 还原 .rdp 文件保存的凭据;
  • 浏览器/密码管理器:利用 SharpChromium + DPAPI MasterKey dump 出 Cookie/Token;
  • VPN/Wi-Fimimikatz dpapi::wifi/::cred 获取企业 VPN 账户;
  • gMSA/LAPS:LSA Secrets 包含明文 gMSA 密码历史,可复用到域控服务。

10.6 防御措施

  • 启用 Credential Guard/LSA 保护,阻断未签名驱动注入;
  • 对服务器启用 BitLocker 或 VBS,防止离线拷贝 hive;
  • 监控 Event ID 4656/4663 针对 SECURITY hive 的读取行为;
  • 定期轮换 LSA Secrets(自动登录、服务账户)并优先使用 gMSA、证书认证;
  • 对浏览器/密码库引导用户使用 YubiKey/FIDO 等多因素,降低 DPAPI 泄露敏感度。

域渗透各种哈希值的作用与利用
http://candyb0x.github.io/2025/11/09/域渗透各种哈希值的作用与利用/
作者
Candy
发布于
2025年11月9日
更新于
2025年11月9日
许可协议