BloodHound CE 内部侦察指南:从低权限立足点到域管理员的攻击路径分析实战
2026/9/11 16:18:15 网站建设 项目流程

BloodHound CE 内部侦察指南:从低权限立足点到域管理员的攻击路径分析实战

【免费下载链接】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 中skills/conducting-internal-reconnaissance-with-bloodhound-ce技能文档撰写,围绕其完整侦察工作流展开,并辅以仓库内配套脚本与参考文档的源码级佐证。读者将掌握:用 Docker Compose 部署 BloodHound CE、使用 SharpHound v2 与 BloodHound.py 采集 AD 数据、导入图数据库后通过内置查询与自定义 Cypher 挖掘 ACL 滥用、Kerberoasting、委派滥用等攻击路径,最终将路径按可行性与隐蔽性排序并产出可交付的报告。

法律声明:本技能仅用于授权的安全测试与教育目的。对你不拥有或未经书面许可的系统进行未授权使用属于违法行为,可能触犯计算机欺诈相关法律。

概述:为什么用图论做 AD 侦察

BloodHound Community Edition(CE)是 SpecterOps 开发的现代 Web 化 Active Directory 侦察平台,其核心思想是用图论揭示 AD 环境中隐藏的关系与攻击路径。它将安全主体(用户、计算机、组、OU、GPO)建模为节点,把权限、组成员关系、会话、信任关系和 ACL 建模为边,从而把"这个低权限账号能否到达 Domain Admins"这一经典问题,转化为一次最短路径查询——这是人工审计极易遗漏的视角。

与旧版 BloodHound 相比,BloodHound CE 使用 PostgreSQL 后端配合专用图数据库(Neo4j),提供更优的性能、现代化的 Web UI 与增强的 API 能力(详见 映射攻击路径技能 中对容器化技术栈的描述:Go API 服务器 + PostgreSQL 关系存储 + Neo4j 图数据库)。数据采集由两类收集器完成:

  • SharpHound v2(面向 CE 的 .NET 收集器)采集本地 AD:对象、组成员关系、ACL、会话、本地管理员、信任、GPO、ADCS 证书服务与 LAPS 可读性,输出 ZIP 格式的 JSON;
  • AzureHound(跨平台 Go 二进制)通过 Microsoft Graph 与 Azure REST API 采集 Azure AD / Entra ID 数据,输出单个 JSON 文件。

红队通常的做法是:先拿到任意域内低权限立足点,再用 BloodHound CE 采集 AD 对象与关系,将攻击路径可视化,从被攻陷账号一路延伸到 Domain Admin 等高价值目标;也可用于验证加固效果——确认已知攻击路径是否已被封堵。

何时使用

  • 在安全评估中开展 AD 内部侦察(本技能的核心场景);
  • 按事件响应流程处理相关安全事件后的溯源分析;
  • 执行定期的安全测试或审计活动;
  • 通过动手测试验证安全控制措施的有效性。

前置条件

  • 熟悉红队概念与常用工具;
  • 具备可供安全执行的测试或实验环境;
  • Python 3.8+ 并安装所需依赖(neo4jbloodhoundrequests,参见 API 参考);
  • 对目标系统拥有明确的测试授权。

目标

  • 使用 Docker Compose 部署 BloodHound CE 服务器;
  • 使用 SharpHound v2 或 BloodHound.py 采集 AD 数据;
  • 将采集数据导入 BloodHound CE 进行图分析;
  • 识别从已控主体到 Domain Admins 的最短攻击路径;
  • 发现基于 ACL 的攻击路径、可 Kerberoast 的账号与委派滥用;
  • 执行自定义 Cypher 查询进行高级攻击路径分析;
  • 为参与方文档生成攻击路径报告。

MITRE ATT&CK 映射

本技能对应活动在 MITRE ATT&CK 框架中的技术映射如下(完整表格见 标准参考):

技术 ID技术名称战术
T1087.002账号发现:域账号发现
T1069.002权限组发现:域组发现
T1482域信任发现发现
T1615组策略发现发现
T1018远程系统发现发现
T1033系统所有者/用户发现发现
T1016系统网络配置发现发现

其中侦察活动的主体可归纳为T1069 权限组发现(枚举组间权限以构建攻击图),由 T1087(账号发现)、T1482(域信任发现)与 T1018(远程系统发现)支撑。

