目录
一、AS-REP 的核心上下文:Kerberos 认证的 “AS 阶段”
4、MS14-068(CVE-2014-6324):普通用户提权域管的 “经典漏洞”
1. PetitPotam 漏洞(CVE-2021-36942)
在我的内网渗透专栏中,我专门有写关于域控制器安全的文章,但是我是在获得域控制器管理员的前提下进行的,而不是说通过域普通用户完成的,那么现在域控制器漏洞就可以在普通用户的前提下获得域管理员账户,接下来就是详细介绍几种漏洞了,具体的操作会在下一篇文章中进行详细操作。
1、Zerologon漏洞
Zerologon(CVE-2020-1472)是 Windows 域环境中最具破坏力的漏洞之一,由荷兰安全公司 Secura 的研究员 Tom Tervoort 于 2020 年发现。该漏洞存在于微软 Netlogon 远程协议(MS-NRPC)中,允许攻击者在无需任何凭据的情况下接管域控制器(DC),进而控制整个 Active Directory 域。以下是其核心原理、攻击流程及防御方案的深度解析:
一、漏洞本质:加密设计缺陷与协议信任滥用
Zerologon 的核心缺陷源于Netlogon 协议的加密实现漏洞。在正常认证流程中,客户端(如域内计算机)与域控制器通过以下步骤建立安全通道:
挑战交换:客户端与 DC 互发 8 字节随机挑战(Client Challenge/Server Challenge)。
会话密钥生成:双方使用客户端机器账户的 NTLM Hash(即 “共享密钥”),通过 HMAC-SHA256 算法生成 128 位会话密钥(Session Key)。
凭证验证:客户端用 Session Key 加密 Client Challenge 生成Client Credential,DC 同样计算并比对。若一致,则认证通过。
漏洞关键点在于:
加密模式缺陷:微软使用 AES-CFB8(8 位密文反馈模式)加密 Client Credential,但将初始化向量(IV)固定为全零(16 字节 0x00)。这导致攻击者可通过暴力猜测(约 2000 次尝试)使 Client Credential 全为 0,从而伪造合法认证。
协议信任滥用:Netlogon 协议允许客户端重置自身机器账户密码。攻击者利用这一功能,在认证通过后将域控制器的机器账户密码置为空,彻底控制 DC。
二、攻击流程:从漏洞利用到域控接管
1. 攻击前提
攻击者需与目标 DC 的 Netlogon 服务(TCP 445 或 RPC 端口)建立网络连接。
DC 未安装微软 2020 年 8 月发布的补丁(KB4557957)或后续更新。
2. 核心步骤
伪造认证请求:攻击者发送全零的 Client Challenge 和 Client Credential,通过暴力尝试绕过验证。
重置密码:利用 Netlogon 协议的NetrServerPasswordSet2函数,将 DC 机器账户密码设为空。此时,DC 的 AD 数据库(ntds.dit)与本地注册表 /lsass 进程中的密码不一致,导致其逻辑脱域。
横向移动与权限提升:
使用空密码通过 SMB 或 RDP 登录 DC(如wmiexec.py -hashes :aad3b435b51404eeaad3b435b51404ee EXAMPLE/admin@192.168.1.10)。
利用 DC 机器账户的 Dcsync 特权(默认具备),导出域内所有用户的 NTLM Hash(包括域管理员)。
2、Kerberoasting 漏洞
Kerberoasting(Kerberos 票据烘烤)是针对Kerberos 认证协议 TGS 阶段的经典攻击技术,并非传统意义上的 “代码漏洞”,而是利用 Kerberos 协议设计特性(服务票据加密机制)实现的 “逻辑攻击”。攻击者可通过合法请求获取域内服务账号(Service Account) 的加密票据,离线爆破出服务账号密码,进而利用服务账号的高权限实现内网横向移动或权限提升。
Kerberoasting 的攻击流程
Kerberoasting 攻击无需管理员权限,全程无明显异常日志(仅正常 TGS 请求),隐蔽性极强。完整流程分为 4 步:
1. 攻击前提
攻击者已获取域内普通用户权限(如通过钓鱼、弱口令登录某员工 PC);
域内存在已注册 SPN 的服务账号(如 SQL Server 服务账号、IIS 应用池账号,这类账号通常权限较高,如本地管理员、域管理员);
攻击者能与域控制器的 TGS 服务(默认端口 88)通信。
2. 核心攻击步骤
步骤 1:枚举域内 SPN 服务(定位攻击目标)
攻击者需先找到 “已注册 SPN 的服务账号”——SPN 是服务的唯一标识,只有注册了 SPN 的服务,才能通过 Kerberos 认证。常用枚举工具与命令:
setspn(Windows 自带工具):枚举域内所有注册的 SPN:
PowerShell(Active Directory 模块):筛选服务账号并关联 SPN:
Rubeus(渗透工具):直接枚举可用于 Kerberoasting 的 SPN:
步骤 2:请求目标服务的 ST(获取加密票据)
攻击者选择高价值服务账号(如权限较高的svc_sql),向 TGS 请求其对应的 ST。工具示例:
Rubeus:请求 ST 并自动导出为可爆破格式:
PowerShell(KerberosRequestorSecurityToken):通过 API 手动请求 ST:
Impacket 工具(Linux):从 Linux 环境请求 ST:
步骤 3:导出 ST(提取加密数据)
ST 默认存储在客户端的 “内存票据缓存” 中(Windows 的lsass.exe进程、Linux 的krb5cc缓存文件),攻击者需将其导出:
Windows 环境:用 Mimikatz 导出内存中的票据:
Linux 环境:直接读取 krb5 缓存文件(默认路径/tmp/krb5cc_$UID):
步骤 4:离线爆破 ST
导出的 ST 是用服务账号 Hash 加密的,攻击者需通过离线爆破还原密码。核心逻辑:暴力尝试明文密码,用密码推导 Hash,再用 Hash 加密 “已知的票据明文部分”,若与导出的 ST 加密结果一致,则密码正确。
常用爆破工具与命令:
Hashcat(支持 GPU 加速,效率高)
| 对比维度 | Kerberoasting | AS-REP Roasting |
| 攻击阶段 | Kerberos TGS 阶段(获取 ST) | Kerberos AS 阶段(获取 AS-REP) |
| 攻击目标 | 已注册 SPN 的服务账号 | 禁用预认证的普通用户账号 |
| 票据加密密钥 | 服务账号的 NTLM Hash | 普通用户的 NTLM Hash |
| 攻击前提 | 域内普通用户权限,存在 SPN 服务 | 域内普通用户权限,存在禁用预认证的用户 |
| 爆破难度 | 服务账号密码通常更复杂,难度高 | 普通用户密码可能较简单,难度较低 |
3、AS-REP Roasting攻击
AS-REP 是 Kerberos 身份认证协议中的关键术语,全称为 Authentication Server Response(认证服务器响应)。它是 Kerberos 认证流程第一阶段(“AS 阶段”)的核心输出,由 Kerberos 体系中的 AS(Authentication Server,认证服务器) 生成,用于响应客户端的认证请求(AS-REQ),并向合法客户端发放后续认证所需的 “门票”。
要理解 AS-REP,需先明确其所处的 Kerberos 认证上下文 ——Kerberos 是 Windows 域环境默认的身份认证协议,核心是 “基于票据(Ticket)的认证”,无需客户端直接向服务端传输密码,而 AS-REP 正是这一流程的 “第一张关键凭证”。
一、AS-REP 的核心上下文:Kerberos 认证的 “AS 阶段”
Kerberos 认证分为三个核心阶段(AS 阶段、TGS 阶段、AP 阶段),AS-REP 诞生于第一个阶段(AS 阶段),该阶段的目标是:客户端向 AS 证明自己的身份,并获取访问 “票据授予服务器(TGS)” 的权限(即 TGT 票据)。
整个 AS 阶段的交互流程如下,AS-REP 是流程的最终输出:
客户端发起请求(AS-REQ):客户端(如域内用户的 PC)向域控制器(DC,域环境中 AS 和 TGS 通常集成在 DC 上)发送 AS-REQ(Authentication Server Request,认证服务器请求)。AS-REQ 中包含关键信息:客户端用户名、客户端生成的 “临时会话密钥”(用 AS 的公钥加密,防止篡改)、以及(默认情况下)预认证数据(Pre-Authentication Data)—— 用用户密码推导的 Hash 加密的时间戳(用于证明客户端 “拥有用户密码”,避免恶意请求)。
AS 验证并生成响应(AS-REP):AS(DC)接收 AS-REQ 后,会执行两步验证:
验证用户名是否存在于域数据库(如 Active Directory);
验证 “预认证数据”:用域内存储的该用户 Hash 解密预认证数据,若能还原出合法时间戳(避免重放攻击),则确认客户端身份合法。验证通过后,AS 生成 AS-REP 并发送给客户端。
客户端接收并解析 AS-REP:客户端用自己的密码 Hash 解密 AS-REP 中的关键信息,获取后续认证所需的 “门票” 和密钥,进入 Kerberos 下一阶段(TGS 阶段)。
AS-REP 本身是 Kerberos 认证的正常组件,但当域内用户 “禁用预认证” 时,AS-REP 会成为攻击者窃取用户密码 Hash 的突破口,这种攻击被称为 AS-REP Roasting(AS-REP 烘烤)。
1. 攻击原理:利用 “无预认证” 的漏洞
默认情况下,Kerberos 客户端发送 AS-REQ 时必须携带 “预认证数据”(用用户 Hash 加密的时间戳),AS 会验证该数据后才生成 AS-REP—— 这一步能防止 “未授权请求”(攻击者无法伪造预认证数据,因为没有用户 Hash)。
但如果某个域用户的账号配置为 “不需要预认证”(通常是为了兼容老旧系统,或误配置),AS 会跳过预认证验证,直接向 “任何发送 AS-REQ 的请求者” 返回 AS-REP。此时:
攻击者可伪造该用户的 AS-REQ(只需知道用户名,无需密码),向 DC 发送请求;
DC 验证用户名存在且 “无需预认证”,直接返回 AS-REP;
攻击者获取 AS-REP 后,重点破解其中 “用用户 Hash 加密的 Client/TGS 会话密钥”—— 由于该字段的加密算法是可逆的(如 AES-256、RC4),攻击者可通过离线爆破(如用 Hashcat、Rubeus 工具)还原出用户的密码 Hash,甚至明文密码。
4、MS14-068(CVE-2014-6324):普通用户提权域管的 “经典漏洞”
MS14-068 是 Kerberos 协议的严重漏洞(2014 年披露),因 KDC(DC)对 “特权属性证书(PAC)” 的验证缺陷,允许普通域用户伪造包含 “域管理员权限” 的 PAC,进而生成高权限 TGT,直接登录 DC。
1. 核心原理
PAC 是 Kerberos 票据中包含 “用户权限信息” 的字段(如用户所属组、权限等级),由 KDC 在生成 TGT 时添加,并在 TGS 阶段验证。MS14-068 的缺陷在于:
普通用户可构造 “包含域管理员组权限” 的伪造 PAC;
KDC 验证时仅检查 PAC 的签名,未验证 “用户是否真的拥有该权限”,导致伪造 PAC 被认可。
2. 攻击流程
获取普通用户凭证:通过钓鱼、弱口令等获取域内普通用户账号(如user1)和密码;
生成伪造 TGT:
使用 MS14-068 漏洞利用工具:ms14-068.exe -u user1@example.com -p Password123 -s S-1-5-21-123456789-1234567890-123456789-500 -d DC01.example.com;
-s:目标 SID(此处为域管理员的 SID,500是默认管理员账号的 RID);
注入 TGT 并登录 DC:
用 Mimikatz 注入 TGT:mimikatz "kerberos::ptt TGT_user1@example.com.ccache";
登录 DC:psexec.exe \\DC01.example.com cmd.exe(获取 DC 的 CMDshell)。
5、PotitPetam技术
PotitPetam是近年来内网渗透中针对域控制器(DC)的一种高威胁攻击技术,其核心是结合PetitPotam 漏洞与NTLM 中继 / 降级攻击,通过伪造身份验证请求获取域控制器的凭证,进而实现对整个域环境的控制。以下从技术原理、攻击流程、实战场景及防御策略四个维度展开深度解析:
一、技术本质:PetitPotam 漏洞的变种与延伸
1. PetitPotam 漏洞(CVE-2021-36942)
核心原理:利用微软MS-EFSRPC 协议的缺陷,攻击者可强制域控制器向指定的恶意服务器发起 NTLM 认证请求。具体通过调用EfsRpcOpenFileRaw函数,构造形如\\attacker-ip\C$的 UNC 路径,迫使 DC 的lsass.exe进程访问该路径,触发 NTLM 认证。
关键价值:无需预先获取任何凭证,即可诱导 DC 主动发起认证,为后续中继或降级攻击奠定基础。
2. PotitPetam 的扩展利用
PotitPetam 并非独立漏洞,而是 PetitPotam 的实战变种,其核心创新在于:
结合 NTLM 中继:将 DC 发起的 NTLM 认证请求中继到 AD 证书服务(AD CS),伪造域控制器证书,进而获取黄金票据或 DCSync 权限;
实施 NTLM 降级攻击:通过修改挑战值(Challenge)强制 DC 使用 NTLMv1 认证,降低哈希破解难度,同时绕过 EDR 检测。
二、攻击流程:从凭证窃取到域控接管
1. 环境侦察与目标定位
识别域控制器:通过nltest /dsgetdc:domain.com或net group "Domain Controllers" /domain获取 DC 列表;
确认认证协议:检查 DC 是否启用 NTLMv2 认证(默认启用),若启用则需后续降级处理。
2. 触发 NTLM 认证请求
调用 EFSRPC 函数:使用工具(如 Impacket 的ntlmrelayx.py或自定义脚本)向 DC 发送伪造的EfsRpcOpenFileRaw请求,构造 UNC 路径为攻击者控制的服务器地址(如\\192.168.1.100\share);
强制认证:DC 的lsass.exe进程访问该路径时,会自动发起 NTLM 认证,攻击者通过监听(如 Responder)捕获认证流量。
3. 中继或降级攻击
场景一:NTLM 中继到 AD CS
将捕获的 NTLM 认证请求中继到 AD CS 的 Web 注册页面(如http://dc-ip/certsrv);
利用 AD CS 的配置缺陷(如未启用扩展保护认证 EPA),伪造 DC 的计算机证书;
使用证书申请 TGT(票据授予票据),通过 DCSync 攻击导出域内所有用户哈希。
场景二:NTLM 降级攻击
在 Responder 中修改挑战值为1122334455667788,强制 DC 使用 NTLMv1 认证;
捕获 NTLMv1 哈希后,使用 Hashcat 或彩虹表破解(NTLMv1 的破解难度显著低于 NTLMv2);
若破解成功,使用哈希传递(PTH)登录 DC,或通过 DCSync 获取域管权限。
6、NoPAC 漏洞
NoPAC 漏洞(CVE-2021-42278 + CVE-2021-42287)是 Windows Active Directory 域环境中的高危权限提升漏洞,允许普通域用户通过构造伪造的 Kerberos 票据,将权限提升至域管理员级别。该漏洞结合了 AD 账户命名规则缺陷与 Kerberos 协议逻辑漏洞,无需预先获取高权限凭证即可实现域控接管。以下从技术原理、攻击流程、防御策略及实战案例四个维度展开深度解析:
一、技术原理:两个漏洞的协同攻击
1. CVE-2021-42278:机器账户命名绕过
核心缺陷:AD 域中机器账户的sAMAccountName属性应强制以$结尾(如DC01$),但实际未严格验证。攻击者可创建名为DC01(无$)的机器账户,冒充域控制器名称。
攻击价值:通过伪造与域控制器同名的机器账户,后续可触发 Kerberos 协议的自动重定向机制,将权限请求导向真实域控制器。
2. CVE-2021-42287:PAC 重新生成漏洞
协议逻辑漏洞:Kerberos 在处理跨域或无 PAC 的 TGT 请求时,KDC(域控制器)会重新生成特权属性证书(PAC)。攻击者可利用此特性,强制 KDC 基于伪造的身份信息生成高权限 PAC。
关键操作:通过S4U2Self协议(服务到服务认证)请求 TGS 票据时,KDC 会根据当前用户身份重新生成 PAC,而非直接复用 TGT 中的 PAC。
二、攻击流程:从账户伪造到域控接管
1. 创建伪造机器账户
步骤:使用普通域用户权限创建机器账户(如DC01),并清除其服务主体名称(SPN)以避免 AD 检测。
2. 伪造域控制器身份
账户更名:将伪造的机器账户sAMAccountName修改为与真实域控制器相同的名称(如DC01),但保留无$后缀。
触发重定向:KDC 在处理请求时,若发现DC01账户不存在,会自动搜索DC01$(真实域控制器账户),从而将权限请求转发至真实域控制器。
3. 获取高权限 TGT
构造无 PAC 的 TGT:通过跨域请求或强制 KDC 忽略 PAC,生成不包含权限信息的 TGT。
伪造 PAC 内容:在 TGS 请求中嵌入包含域管理员权限的伪造 PAC,利用 CVE-2021-42287 使 KDC 重新生成高权限 TGT。
4. S4U2Self 协议攻击
请求服务票据:使用伪造的 TGT 通过S4U2Self协议请求域控制器的服务票据(如 LDAP 服务),此时 KDC 会基于伪造的 PAC 生成包含域管理员权限的 ST。
命令示例(Rubeus 工具):
5. 域控接管
执行 DCSync 攻击:利用获取的域管理员权限,通过 Mimikatz 或 Impacket 导出域内所有用户哈希(包括 KRBTGT 账户)。
横向移动:使用黄金票据或白银票据实现无凭证访问,或通过 PTH(哈希传递)直接登录域控制器。
463

被折叠的 条评论
为什么被折叠?



