域渗透工具SharpHound原理分析
字数 1856 2025-08-06 12:20:45

SharpHound原理分析与使用指南

1. SharpHound概述

SharpHound是BloodHound的官方数据收集工具,使用C#编写,通过调用Windows原生API和LDAP命名空间函数从域控制器和已加入域的Windows系统中收集数据。

2. 核心功能

SharpHound主要收集以下类型的数据:

  1. 域信息收集

    • 域用户、组、计算机等对象信息
    • 组策略对象(GPO)信息
    • 组织单位(OU)结构
  2. 权限关系收集

    • 用户对计算机的本地管理员权限
    • 组嵌套关系
    • 委派权限
  3. 会话信息收集

    • 当前登录会话
    • 远程桌面会话
    • 网络共享会话

3. 工作原理

3.1 LDAP查询机制

SharpHound通过LDAP协议与域控制器通信,执行以下关键查询:

  1. 基础域信息查询

    • 查询域根目录信息
    • 获取域SID和域功能级别
  2. 对象枚举

    // 使用DirectorySearcher进行LDAP查询的示例
    DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain);
    DirectorySearcher searcher = new DirectorySearcher(entry);
    searcher.Filter = "(objectClass=user)";
    searcher.PropertiesToLoad.Add("samAccountName");
    searcher.PropertiesToLoad.Add("objectSid");
    
  3. 特殊属性收集

    • msDS-AllowedToDelegateTo (约束委派)
    • msDS-AllowedToActOnBehalfOfOtherIdentity (基于资源的约束委派)
    • userAccountControl (账户属性标志)

3.2 本地权限收集

  1. 本地管理员枚举

    • 通过NetLocalGroupGetMembers API获取本地管理员组成员
    [DllImport("netapi32.dll", CharSet = CharSet.Unicode)]
    public static extern int NetLocalGroupGetMembers(
        string servername,
        string localgroupname,
        int level,
        out IntPtr bufptr,
        int prefmaxlen,
        out int entriesread,
        out int totalentries,
        IntPtr resumehandle);
    
  2. 远程注册表查询

    • 访问远程系统的注册表获取本地组信息

3.3 会话收集技术

  1. NetSessionEnum API

    [DllImport("netapi32.dll", CharSet = CharSet.Unicode)]
    public static extern int NetSessionEnum(
        string servername,
        string UncClientName,
        string username,
        int level,
        out IntPtr bufptr,
        int prefmaxlen,
        out int entriesread,
        out int totalentries,
        ref int resume_handle);
    
  2. WMI查询

    • 通过Win32_LoggedOnUser类获取登录会话

4. 使用方法

4.1 基本命令

# 收集所有数据
SharpHound.exe --CollectionMethod All

# 指定收集方法
SharpHound.exe -c Group,LocalAdmin

# 从文件读取计算机列表
SharpHound.exe -c Session --ComputerFile computers.txt

4.2 常用参数

参数 描述
-c, --CollectionMethod 指定收集方法 (Default: Default)
-d, --Domain 指定目标域
--DomainController 指定域控制器
--Stealth 使用隐蔽模式
--Loop 循环收集会话信息
--LoopDuration 循环持续时间 (默认: 00:00:00)
--LoopInterval 循环间隔 (默认: 00:05:00)

4.3 收集方法选项

  1. Default: 等同于ACL, ObjectProps, Container, GPOLocalGroup
  2. All: 所有收集方法
  3. Group: 收集组和组成员关系
  4. LocalAdmin: 收集本地管理员数据
  5. RDP: 收集远程桌面用户数据
  6. DCOM: 收集DCOM用户数据
  7. Session: 收集会话数据
  8. Trusts: 收集域信任关系
  9. ACL: 收集ACL信息
  10. Container: 收集容器数据
  11. ObjectProps: 收集对象属性
  12. LoggedOn: 收集登录会话数据
  13. GPOLocalGroup: 收集GPO本地组数据
  14. PSRemote: 收集PowerShell远程用户数据

5. 输出与数据处理

  1. 输出文件

    • 默认生成时间戳命名的ZIP文件
    • 包含JSON格式的数据文件
  2. 数据导入BloodHound

    neo4j start
    bloodhound
    
    • 在BloodHound界面中导入生成的ZIP文件

6. 防御与检测

6.1 检测SharpHound活动

  1. LDAP查询特征

    • 大量LDAP查询请求
    • 查询敏感属性如msDS-AllowedToDelegateTo
  2. API调用特征

    • NetLocalGroupGetMembers调用
    • NetSessionEnum调用
  3. 网络特征

    • 来自单一主机的多台计算机的SMB/WMI连接