工作流:五阶段内部侦察

阶段 1:BloodHound CE 部署

  1. 使用 Docker Compose 部署 BloodHound CE:

    curl -L https://ghst.ly/getbhce -o docker-compose.yml docker compose pull docker compose up -d
  2. 访问 Web 界面:https://localhost:8080

  3. 使用默认管理员凭据登录(密码显示在 Docker 日志中):

    docker compose logs | grep "Initial Password"
  4. 立即修改默认管理员密码

实现细节:该 Compose 栈实际拉取 PostgreSQL、Neo4j 与 BloodHound API 服务(在 映射攻击路径技能 的前置条件小节中可见同一部署命令及其说明)。首次登录会生成随机初始密码,需在 Web UI 中重置。日志中的初始密码通过docker compose logs bloodhound | grep -i "Initial Password"提取。

阶段 2:使用 SharpHound v2 采集数据

将 SharpHound v2 传输到已攻陷的 Windows 主机后,按场景选择采集模式:

# 全量采集(所有方法) .\SharpHound.exe -c All --outputdirectory C:\Temp # DCOnly 采集(仅 LDAP,更隐蔽) .\SharpHound.exe -c DCOnly # 会话采集:循环映射已登录用户 .\SharpHound.exe -c Session --loop --loopduration 02:00:00 # 从指定域采集 .\SharpHound.exe -c All -d child.domain.local

采集模式说明(对应 工作流参考 中的隐蔽采集方案):

模式行为隐蔽性考量
All全量采集所有方法覆盖面最全,但会对多台主机产生探测流量
DCOnly仅通过 LDAP 查询域控不触碰主机(无会话/本地管理员数据),噪声最低
Session采集登录会话配合--loop --loopduration可在时间窗口内被动收集高层级用户的登录关系
指定域-d指定目标域多域环境中逐个覆盖所有可到达域

隐蔽场景的进阶用法(来自 工作流参考):

# 定向采集:指定容器/OU .\SharpHound.exe -c All --searchbase "OU=Servers,DC=domain,DC=local" # 会话循环:长时间被动枚举 .\SharpHound.exe -c Session --loop --loopduration 04:00:00 --loopinterval 00:05:00

备选方案:从 Linux 使用 BloodHound.py 采集

bloodhound-python -u user -p 'Password123' -d domain.local -ns 10.10.10.1 -c All

BloodHound.py(Python ingestor)支持allgrouplocaladminsessiontrustsobjectpropsacl等采集方法(见 API 参考),--zip参数可直接输出 ZIP 压缩结果。

  1. 将生成的 ZIP 文件外带至分析工作站。

阶段 3:数据导入与初步分析

  1. 通过 BloodHound CE Web 界面的File Ingest上传采集数据;
  2. 在界面中将已攻陷账号标记为Owned——这是后续路径查询({owned:true})的种子节点;
  3. 运行内置分析查询:
    • 到 Domain Admin 的最短路径(Shortest Path to Domain Admin)
    • 可达 DA 的可 Kerberoast 用户(Kerberoastable Users with Path to DA)
    • 可 AS-REP Roast 的用户(AS-REP Roastable Users)
    • 拥有 DCSync 权限的用户(Users with DCSync Rights)
    • 无约束委派的计算机(Computers with Unconstrained Delegation)

阶段 4:自定义 Cypher 查询

在 BloodHound CE 搜索栏中执行自定义 Cypher,覆盖内置查询之外的定制化分析:

// 从已控主体到 Domain Admins 的最短路径 MATCH p=shortestPath((n {owned:true})-[*1..]->(m:Group {name:"DOMAIN ADMINS@DOMAIN.LOCAL"})) RETURN p // 可 Kerberoast 且可达 DA 的用户 MATCH (u:User {hasspn:true}) MATCH p=shortestPath((u)-[*1..]->(g:Group {name:"DOMAIN ADMINS@DOMAIN.LOCAL"})) RETURN p // 存在 DA 成员会话的计算机 MATCH (c:Computer)-[:HasSession]->(u:User)-[:MemberOf*1..]->(g:Group {name:"DOMAIN ADMINS@DOMAIN.LOCAL"}) RETURN c.name, u.name // 基于 ACL 的攻击路径(GenericAll、WriteDACL、GenericWrite 等) MATCH p=(u:User)-[:GenericAll|GenericWrite|WriteDacl|WriteOwner|ForceChangePassword*1..]->(t) WHERE u.owned = true RETURN p // 可 DCSync 的用户 MATCH (u)-[:MemberOf*0..]->()-[:DCSync|GetChanges|GetChangesAll*1..]->(d:Domain) RETURN u.name, d.name // 启用 LAPS 但可被非管理员读取的计算机 MATCH (c:Computer {haslaps:true}) MATCH p=(u:User)-[:ReadLAPSPassword]->(c) RETURN p

