j4s0nmo0n/Soaphound.py
GitHub: j4s0nmo0n/Soaphound.py
基于 ADWS 协议的 Python 版 BloodHound 数据采集器,可在 Linux 上隐蔽地收集 Active Directory 对象和会话信息。
Stars: 38 | Forks: 4
# 描述
在阅读 [BloodHound.py](https://github.com/dirkjanm/BloodHound.py)([SharpHound](https://github.com/SpecterOps/SharpHound) 的 Linux 替代方案)时,我们观察到对象收集是基于具体情况进行单独处理的。它会评估特定的条件,以确定每个收集对象最相关的信息,并据此采取针对性的操作。
在实现 Soaphound.py 时,我们试图遵循类似的逻辑,旨在通过 ADWS 在对象枚举期间收集最有价值的信息。此外,由于机器上的用户会话不通过 LDAP 收集,我们复用了 BloodHound.py 的方法来执行此收集。
该工具目前正在不断改进,以涵盖所有特定的数据收集场景。在撰写本文时,它已经能够通过 ADWS 服务收集 Active Directory 对象,并检索类似于 BloodHound.py 所获取的远程会话数据。或者,它也可以在使用 `-c ADWSOnly` 选项的限制模式下运行,仅通过 ADWS 收集 AD 对象。
更多信息:[您可以查看这篇简短的博客文章](https://j4s0nmo0n.github.io/belettetimoree.github.io/Soaphound.py%20-%20Collecting%20Active%20Directory%20Objects%20over%20ADWS%20from%20Linux.html)
# 用法
```
.oooooo..o oooo .o8
d8P' `Y8 `888 "888
Y88bo. .ooooo. .oooo. oo.ooooo. 888 .oo. .ooooo. oooo oooo ooo. .oo. .oooo888 oo.ooooo. oooo ooo
`"Y8888o. d88' `88b `P )88b 888' `88b 888P"Y88b d88' `88b `888 `888 `888P"Y88b d88' `888 888' `88b `88. .8'
`"Y88b 888 888 .oP"888 888 888 888 888 888 888 888 888 888 888 888 888 888 888 `88..8'
oo .d8P 888 888 d8( 888 888 888 888 888 888 888 888 888 888 888 888 888 .o. 888 888 `888'
8""88888P' `Y8bod8P' `Y888""8o 888bod8P' o888o o888o `Y8bod8P' `V88V"V8P' o888o o888o `Y8bod88P" Y8P 888bod8P' .8'
888 888 .o..P'
o888o o888o `Y8P'
(made by @belettet1m0ree)
usage: soaphound [-h] [-c COLLECTIONMETHOD] -d DOMAIN [-v] [--ts] -u USERNAME
[-p PASSWORD] [--hashes HASHES] [-k] [-aesKey HEXKEY]
[-dc-ip HOST] -dc HOST [--zip] [-op PREFIX_NAME]
[-wk NUM_WORKERS] [--output-dir OUTPUT_DIR]
[--cert-find] [--cert-find-force-epa {auto,enabled,disabled}]
[--cert-find-skip-web-probe] [--cert-find-ca-rpc]
Python based ingestor for BloodHound using ADWS
options:
-h, --help show this help message and exit
-c, --collectionmethod COLLECTIONMETHOD
Which information to collect: Default or ADWSOnly
(no computer connections).
-d, --domain DOMAIN Domain to query.
-v Enable verbose output.
--ts Add timestamp to logs.
authentication options:
NTLM authentication is supported using a username/password or NT hash.
Kerberos authentication is supported through -k using the ccache pointed to
by KRB5CCNAME.
-u, --username USERNAME
Username. Format: username[@domain].
If the domain is unspecified, the current domain is used.
-p, --password PASSWORD
Password.
--hashes HASHES LM:NTLM hashes.
-k, --kerberos Use Kerberos authentication through the ticket available
in the ccache pointed to by KRB5CCNAME.
-aesKey, --aes-key HEXKEY
AES key, 128 or 256 bits, for Kerberos authentication.
Used for SMB collection in Default mode.
-dc-ip, --kdc-ip HOST
KDC IP address or hostname. Useful when the ADWS DC and
the KDC differ. Defaults to the value provided with -dc.
collection options:
-dc, --domain-controller HOST
DC to query, hostname or FQDN.
--zip Compress the JSON output files into a zip archive.
-op, --outputprefix PREFIX_NAME
String to prepend to output file names.
-wk, --worker_num NUM_WORKERS
Number of workers, default 100.
--output-dir OUTPUT_DIR
Output folder, default current directory.
--cert-find Enumerate AD CS certificate templates and CAs like certipy find.
--cert-find-force-epa {auto,enabled,disabled}
Override HTTPS EPA detection for AD CS Web Enrollment: auto, enabled, or disabled.
--cert-find-skip-web-probe
Do not probe HTTP/HTTPS /certsrv/ endpoints AD CS Web Enrollment and ESC8 will not be evaluated.
--cert-find-ca-rpc Enrich CA configuration through Remote Registry/RPC:
User Specified SAN, Request Disposition, Enforce
Encryption, Active Policy.
```
# 安装
## 使用 `pipx`(推荐)
```
pipx install git+https://github.com/j4s0nmo0n/Soaphound.py
soaphound --help
```
支持 Shadow Credentials(可选的 `dsinternals` 依赖):
```
pipx install "soaphound[shadowcred] @ git+https://github.com/j4s0nmo0n/Soaphound.py"
```
后续升级:
```
pipx upgrade soaphound
```
## 使用 `poetry`(开发)
```
git clone https://github.com/j4s0nmo0n/Soaphound.py
cd Soaphound.py
poetry install
poetry run soaphound --help
```
## 在虚拟环境中使用 `pip`
```
python3 -m venv ~/venvs/soaphound
source ~/venvs/soaphound/bin/activate
pip install git+https://github.com/j4s0nmo0n/Soaphound.py
```
# 使用示例
执行 ADWS 收集及会话枚举
```
soaphound -d jjk.local -u yuji -p SukunaIsAbitch -dc dc-curse --output-dir output
```
执行仅限 ADWS 的收集(无 SMB 会话枚举)
```
soaphound -d jjk.local -u yuji -p SukunaIsAbitch -dc dc-curse --output-dir output -c ADWSOnly
```
执行 ADCS 信息收集
```
soaphound -d jjk.local -u yuji -p SukunaIsAbitch -dc dc-curse --cert-find --cert-find-force-epa auto
```
# Kerberos 身份验证 (-k)
Soaphound 通过 `-k` 选项和 `KRB5CCNAME` 环境变量支持 Kerberos 身份验证。
根据收集模式和正在执行的操作,ccache 可能包含有效的 TGT 或可用的服务票据。
```
# 加载 Kerberos ticket
export KRB5CCNAME=/tmp/yuji.ccache
# 使用 Kerberos 运行 Soaphound
soaphound -d jjk.local -u yuji -dc dc-curse.jjk.local -k
# 使用 Kerberos 运行仅 ADWS 收集
soaphound -d jjk.local -u yuji -dc dc-curse.jjk.local -k -c ADWSOnly
# 让 Soaphound 从 ccache 中提取用户名和域名
soaphound -dc dc-curse.jjk.local -k -c ADWSOnly
# 使用不同的 KDC
soaphound -d jjk.local -u yuji -dc adws.jjk.local -dc-ip kdc.jjk.local -k
```
# 参考
- [Falcon Force Team](https://falconforce.nl/soaphound-tool-to-collect-active-directory-data-via-adws/) 提供的初步灵感。
- [BloodHound.py](https://github.com/dirkjanm/BloodHound.py),感谢其出色的 BloodHound 数据采集器实现。
- @_logangoins 的 [SOAPy](https://github.com/jlevere/SOAPy),其 Kerberos NNS 实现是 `-k` 支持的基础。
- [Microsoft](https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-addm/59205cf6-aa8e-4f7e-be57-8b63640bf9a4) 提供的官方协议文档。
- [ERNW](https://insinuator.net/2016/08/pentesting-webservices-with-net-tcp-binding/) 提供的初始推动。
- [X-Force Red](https://www.ibm.com/think/x-force/stealthy-enumeration-of-active-directory-environments-through-adws) 出色的 NBFX 实现和研究见解。
- [Rabobank Red Team](https://rabobank.jobs/en/techblog/adws-an-unconventional-path-into-active-directory-luc-kolen/) 分享的宝贵资源和实战见解。
标签:Active Directory, ADWS, BloodHound, BloodHound.py, Checkov, HTTP, LDAP, Plaso, Soaphound, 信息侦察, 协议分析, 命令控制, 图形分析, 域渗透, 攻击面评估, 数据采集, 权限提升, 横向移动, 活动目录, 电子数据取证, 目录枚举, 移动安全, 编程规范, 网络安全, 远程会话, 逆向工具, 隐私保护