ADCollector枚举输出全解:红队新手必知的30+类AD攻击面解读清单
【免费下载链接】ADCollectorA lightweight tool to quickly extract valuable information from the Active Directory environment for both attacking and defending.项目地址: https://gitcode.com/gh_mirrors/ad/ADCollector
ADCollector 是一款轻量级 Active Directory 信息枚举工具,用于快速提取域环境中最有价值的信息,同时服务于攻击(Recon)与防御两侧。它不追求"全量枚举",而是聚焦于高价值目标的关键属性、ACL 与配置,非常适合在企业大规模环境中低噪音地摸清 AD 攻击面。
跑完一次完整枚举后,终端会按标题分块输出 30 多类结果——从"基础 LDAP 信息"到"证书模板"。新手最容易卡在:每一块输出到底意味着什么?能发起什么攻击?管理员该修什么?
下面这份清单按输出顺序逐类解读,配合攻击手法与防御建议,帮你 10 分钟读懂全部结果。🎯
输出是如何生成的:先看懂 3 个核心机制
在逐条解读之前,建议先理解 ADCollector 的三大组件,这样每类输出的来源就一目了然:
| 组件 | 文件路径 | 作用 |
|---|---|---|
| 搜索条件构建 | BuildSearchString.cs | 把每类枚举翻译成 LDAP 过滤器 + 返回属性列表 |
| 采集器 | Collector/ 目录 | 按搜索字符串从域控/SYSVOL 拉取数据 |
| 展示器 | Display/ 目录 | 把结果格式化打印,每一类的Title就是你看到的输出标题 |
完整枚举的入口在 ADCollector.cs 的Run()方法:它依次执行 LDAP 基础信息、信任关系、LDAP 对象枚举、嵌套组与 GPO、ACL 扫描、ADCS、SYSVOL/SMB、GPP 密码、AD DNS 九大步骤——这也是你阅读输出的阅读顺序。
💡 每一类输出都由三元组驱动:
Title(输出标题)+Filter(LDAP 过滤器)+ReturnAttributes(提取属性),定义见 SearchString/LDAPSearchString.cs。
第一类:域级输出(第 1~8 类)
这类输出描述的是"域本身",攻击者用它规划横向路径,防守者用它确认基线。
| # | 输出标题 | 攻击含义 | 防御动作 |
|---|---|---|---|
| 1 | Basic LDAP Information | LDAP 支持的版本、SASL 机制、域/林/DC 功能级别,判断能否打协议层漏洞 | 关闭过期 LDAP 版本与弱加密机制 |
| 2 | Domain Trusts | 列出所有域/林信任、SID、SID Filtering 状态;SID Filtering 关闭 = 可尝试 SID History 注入 | 开启 SID Filtering,清理无用信任 |
| 3 | Domain Controllers (GC/RODC) | 定位域控;RODC 段还会列出可管理该 RODC 的组——误配可直接拿下 RODC 密码 | 严控 RODC Admins 组成员 |
| 4 | Privileged Users (DA/EA) | 域管理员、企业管理员组成员,Kerberoasting 与提权的第一目标 | 审计 DA/EA 成员,落实最小化 |
| 5 | Unconstrained Delegation | 非 DC 的"无约束委派"账户:拿下它就能以他人身份重放票据 | 改用约束委派或撤销userAccountControl16777216 位 |
| 6 | Constrained Delegation (S4U2Self/S4U2Proxy) | 配置约束委派的服务账户,可尝试 S4U2Self 票据伪造 | 只委派到确需的服务 SPN |
| 7 | Resources-based Constrained Delegation | 资源端配置的 rBCD,可成为委派链跳板 | 审查msDS-AllowedToActOnBehalfOfOtherIdentity属性 |
| 8 | MSSQL/Exchange/RDP/PS Remoting SPN 账户 | 服务账号 SPN 清单,Kerberoasting 候选名单 | 使用 gMSA 或长随机密码 |
🔑 信任关系输出由原生 API
DsEnumerateDomainTrusts直接获取,解析逻辑在 NativeMethod.cs 与 Objects/Trust.cs。
第二类:账户与凭据类(第 9~15 类)
这是"含金量最高"的一组,直接指向可离线破解或可滥用的凭据。
| # | 输出标题 | 攻击含义 | 防御动作 |
|---|---|---|---|
| 9 | User accounts with SPN & password does not expire | SPN + 永不过期密码 = 经典 Kerberoasting 组合拳 | 密码定期轮换,SPN 账户与高权限解耦 |
| 10 | Protected Users | 受保护用户清单:攻击者用它"排除",防守者用它核对覆盖范围 | 将特权账户全部加入 Protected Users |
| 11 | Confidential attributes | 标记了敏感属性(如描述、电话)的账户,信息泄露风险点 | 审查msDS-AllowedToDelegateTo等敏感字段 |
| 12 | AS-REP Roast (DontRequirePreAuth) | 免预认证账户 = 无需任何交互即可离线爆破密码(AS-REP Roasting) | 撤销DONT_REQ_PREAUTH标志 |
| 13 | AdminSDHolder protected accounts | 被 AdminSD 机制保护的对象,通常即高价值特权组 | 监控 AdminSDHolder ACL 变更 |
| 14 | Sensitive & Not delegate accounts | 账户标记敏感却未启用委派保护(或反之),配置矛盾点 | 统一账户敏感位策略 |
| 15 | User Credentials stored in LDAP | 明文/弱保护存放在 LDAP 属性中的凭据,属于高危配置 | 立即迁移至 LAPS/vGMSA 等方案 |
🧩 "用户凭据存于 LDAP" 是 v3.0.1 新增的枚举项,说明作者持续把新攻击面纳入工具——这类"输出标题"往往就是新攻击技术的早期信号。
第三类:域策略与 ACL 类(第 16~22 类)
| # | 输出标题 | 攻击含义 | 防御动作 |
|---|---|---|---|
| 16 | Domain attributes (MAQ/minPwdLength/maxPwdAge/lockoutThreshold) | 密码策略画像:弱策略意味着在线爆破可行性大增 | 对齐密码策略基线(长度/复杂度/锁定) |
| 17 | Kerberos Policy | 票据生命周期等 Kerberos 全局参数,配合委派攻击窗口评估 | 审查票据最大寿命配置 |
| 18 | Interesting ACL on the Domain Object | 域对象上的危险 ACE(GenericAll、WriteDacl 等),可解析出 GUID 含义;能写域对象 = 潜在域控 | 用工具持续扫描"有趣 ACL" |
| 19 | Interesting ACL on GPOs | 可编辑 GPO 的账户 = 可植入脚本执行(GPO 劫持攻击) | 收紧 GPO 容器 ACL |
| 20 | LAPS Password View Access | 有权限读取 LAPS 本地管理员密码的账户——等于拿到目标机器的管理员口令 | 严格限定 LAPS 属性读权限 |
| 21 | Machine Owner | 对象msDS-OwnerSID指向的高价值账户,所有权即控制 | 审计计算机账户所有者 |
| 22 | Privileges Rights defined in Group Policies | GPO 中定义的 SeXxxRight 特权分配,如 SeDebugPrivilege 滥用 | 最小化特权指派 |
🛠️ ACL 中 GUID 的自动解析(Extended Rights → 权限名)实现在 Rights.cs 与 Utilities/SchemaUtil.cs,所以输出里看到的"User-Force-Change-PWD"这类名字而非 GUID,正是这层翻译的结果。
第四类:SYSVOL / SMB 类(第 23~24 类)
这一类不走 LDAP,而是读取域控 SYSVOL 共享(因此非域环境需 SYSVOL 访问权限):
| # | 输出标题 | 攻击含义 | 防御动作 |
|---|---|---|---|
| 23 | SYSVOL 敏感文件 | 扫描 SYSVOL 中含敏感内容的配置文件 | 定期清理 SYSVOL 残留 |
| 24 | Group Policy Preference Passwords (GPP cpassword) | GPP 明文密码 cpassword 文件——可直接解出域内账户口令 | 迁移 GPP 密码为 LAPS,删除旧 cpassword 文件 |
GPP 扫描逻辑见 Collector/CollectSYSVOL.cs 与 ADCollector.cs 中的GetGPP():先枚举 XML 文件清单,再按cpassword属性过滤匹配。若你的环境启用了加固 UNC 策略导致连不上 SYSVOL,参考 README.md 中的reg add修复命令。
第五类:GPO 与组关系类(第 25~27 类)
| # | 输出标题 | 攻击含义 | 防御动作 |
|---|---|---|---|
| 25 | Effective GPOs on the current user/computer | 当前用户/计算机实际生效的 GPO(含安全过滤、WMI 过滤),判断"我在域里的真实位置" | 定期核对 GPO 链接与过滤规则 |
| 26 | Nested Group Membership | 嵌套组展开后的完整组成员——揪出"隐藏"在多层组里的域管 | 扁平化特权组结构或定期审计嵌套 |
| 27 | Restricted Group | GPO 受限组机制可静默添加本地管理员,攻击者可用它持久化 | 审查Restricted Groups配置 |
📌 这一类也支持单目标模式:
--NGAGP <用户名>只查某账户的嵌套组与生效 GPO,--DACL <DN>只查某对象 DACL,见 Program.cs 的分发逻辑。
第六类:ADCS 证书服务类(第 28~29 类)
ADCS 是近年 AD 攻防的"新宠",ADCollector 用两个专门开关覆盖:--ADCS与--TEMPLATES。
| # | 输出标题 | 攻击含义 | 防御动作 |
|---|---|---|---|
| 28 | Certificate Services | CA 配置(SAN 验证、注册权限等),判断是否存在 CVE-2022-26923/26943 类条件 | 加固 CA 配置,及时打补丁 |
| 29 | Interesting Certificate Templates | 危险模板(ESC1~ESC10 规则):可申请含 SAN 且低权限可注册的模板 = 伪造任意证书提权 | 用证书模板审计工具复核 |
数据对象定义在 Objects/ADCS.cs 与 Objects/CertificateTemplate.cs,展示层 Display/DisplayADCS.cs 会按"是否危险模板"分组呈现。
第七类:DNS、模式与主机类(第 30~34 类)
| # | 输出标题 / 开关 | 攻击含义 | 防御动作 |
|---|---|---|---|
| 30 | ADIDNS Records(--ADIDNS) | 从 AD 集成 DNS 中挖 SRV 等记录,定位隐藏域控与服务 | 控制 DNS 区域写权限 |
| 31 | Schema Attribute Count(--SCHEMA) | 模式属性计数,用于对比基线、发现异常扩展属性 | 监控模式变更 |
| 32 | Session/User/LocalGroup 枚举(--SessionEnum等) | 在目标主机枚举会话、用户、本地组成员,横向侦察三连 | 限制远程管理接口 |
| 33 | ACL Scan(--ACLScan <身份>) | 全域扫描该身份可写的对象,输出"我能控制谁"的清单 | 高危,仅限授权评估 |
| 34 | Interesting descriptions on user objects | 用户对象描述字段中的敏感信息(口令、系统名常写这里) | 清理描述字段,启用 DLP |
红队新手的阅读顺序(实战清单)
拿到完整输出后,建议按这个优先级阅读:
- 先找明文密码:GPP cpassword(第 24 类)与 LDAP 凭据(第 15 类)——命中即"速通"
- 再看委派:无约束/约束/资源委派(第 5~7 类)——可写票据路径
- 然后看 Roast 清单:AS-REP Roast(第 12 类)与 SPN 账户(第 8~9 类)——离线爆破候选
- 接着看 ACL:域对象、GPO、LAPS 的"有趣 ACL"(第 18~22 类)——权限边界即攻击边界
- 最后看 AD DNS 与 ADCS(第 28~30 类)——发现非常规攻击入口
📋 防守者可以把这份清单反过来用:每一类输出非空,就意味着对应风险项需要在整改单上打勾。
常见使用问题 FAQ
Q1:输出里为什么有的段落是空的?ADCollector 对部分采集做了前置判断(如 SYSVOL 连不上会跳过 SMB 段),且"无结果"本身代表该类风险不存在,属于正常现象。
Q2:想在特定 OU 下缩小范围怎么办?使用--OU "OU=IT,DC=domain,DC=local",配合--ACLScan可对指定 OU 做定向权限扫描,参数说明见 README.md 的 Usage 一节。
Q3:ADCollector 能替代 PowerView 吗?不能。它定位是"快速侦察":自动化提取高价值信息,减少早期阶段的思考成本与流量;深度枚举仍需后续人工定向排查。定位说明见 README.md。
Q4:从非域加入机器运行报错 SYSVOL 访问失败?说明启用了加固 UNC 策略,按 README 给出的注册表命令放行\\*\SYSVOL即可。
总结
ADCollector 的 30+ 类输出本质上是一张AD 攻击面检查表:域级输出回答"域长什么样",账户凭据类回答"谁能被直接拿下",策略 ACL 类回答"权限边界在哪里",ADCS/DNS 类回答"还有没有非常规入口"。
- 红队:按上面 5 步阅读顺序,20 分钟内锁定最短路
- 蓝队:按输出标题逐项建立整改基线,让"输出为空"成为常态
源码入口速查:
- 完整枚举流程:ADCollector.cs
- 输出标题定义:BuildSearchString.cs
- 搜索结果展示层:Display/ 目录
- 扩展权限 GUID 解析:Rights.cs
把这份清单打印出来,对照你手里的 ADCollector 输出逐块核对——读懂输出,才算真正读懂 AD 攻击面。🚀
【免费下载链接】ADCollectorA lightweight tool to quickly extract valuable information from the Active Directory environment for both attacking and defending.项目地址: https://gitcode.com/gh_mirrors/ad/ADCollector
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考