6.2 防御措施

  1. 监控与警报

    • 监控异常LDAP查询模式
    • 设置API调用警报阈值
  2. 权限限制

    • 限制普通用户查询敏感LDAP属性的权限
    • 实施本地管理员权限最小化原则
  3. BloodHound防御

    • 定期运行BloodHound分析自身域环境
    • 修复识别出的危险权限路径

7. 高级技巧

  1. 隐蔽收集

    SharpHound.exe -c All --Stealth --DomainController dc01.domain.com
    
  2. 绕过防护

    • 使用合法管理账户执行收集
    • 降低查询频率
    • 分散收集任务
  3. 自定义收集

    • 通过修改SharpHound源码定制收集逻辑
    • 添加新的属性收集功能

8. 总结

SharpHound作为BloodHound生态系统的关键组件,通过系统化的数据收集为域渗透测试提供了全面的攻击路径可视化。理解其工作原理不仅有助于有效使用该工具,也能帮助防御者更好地检测和防范此类信息收集活动。

SharpHound原理分析与使用指南 1. SharpHound概述 SharpHound是BloodHound的官方数据收集工具,使用C#编写,通过调用Windows原生API和LDAP命名空间函数从域控制器和已加入域的Windows系统中收集数据。 2. 核心功能 SharpHound主要收集以下类型的数据: 域信息收集 : 域用户、组、计算机等对象信息 组策略对象(GPO)信息 组织单位(OU)结构 权限关系收集 : 用户对计算机的本地管理员权限 组嵌套关系 委派权限 会话信息收集 : 当前登录会话 远程桌面会话 网络共享会话 3. 工作原理 3.1 LDAP查询机制 SharpHound通过LDAP协议与域控制器通信,执行以下关键查询: 基础域信息查询 : 查询域根目录信息 获取域SID和域功能级别 对象枚举 : 特殊属性收集 : msDS-AllowedToDelegateTo (约束委派) msDS-AllowedToActOnBehalfOfOtherIdentity (基于资源的约束委派) userAccountControl (账户属性标志) 3.2 本地权限收集 本地管理员枚举 : 通过NetLocalGroupGetMembers API获取本地管理员组成员 远程注册表查询 : 访问远程系统的注册表获取本地组信息 3.3 会话收集技术 NetSessionEnum API : WMI查询 : 通过Win32_ LoggedOnUser类获取登录会话 4. 使用方法 4.1 基本命令 4.2 常用参数 | 参数 | 描述 | |------|------| | -c, --CollectionMethod | 指定收集方法 (Default: Default) | | -d, --Domain | 指定目标域 | | --DomainController | 指定域控制器 | | --Stealth | 使用隐蔽模式 | | --Loop | 循环收集会话信息 | | --LoopDuration | 循环持续时间 (默认: 00:00:00) | | --LoopInterval | 循环间隔 (默认: 00:05:00) | 4.3 收集方法选项 Default : 等同于ACL, ObjectProps, Container, GPOLocalGroup All : 所有收集方法 Group : 收集组和组成员关系 LocalAdmin : 收集本地管理员数据 RDP : 收集远程桌面用户数据 DCOM : 收集DCOM用户数据 Session : 收集会话数据 Trusts : 收集域信任关系 ACL : 收集ACL信息 Container : 收集容器数据 ObjectProps : 收集对象属性 LoggedOn : 收集登录会话数据 GPOLocalGroup : 收集GPO本地组数据 PSRemote : 收集PowerShell远程用户数据 5. 输出与数据处理 输出文件 : 默认生成时间戳命名的ZIP文件 包含JSON格式的数据文件 数据导入BloodHound : 在BloodHound界面中导入生成的ZIP文件 6. 防御与检测 6.1 检测SharpHound活动 LDAP查询特征 : 大量LDAP查询请求 查询敏感属性如msDS-AllowedToDelegateTo API调用特征 : NetLocalGroupGetMembers调用 NetSessionEnum调用 网络特征 : 来自单一主机的多台计算机的SMB/WMI连接 6.2 防御措施 监控与警报 : 监控异常LDAP查询模式 设置API调用警报阈值 权限限制 : 限制普通用户查询敏感LDAP属性的权限 实施本地管理员权限最小化原则 BloodHound防御 : 定期运行BloodHound分析自身域环境 修复识别出的危险权限路径 7. 高级技巧 隐蔽收集 : 绕过防护 : 使用合法管理账户执行收集 降低查询频率 分散收集任务 自定义收集 : 通过修改SharpHound源码定制收集逻辑 添加新的属性收集功能 8. 总结 SharpHound作为BloodHound生态系统的关键组件,通过系统化的数据收集为域渗透测试提供了全面的攻击路径可视化。理解其工作原理不仅有助于有效使用该工具,也能帮助防御者更好地检测和防范此类信息收集活动。