BloodHound是什么,为什么它能解决权限路径分析难题
在大型Active Directory环境中,域内对象之间的关系极其复杂,用户属于哪些组、某台计算机上有哪些会话、某个OU上委派了什么控制权限,这些信息分散在不同的协议和接口里。传统的渗透测试人员往往只能靠手工枚举,用PowerView一条条查询组成员关系,再凭经验在大脑里拼凑攻击路径。这种方式效率极低,而且一旦域内对象数量达到几千上万个,人工分析几乎不可能穷尽所有可能性。
BloodHound的核心思路是把整个域抽象成一张图。它通过LDAP查询、Session枚举、LocalAdmin枚举等方式采集数据,把用户、组、计算机、域、GPO、容器等作为节点,把MemberOf、AdminTo、HasSession、AllExtendedRights等关系作为边,导入Neo4j图数据库后,就可以用图遍历算法自动计算任意两个节点之间的最短路径。换句话说,它把原本需要渗透测试者脑补的攻击链,变成了一条条清晰可见的可视化路径。
举个例子,当一个普通域用户想要获取Domain Admins权限时,BloodHound可能给出这样一条路径:该用户对某个组拥有GenericAll权限,而该组的成员对某台服务器有本地管理员权限,这台服务器上当前登录着一名域管理员。这种跨多层的间接关系,手工分析很难发现,但对BloodHound来说只是一次图查询而已。
需要强调的是,BloodHound本身是一款防御与攻击双用途的工具。红队用它快速定位攻击路径,蓝队同样可以用它审计域内权限配置,找出不该存在的过度授权。理解它的原理和用法,对攻防双方都有价值。