查询要点(对应 API 参考 中的关键 Cypher 模式):

  • 路径查询使用shortestPath+ 变长关系[*1..],可自由扩展跳跃深度;
  • 节点属性过滤:hasspn(是否设置 SPN → Kerberoastable)、dontreqpreauth(是否免预认证 → AS-REP Roastable)、unconstraineddelegation(是否无约束委派)、haslaps(是否启用 LAPS);
  • 边类型过滤:GenericAll|GenericWrite|WriteDacl|WriteOwner|ForceChangePassword聚合 ACL 滥用边,DCSync|GetChanges|GetChangesAll聚合 DCSync 权限边。

扩展:混合路径分析:若目标同时包含本地 AD 与其同步的 Entra ID 租户,还可执行跨越本地/云边界的混合攻击路径查询,例如MATCH p=(u:User)-[:SyncedToEntraUser]->(:AZUser)-[:AZHasRole|AZGlobalAdmin*1..]->(r) RETURN p定位"本地用户同步至云端持有特权目录角色的账号"(详见 映射攻击路径技能 的 Step 7)。

阶段 5:攻击路径优先级排序

  1. 按下述标准对攻击路径评分:
    • 跳跃数(越短优先级越高);
    • 隐蔽性要求(避开高噪声技术,如需要触碰主机的 HasSession 边);
    • 每跳的工具可用性
    • 每一步被检测到的可能性
  2. 为最高优先级路径制定执行计划;
  3. 确定链条中每一步所需工具;
  4. 为每种技术规划 OPSEC 考量。

关键攻击路径类型

路径类型描述示例
ACL 滥用利用配置错误的 ACL对 DA 组拥有 GenericAll
Kerberoasting破解服务账号密码SPN 账号 → DA
AS-REP Roasting攻击未启用预认证的账号免预认证用户 → 密码破解
委派滥用利用无约束/约束委派计算机 → 模拟 DA
GPO 滥用修改应用到特权 OU 的 GPOGPO 写入 → 在 DA 上执行代码
会话劫持利用已攻陷主机上的 DA 会话管理员会话 → 令牌窃取

完整边/路径语义对照可参考 映射攻击路径技能 的 "Key Edge / Path Types" 表:MemberOf(嵌套组成员到达 DA)、GenericAll/WriteDacl(对对象完全/ACL 控制)、ForceChangePassword(重置他人密码)、HasSession(用户登录主机 → 窃取令牌)、ADCSESC1..ESC8(证书服务配置错误)等。

工具与资源

工具用途平台
BloodHound CEWeb 化图分析平台Docker
SharpHound v2AD 数据采集(.NET,面向 CE)Windows
BloodHound.pyAD 数据采集(Python)Linux
AzureHoundAzure AD / Entra ID 数据采集跨平台
PlumHound自动化 BloodHound 报告Python
BloodHound Query Library社区 Cypher 查询库Web

配套 Python 依赖(来自 API 参考):

安装用途
neo4jpip install neo4jNeo4j 图数据库驱动,执行 Cypher
bloodhoundpip install bloodhoundPython ingestor,AD 数据采集
requestspip install requestsBloodHound CE REST API 客户端

仓库配套脚本:从查询到报告的自动化

本技能目录下提供两个可直接用于实战的 Python 脚本,分别覆盖自动化侦察查询离线攻击路径分析报告

自动化侦察:agent.py

agent.py 是一个命令行侦察代理,既能调用bloodhound-python采集数据,也能直连 Neo4j 执行四类核心查询。核心用法:

# 先采集后分析(需提供 AD 凭据与 DC IP) python agent.py --collect --domain domain.local --ad-user user \ --ad-pass 'Password123' --dc-ip 10.10.10.1 \ --neo4j-uri bolt://localhost:7687 --neo4j-user neo4j \ --neo4j-password '<neo4j密码>' --output report.json # 仅分析已导入的数据 python agent.py --neo4j-uri bolt://localhost:7687 \ --neo4j-user neo4j --neo4j-password '<neo4j密码>' --output report.json

