FalconForceTeam/SOAPHound
GitHub: FalconForceTeam/SOAPHound
SOAPHound 是一款通过 ADWS 协议隐蔽枚举 Active Directory 环境的 .NET 工具,可规避传统 LDAP 流量监控。
Stars: 861 | Forks: 91

# 描述
SOAPHound 是一款 .NET 数据收集工具,通过 Active Directory Web Services (ADWS) 协议收集 Active Directory 数据。
SOAPHound 是众多通常用于通过 LDAP 协议提取 Active Directory 数据的开源安全工具的替代品。SOAPHound 能够提取相同的信息,而无需直接与 LDAP 服务器通信。相反,LDAP 查询被封装在一系列 SOAP 消息中,通过 NET TCP 绑定通信通道发送到 ADWS 服务器。随后,ADWS 服务器解封装 LDAP 查询并将其转发给运行在同一域控制器上的 LDAP 服务器。因此,LDAP 流量不会通过网络传输,从而不易被常见的监控工具检测到。
请注意,这是一个概念验证工具,不适用于生产环境。该工具按原样提供,不提供任何形式的保证。
有关 SOAPHound 工具的更多详细信息,请参阅以下博客文章:[SOAPHound — tool to collect Active Directory data via ADWS](https://falconforce.nl/soaphound-tool-to-collect-active-directory-data-via-adws/)。
# 用法
可以使用 `--help` 命令行参数显示以下用法信息:
```
SOAPHound
Copyright (c) 2024 FalconForce
Connection and authentication options:
--user Username to use for ADWS Connection. Format: domain\user or user@domain
--password Password to use for ADWS Connection
--domain Specify domain for enumeration
--dc Domain Controller to connect to
Supported collection methods:
--buildcache (Default: false) Only build cache and not perform further actions
--dnsdump (Default: false) Dump AD Integrated DNS data
--certdump (Default: false) Dump AD Certificate Services data
--bhdump (Default: false) Dump BH data
Output options:
-o, --outputdirectory Folder to output files to (full path needed)
-c, --cachefilename Filename for the cache file (full path needed)
Splitting options:
-a, --autosplit (Default: false) Enable AutoSplit mode: automatically split object retrieval on two depth levels based on defined trheshold
-t, --threshold (Default: 0) AutoSplit mode: Define split threshold based on number of objects per starting letter
Miscellaneous options:
--nolaps (Default: false) Do not request LAPS related information
--showstats Show stats of local cache file
--logfile Create log file
--help Display this help screen.
```
# 连接和身份验证选项
## 身份验证
SOAPHound 支持以下身份验证方法:
* 使用当前用户的现有身份验证令牌。如果未提供用户名和密码,这是默认选项。
* 在命令行中提供用户名和密码。
## 域连接信息
当 SOAPHound 在已加入域的机器上运行时,它将自动尝试连接到该机器所加入域的域控制器。
可以通过提供 `--dc` 和 `--domain` 命令行参数来覆盖此设置。
# 支持的收集方法
必须指定以下收集方法之一:
* `--buildcache`:仅构建缓存,不执行进一步操作
* `--bhdump`:转储 BloodHound 数据
* `--certdump`:转储 AD 证书服务 (ADCS) 数据
* `--dnsdump`:转储 AD 集成 DNS 数据
## 构建缓存
SOAPHound 能够生成一个缓存文件,其中包含有关所有域对象的基本信息,例如安全标识符 (SID)、可分辨名称 (DN) 和 ObjectClass。
此缓存文件是 BloodHound 相关数据收集(即 `--bhdump` 和 `--certdump` 收集方法)所必需的,因为它用于通过相关的访问控制项 (ACE) 构建对象之间的信任关系。
构建缓存文件的示例命令是:
```
SOAPHound.exe --buildcache -c c:\temp\cache.txt
```
这将在 `c:\temp` 文件夹中生成一个缓存文件。该缓存文件是一个 JSON 格式的映射,包含有关所有域对象的基本信息。
要查看有关缓存文件的一些统计信息(即以每个字母开头的域对象数量),可以使用 `--showstats` 命令行参数:
```
SOAPHound.exe --showstats -c c:\temp\cache.txt
```
## 收集 BloodHound 数据
生成缓存文件后,可以使用 `--bhdump` 收集方法从域中收集可导入 BloodHound 的数据。
收集 BloodHound 数据的示例命令如下(请注意,这引用了上一步生成的缓存文件):
```
SOAPHound.exe -c c:\temp\cache.txt --bhdump -o c:\temp\bloodhound-output
```
如果目标域不使用 LAPS,可以使用 `--nolaps` 命令行参数跳过 LAPS 相关数据收集。
此命令将生成 `c:\temp\bloodhound-output` 文件夹,并生成许多可导入 BloodHound 的 JSON 文件。
JSON 文件包含收集的用户、组、计算机、域、GPO 和容器,包括它们的关系。SOAPHound 兼容 Bloodhound 版本 4。
### 处理大型域
如果您正在处理一个大型域,可能会遇到单个请求中可检索数据量的问题。
为了解决这个问题,SOAPHound 支持 `--autosplit` 和 `--threshold` 命令行参数。
`--autosplit` 命令行参数启用 AutoSplit 模式,该模式将根据定义的阈值在两个深度级别上自动拆分对象检索。
`--threshold` 命令行参数根据每个起始字母的对象数量定义拆分阈值。
在 AutoSplit 模式下收集 BloodHound 数据的示例命令是:
```
SOAPHound.exe -c c:\temp\cache.txt --bhdump -o c:\temp\bloodhound-output --autosplit --threshold 1000
```
这将以每个起始字母最多 1000 个对象为一批生成输出。
如果单个起始字母的对象超过 1000 个,SOAPHound 将使用两个深度级别来检索对象。
这将导致查询数量增加,每个查询最多返回 1000 个对象。
例如,如果有 2000 个以字母 `a` 开头的对象,SOAPHound 将检索以 `aa`、`ab`、`ac` 等开头的对象,每个都在单独的查询中以避免超时。
## 收集 ADCS 数据
生成缓存文件后,可以使用 `--certdump` 收集方法从域中收集可导入 BloodHound 的 ADCS 数据。
此收集方法不支持 `--autosplit` 和 `--threshold` 命令行参数。
收集 ADCS 数据的示例命令如下(请注意,这引用了上一步生成的缓存文件):
```
SOAPHound.exe -c c:\temp\cache.txt --certdump -o c:\temp\bloodhound-output
```
此命令将生成 `c:\temp\bloodhound-output` 文件夹,并生成两个可导入 BloodHound 的 JSON 文件,其中包含有关证书颁发机构 (CA) 和证书模板的信息。SOAPHound 兼容 Bloodhound 版本 4,并且 ADCS 数据在 Bloodhound 中被归类为 GPO 对象。
## 收集 AD 集成 DNS 数据
除了 BloodHound 数据外,SOAPHound 还可用于收集 AD 集成 DNS 数据。这不需要缓存文件,并且不支持 `--autosplit` 和 `--threshold` 命令行参数。
收集 AD 集成 DNS 数据的示例命令是:
```
SOAPHound.exe --dnsdump -o c:\temp\dns-output
```
此命令将在 `c:\temp\dns-output` 文件夹中生成一个名为 DNS.txt 的文件,其中包含所有 AD 集成 DNS 数据的转储。
# 致谢
此工具基于以下开源项目的工作:
* [SharpHound](https://github.com/BloodHoundAD/SharpHound/tree/dev)
* [StandIn](https://github.com/FuzzySecurity/StandIn)
* [Certify](https://github.com/GhostPack/Certify)
另外特别感谢 [PingCastle](https://github.com/vletoux/pingcastle) 提供的 ADWS 协议参考实现。
虽然我们没有直接使用他们的代码,但这对于理解协议和认识 ADWS 协议的潜力有很大帮助。
标签:Active Directory, ADWS, DNS记录, LDAP, Plaso, SOAPHound, SOAP协议, TGT, Web报告查看器, 协议分析, 域控制器, 域环境, 多人体追踪, 攻防演练, 数据枚举, 数据转储, 权限提升, 流量嗅探, 网络安全, 规避检测, 证书服务, 超级时间线, 隐私保护