数据采集:SharpHound的部署与常用参数详解
BloodHound的数据采集依赖SharpHound,它是用C#编写的采集器,编译后是一个独立的exe文件,也可以通过PowerShell脚本方式加载。采集器不需要安装任何额外依赖,直接在域内任意一台机器上以域用户身份运行即可,它会自动探测当前域并开始收集数据。
最基本的采集方式是执行默认的全量收集,命令非常简单:
# 使用exe方式执行全量采集 SharpHound.exe -c All # 使用PowerShell方式 Import-Module .\SharpHound.ps1 Invoke-BloodHound -CollectionMethod All
其中CollectionMethod参数决定了采集的范围,常用的值包括:Default只采集基础的组和信任关系;Session枚举当前各主机上的登录会话;LocalAdmin枚举各主机的本地管理员组成员;ACL采集所有对象的访问控制列表;GPOLocalGroup通过GPO采集本地组配置;ObjectProps采集对象属性;All则包含以上全部。实战中一般建议直接用All,因为会话和本地管理员信息对路径计算非常关键,但这两类数据需要向域内所有主机发起查询,动静相对较大,隐蔽需求高的场景可以分批采集。
采集完成后会在当前目录生成一个压缩的JSON文件包,例如时间戳命名的zip文件,里面包含computers.json、users.json、groups.json等多个数据文件。把这个文件直接拖进BloodHound界面右侧的Upload Data按钮即可导入。增量采集时,也可以使用Loop参数配合采集间隔做周期性收集,方便长期监控域内权限变化。
蓝队视角下,SharpHound的采集行为本身就有一定的检测特征:它会大量调用LDAP查询和SAMR接口枚举会话,域控上会出现明显的查询流量。因此从防御角度,可以关注短时间内对LDAP的大规模分页查询行为,以及对大量主机发起的Session枚举请求,这些往往就是采集器在工作。
核心界面功能:路径查询、节点信息与边缘类型
导入数据后,BloodHound左侧的分析面板提供了一系列预置查询,包括“Map Domain Shortest Paths to Domain Admins”“Find All Paths to Domain Admins”“Shortest Path to High Value Targets”“Find Workstations where Domain Users can RDP”等。其中最常用的就是到Domain Admins的最短路径查询,点击后BloodHound会自动在图上高亮出所有可行的攻击链。
选中任意节点后,右侧会展示该对象的详细属性,比如用户的SID、SPN、是否启用了预认证、所属组等。节点下方的Outbound Control Rights和Inbound Control Rights非常有用,前者列出该用户能控制哪些对象,后者列出谁能控制该用户。例如发现某个普通账号的Inbound列表里出现了IT部门的一个二级管理员组,就意味着拿下了那个组的任何成员就等于拿下了这个账号。
节点之间的关系用不同的边表示,理解这些边的含义是正确利用BloodHound的前提。常见的边类型及其利用方式如下:
| 边类型 | 含义 | 利用方式 |
|---|---|---|
| MemberOf | 用户或组属于某个组 | 间接继承目标组的所有权限 |
| AdminTo | 对目标主机有本地管理员权限 | 可远程执行命令、提取凭据 |
| HasSession | 目标用户在主机上有登录会话 | 抓取内存凭据获取该用户身份 |
| AllExtendedRights | 对对象拥有扩展控制权 | 可重置密码、修改DCSync相关属性 |
| GenericAll | 对对象的完全控制权 | 可重置密码、添加组成员 |
| WriteDacl | 可修改对象DACL | 给自己授予任意权限 |
| ForceChangePassword | 可强制重置目标密码 | 直接改密码接管账号 |
| GetChangesAll | 具备目录复制权限 | 执行DCSync导出全部哈希 |
| AllowedToDelegate | 可约束委派到目标服务 | 利用委派伪造身份访问服务 |
查询路径时还有一个实用技巧:在图上任意节点右键选择Set as Start,再选另一个节点Set as End,然后执行Find Shortest Path,即可查询任意两点间的路径。这在验证某个具体账号能否打到特定高价值目标时非常方便。此外,右键节点还可以执行Mark as High Value或Mark as Owned操作,把已拿下和需要重点保护的资产标记出来,路径查询会自动围绕这些标记展开。
实战案例:从普通域用户到Domain Admin的完整路径
假设在一次授权渗透测试中,我们通过钓鱼拿到一个普通域账号dev_ops的凭据。先在受控机器上运行SharpHound全量采集,导入BloodHound后执行到Domain Admins的最短路径查询,很快发现了一条三级跳的路径。
具体来说,dev_ops属于DevOps组,而这个组的成员对一台名为WEB-PROD-01的服务器拥有GenericAll权限,意味着可以完全接管这台机器;同时HasSession的边显示域管理员账号adm_jerry当前正登录在WEB-PROD-01上。于是攻击链就非常清晰了:先用GenericAll对机器对象执行基于资源的约束委派攻击拿到SYSTEM权限,再用mimikatz从内存中抓取adm_jerry的凭据,最后验证该凭据对域控有效,整个域就到手了。
# 利用GenericAll对机器对象执行基于资源的约束委派(RBCD)
# 1. 设置 dev_ops 对 WEB-PROD-01 机器账户的 msDS-AllowedToActOnBehalfOfOtherIdentity
rbcd.py -delegate-to 'WEB-PROD-01$' -delegate-from 'evil_svc' -action write \
'domain.local/dev_ops:Password123'
# 2. 为 evil_svc 账户配置SPN后请求服务票据并模拟管理员访问
getST.py -spn cifs/WEB-PROD-01.domain.local -impersonate administrator \
'domain.local/evil_svc:Password123'
这个案例说明了BloodHound的价值:dev_ops到Domain Admin之间的三层关系分散在组策略、机器ACL和会话信息三个完全不同的数据源里,任何单独一项看起来都不起眼,但组合起来就是一条完整的提权链。没有图数据库的辅助,靠人工翻查几乎不可能发现这种跨对象的间接路径。
蓝队视角:如何利用BloodHound加固域内权限配置
BloodHound绝不仅仅是攻击工具,防御人员完全可以用同样的数据分析自己域内的权限暴露面。建议定期采集数据并重点关注几类高风险查询结果:非管理员用户能RDP到工作站的列表、能执行DCSync的账号数量、拥有本地管理员权限的组员规模、以及到高价值目标的路径数量。
常见的加固动作包括:清理历史遗留的过度授权,很多环境中二级管理员组长期没人维护,导致权限层层扩散;限制Domain Admin仅登录域控,避免会话出现在业务服务器上被抓取凭据;对包含敏感权限的组启用受保护用户策略;利用层级标记把核心资产标记为High Value,持续监控指向这些节点的路径变化。
检测层面,可以部署定期的SharpHound采集任务作为基线对比工具,每次采集后对比路径数量的增减。如果某次变更后指向Domain Admins的路径突然增多,就能第一时间发现配置错误。同时也要监控攻击者可能的采集行为,例如LDAP查询频率异常、SAMR枚举海量主机等流量特征,在侦察阶段就发现异常。
总的来说,BloodHound把复杂的域权限关系变成了直观可分析的图结构,攻方用它找路,守方用它堵路。掌握它的采集、查询和分析方法,再结合对各类边缘类型背后攻击手法的理解,无论是红队评估还是域安全加固,都能做到心中有图、有的放矢。
BloodHound权限路径分析域渗透修改时间:2026-09-07 23:33:41