Jump to content
  • entries
    16
  • comments
    22
  • views
    6450

Bitwise searching


SOF

890 views

 Share

Καλησπέρα!

Στους περισσότερους από εσάς είναι γνωστό το παρακάτω interface.

image

Προφανώς αρκετοί διαχειριστές που θέλουν να έχουν μια γενική εικόνα του domain, χρειάζονται ένα report που να διαβάζει πληροφορίες του τύπου: Ποιοι λογαριασμοί έχουν set το flag “Password never expires”. Για να ανακτήσουμε όμως αυτή την πληροφορία πρέπει να γνωρίζουμε που αποθηκεύεται στο Active Directory. Η απάντηση είναι στο user-account-control attribute κάθε χρήστη! Το attribute αυτό είναι ένας μυστικός θησαυρός γιατί εκτός των άλλων περιέχει πληροφορίες όπως αν ο χρήστης είναι κλειδωμένος, ή αν προϋποθέτει την χρήση smartcard για login ή ακόμα αν υποστηρίζει μόνο τον αλγόριθμο DES για login. Το τελευταίο είναι αρκετά χρήσιμο για αυτούς που σκοπεύουν να αναβαθμίσουν τους DCs σε Windows 2008 R2 καθώς αυτοί δεν υποστηρίζουν DES.

Εδώ θα βρείτε ολόκληρη τη λίστα με τις πληροφορίες που αποθηκεύονται στο attribute.

Εχουμε λοιπόν μια υπόθεση εργασίας:

Θέλουμε να βρούμε άν υπάρχουν accounts στο Active Directory που να χρησιμοποιούν τον αλγόριθμο DES πριν αναβαθμίσουμε τους DCs σε Windows 2008 R2. Υπάρχει όμως ένα σημαντικό πρόβλημα στην αναζήτηση αυτής της πληροφορίας! Η τιμή του attribute είναι δυαδική και αποτελείται από το άθροισμα των δυαδικών τιμών όλων των flags. Εμείς όμως πως μπορούμε να ψάξουμε αυτά τα αθροίσματα αν περιέχουν την τιμή “ADS_UF_USE_DES_KEY_ONLY” που είναι 0x00200000; Την απάντηση σε αυτό το ερώτημα θα επιχειρήσω να δώσω παρακάτω.

Το Active Directory μας δίνει την δυνατότητα να εκτελούμε bitwise searches! Ιδου ο τρόπος:

Το ldap search filter μας πρέπει να έχει την εξής μορφή:

attributename:ruleOID:=value

Υπάρχουν δύο RuleOIDs:

1.2.840.113556.1.4.803 – Αυτός είναι ο LDAP_MATCHING_RULE_BIT_AND κανόνας. Ο κανόνας αυτός επιστρέφει true μόνο αν όλα τα bits της τιμής του attribute ταιριάζουν στην τιμή που ψάχνουμε.

1.2.840.113556.1.4.804 – Αυτός ειναι ο LDAP_MATCHING_RULE_BIT_OR κανόνας. Ο κανόνας αυτός επιστρέφει true αν κάποια από τα bits της τιμής που ψάχνουμε περιέχονται στην τιμή του attribute.

Αν δεν είστε εξοικοιωμένοι με τους δυαδικούς operators είναι λιγο περίπλοκο. Αυτό που πρέπει να κρατήσουμε είναι ότι για αυτού του είδους τα searches χρησιμοποιούμε AND.

Ας φτιάξουμε λοιπόν το search filter.

attributename = useraccountcontrol

ruleOID = 1.2.840.113556.1.4.803

“ADS_UF_USE_DES_KEY_ONLY” = HEX 0x00200000 = DEC 2097152

Επομένως το φίλτρο έχει τη μορφή:

useraccountcontrol:1.2.840.113556.1.4.803:=2097152

Αυτό το φίλτρο τώρα μπορούμε να το χρησιμοποιήσουμε σε οποιδήποτε LDAP client ή ακόμα και προγραμματιστικά.

Εδώ ένα παράδειγμα με το ldp.exe

image

Και το αποτέλεσμα:

image

Αν δούμε τώρα τη καρτέλα του χρήστη θα παρατηρήσουμε ότι το flag είναι όντως τσεκαρισμένο:

image

Μπρορείτε φυσικά να χρησιμοποιήσετε αυτού του τύπου τις αναζητήσεις για οποιαδήποτε δυαδική τιμή του useraccountcontrol ή οποιουδήποτε άλλου attribute.

Ελπίζω να σας φανεί χρήσιμο!

 

Φιλικά

SOF

 Share

1 Comment


Recommended Comments

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...