脚本内部封装了与 SKILL.md 阶段 4 同源的 Cypher 逻辑,可从源码层面印证查询实现:

  • query_shortest_path_to_da()MATCH p=shortestPath((u:User)-[*1..]->(g:Group {name:$group})),额外过滤u.enabled = true,按跳跃数升序返回前 10 个用户;
  • query_kerberoastable_users()WHERE u.hasspn = true AND u.enabled = true,同时返回serviceprincipalnamesadmincount,按管理员计数降序排序;
  • query_unconstrained_delegation()WHERE c.unconstraineddelegation = true,附带操作系统信息;
  • query_as_rep_roastable()WHERE u.dontreqpreauth = true AND u.enabled = true

collect_bloodhound_data()底层通过subprocess调用bloodhound-python -d <domain> -u <user> -p <pass> -ns <dc_ip> -c <method> --zip,设置了 300 秒超时,并会对FileNotFoundError(未安装 bloodhound)与超时分别返回结构化错误——这与 SKILL.md 阶段 2 的 Linux 采集命令完全对应,且自动附加了--zip参数。

离线分析:process.py

process.py 无需图数据库,直接读取 BloodHound 导出的 JSON 数据(用户与计算机文件)生成优先级报告:

python process.py bloodhound_users.json [bloodhound_computers.json]

脚本会统计用户侧指标(总数、启用数、Kerberoastable、AS-REP Roastable、AdminCount、PasswordNotRequired)与计算机侧指标(无约束/约束委派、LAPS 启用/禁用、不受支持操作系统、域控清单),并按固定优先级输出攻击向量清单:Kerberoastable 账号 → AS-REP Roastable 账号 → 无约束委派滥用 → ACL 路径 → GPO 修改路径 → 不受支持操作系统利用。analyze_computers()中不受支持操作系统的判定覆盖2003/2008/xp/vista/windows 7关键词,可直接用于识别过时主机。

两个脚本的输出结构,均与 报告模板 中的字段(Kerberoastable、AS-REP Roastable、Unconstrained Delegation、DCSync Rights、Unsupported OS)对齐,便于一键生成交付物。

报告与文档化

报告模板 提供了标准化的交付骨架,包含四个核心区块:

  1. 参与方详情:活动名称、目标域、采集日期、BloodHound CE 版本、SharpHound 版本;
  2. 采集摘要:用户、计算机、组、GPO、OU、域、信任、会话的计数;
  3. 已识别攻击路径:按路径描述、跳跃数、起始/终止节点、风险等级逐条记录;
  4. 高价值发现:Kerberoastable、AS-REP Roastable、无约束委派、DCSync 权限、不受支持操作系统;
  5. 修复优先级:按 Critical / High / Medium 分级给出修复建议。

完整工作流总览(部署 → 采集 → 导入 → 分析 → 攻击规划 → 报告)可参考 工作流参考 中的结构图。

验证标准

完成本技能后应逐项核对:

  • BloodHound CE 已部署且可访问;
  • 已从范围内所有域采集 SharpHound v2 数据;
  • 数据成功导入 BloodHound CE;
  • 已控主体已在界面中标记为 Owned;
  • 已识别到 Domain Admin 的最短路径;
  • 已记录基于 ACL 的攻击路径;
  • 已列出可 Kerberoast 与 AS-REP Roast 的账号;
  • 已执行自定义 Cypher 查询进行高级分析;
  • 攻击路径已按可行性与隐蔽性排序;
  • 已生成包含所有路径与证据的报告。

结语

BloodHound CE 把 AD 侦察从"逐项枚举"升级为"图论寻径":先用 SharpHound v2(Windows)或 BloodHound.py(Linux)完成低噪声数据采集,再借助内置查询与自定义 Cypher 从已控主体出发定位通往 Domain Admins 的最短路径,最后依据跳跃数与隐蔽性对路径排序并形成报告。配合本仓库的 agent.py、process.py 与 报告模板,一个从立足点到交付物的完整侦察闭环即可在授权环境中落地。请始终牢记:仅在拥有明确书面授权的环境中执行此类侦察活动。

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询