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, 信息侦察, 协议分析, 命令控制, 图形分析, 域渗透, 攻击面评估, 数据采集, 权限提升, 横向移动, 活动目录, 电子数据取证, 目录枚举, 移动安全, 编程规范, 网络安全, 远程会话, 逆向工具, 隐私保护