
LDAP क्वेरी बिना किसी झंझट के
यह उपकरण ldapsearch और सामान्यतः AD इंटरैक्शन के साथ मेरे द्वारा अनुभव की जा रही अनेक समस्याओं को हल करने के लिए लिखा गया था। विशेष रूप से, यह उपकरण निम्नलिखित समस्याओं का समाधान करता है जो मैंने अनुभव की हैं:
AD से एक हज़ार से अधिक परिणाम वापस लाने में असमर्थता। यह उपकरण LDAP रिकॉर्ड पेजिंग का समर्थन करता है और अन्य AD बगों को दूर करता है ताकि मनमानी संख्या में रिकॉर्ड प्राप्त किए जा सकें।
सहज तरीके से NTLM क्रेडेंशियल का उपयोग करके प्रमाणित करने में असमर्थता। आप किसी Windows DC पर प्रमाणित करने के लिए NETBIOS डोमेन नाम, उपयोगकर्ता नाम और पासवर्ड प्रदान कर सकते हैं।
लौटाए गए रिकॉर्डों की संख्या, उनकी वापसी की गति और एक बार में खींचे गए रिकॉर्डों की संख्या को सटीक रूप से नियंत्रित करने में असमर्थता। यह उपकरण आपको इन सभी वस्तुओं को नियंत्रित करने की अनुमति देता है, जिसमें प्रत्येक पृष्ठित कॉल के बीच विलंब जोड़ना शामिल है। इसके अलावा, राउंड-रॉबिन क्वेरीिंग के लिए कई DC निर्दिष्ट किए जा सकते हैं।
परिणामों को सुपाच्य रूपों में वापस लाने में असमर्थता। यह उपकरण वर्तमान में तीन प्रारूपों का समर्थन करता है:
केवल उन विशेषताओं को वापस लाने में असमर्थता जिनकी आपको परवाह है। यह उपकरण आपको या तो सभी विशेषताओं को वापस करने, या केवल वही वापस करने की अनुमति देता है जो आप चाहते हैं।
पूर्व-निर्मित, सामान्यतः उपयोग किए जाने वाले प्रश्नों की एक सूची सहेजने में असमर्थता।
git clone ...
pip install -r requirements.txt
# python3 ldapper.py
usage: ldapper.py [-h] --domain DOMAIN --user USER --password PASSWORD
--server SERVER [--basedn BASEDN] --search SEARCH
[--maxrecords MAXRECORDS] [--pagesize PAGESIZE]
[--delay DELAY] [--format {plain,json,json_tiny}]
[--encryption {1,2,3}]
[--advanced [ADVANCED [ADVANCED ...]]] [--outfile OUTFILE]
[--engine {ldap3,impacket}]
[attribute [attribute ...]]
AD LDAP कमांड लाइन खोज जो बेकार नहीं है।
positional arguments:
attribute वापस करने के लिए विशेषताएँ (कस्टम क्वेरी के लिए डिफ़ॉल्ट रूप से सभी। पूर्वनिर्धारित क्वेरी के लिए, डिफ़ॉल्ट विशेषताओं के बजाय सभी विशेषताएँ प्राप्त करने के लिए "*" पास करें।)
optional arguments:
-h, --help यह सहायता संदेश दिखाएं और बाहर निकलें
--domain DOMAIN, -D DOMAIN
डोमेन
--user USER, -U USER उपयोगकर्ता नाम
--password PASSWORD, -P PASSWORD
पासवर्ड या LM:NTLM प्रारूपित हैश
--server SERVER, -S SERVER
DC IP या हल करने योग्य नाम
--basedn BASEDN, -b BASEDN
बेस DN सामान्यतः "dc=" होना चाहिए, उसके बाद लंबा डोमेन नाम जिसमें अवधियों को ",dc=" से बदला गया हो। यदि प्रदान नहीं किया गया है तो LDAP सर्वर से इसे प्राप्त करने का प्रयास किया जाएगा।
--search SEARCH, -s SEARCH
LDAP खोज स्ट्रिंग या "कस्टम खोज" सूची से कस्टम खोज को इंगित करने वाली संख्या। stdin से पढ़ने के लिए "-" का उपयोग करें।
--maxrecords MAXRECORDS, -m MAXRECORDS
वापस करने के लिए अधिकतम रिकॉर्ड (डिफ़ॉल्ट 100 है), 0 का मतलब सभी।
--pagesize PAGESIZE, -p PAGESIZE
प्रत्येक पुल पर वापस करने के लिए रिकॉर्डों की संख्या (डिफ़ॉल्ट 10 है)। अधिकतम रिकॉर्ड से कम या उसके बराबर होना चाहिए।
--delay DELAY, -d DELAY
पेजिंग अनुरोधों के बीच मिलीसेकंड विलंब (डिफ़ॉल्ट 0 है)।
--format {plain,json,json_tiny}, -f {plain,json,json_tiny}
आउटपुट का प्रारूप (डिफ़ॉल्ट "plain" है), हो सकता है: plain, json, json_tiny
--encryption {1,2,3}, -n {1,2,3}
3) 636 TLS से कनेक्ट करें (डिफ़ॉल्ट); 2) 389 से कनेक्ट करें बिना TLS के, लेकिन STARTTLS का प्रयास करें और आवश्यकतानुसार वापस आएं (impacket के साथ उपलब्ध नहीं); 1) 389 से कनेक्ट करें, सादा टेक्स्ट बलपूर्वक उपयोग करें
--advanced [ADVANCED [ADVANCED ...]], -a [ADVANCED [ADVANCED ...]]
पूर्वनिर्धारित खोजों के लिए विकल्प पारित करने का उन्नत तरीका जो अतिरिक्त इनपुट के लिए संकेत देते हैं (एकाधिक संकेतों के लिए, संकेत देने के क्रम में तर्क पास करें)
--outfile OUTFILE, -o OUTFILE
आउटपुट फ़ाइल (यदि निर्दिष्ट किया जाता है तो आउटपुट stdout के बजाय यहाँ रूट किया जाएगा [Windows में एन्कोडिंग त्रुटियों को रोक सकता है])
--engine {ldap3,impacket}, -e {ldap3,impacket}
उपयोग करने के लिए इंजन चुनें (डिफ़ॉल्ट "ldap3" है)। OPSEC नोट्स देखें!
कस्टम खोजें:
1) सभी उपयोगकर्ता प्राप्त करें
1.1) विशिष्ट उपयोगकर्ता प्राप्त करें (आपको उपयोगकर्ता नाम के लिए संकेत दिया जाएगा)
2) सभी समूह (और उनके सदस्य) प्राप्त करें
2.1) विशिष्ट समूह प्राप्त करें (आपको समूह नाम के लिए संकेत दिया जाएगा)
3) सभी प्रिंटर प्राप्त करें
4) सभी कंप्यूटर प्राप्त करें
4.1) विशिष्ट कंप्यूटर प्राप्त करें (आपको कंप्यूटर नाम के लिए संकेत दिया जाएगा)
5) डोमेन/एंटरप्राइज़ व्यवस्थापक प्राप्त करें
6) डोमेन विश्वास प्राप्त करें
7) अनियंत्रित SPN प्रतिनिधित्व (संभावित विशेषाधिकार वृद्धि) खोजें
8) उन खातों की खोज करें जहाँ PreAuth आवश्यक नहीं है (ASREPROAST)
9) उपयोगकर्ता SPN खोजें (KERBEROAST)
9.1) विशिष्ट उपयोगकर्ता SPN खोजें (आपको उपयोगकर्ता प्रधान नाम के लिए संकेत दिया जाएगा)
10) सभी LAPS LA पासवर्ड दिखाएँ (जो आप देख सकते हैं)
10.1) विशिष्ट वर्कस्टेशन LAPS पासवर्ड खोजें (आपको वर्कस्टेशन नाम के लिए संकेत दिया जाएगा)
*11) सामान्य सादा टेक्स्ट पासवर्ड विशेषताएँ खोजें (UserPassword, UnixUserPassword, unicodePwd और msSFU30Password)
12) सभी Quest दो-कारक बीज दिखाएँ (यदि आपके पास पहुँच है)
13) Oracle "orclCommonAttribute" SSO पासवर्ड हैश
*14) Oracle "userPassword" SSO पासवर्ड हैश
15) SCCM सर्वर प्राप्त करें
16) उन खातों की खोज करें जहाँ पासवर्ड आवश्यक नहीं है (PasswordNotRequired)
तारांकित आइटमों का कभी ऐसे वातावरण में परीक्षण नहीं किया गया है जहाँ उन्हें सत्यापित किया जा सके, कृपया मुझे बताएं कि क्या वे काम करते हैं।
इन उदाहरणों के उद्देश्य के लिए, निम्नलिखित मान लें:
NETBIOS NAME: EMP
FULL DOMAIN NAME: EXAMPLE.LOCAL
DC IPs: 10.0.0.2, 10.0.0.3
USERNAME: bob
PASSWORD: password
केवल cn विशेषता लौटाते हुए सभी रिकॉर्ड प्राप्त करें:
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0 -s '(cn=*)' cn
किसी विशिष्ट उपयोगकर्ता के बारे में विवरण प्राप्त करें (उपयोगकर्ता नाम के लिए संकेत दिया जाएगा):
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0 -s '1.1'
किसी विशिष्ट उपयोगकर्ता के बारे में विवरण प्राप्त करें (उपयोगकर्ता नाम पास करें ताकि आपको संकेत न मिले):
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0 -s '1.1' -a 'alice'
शीर्ष 100 उपयोगकर्ता Kerberos SPN प्राप्त करें, एक बार में पाँच से अधिक नहीं, प्रत्येक पृष्ठ अनुरोध के बीच दो सेकंड के विलंब के साथ संक्षिप्त JSON रूप में:
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 100 -p 5 -d 2000 -f json_tiny -s '(&(objectcategory=user)(serviceprincipalname=*))' serviceprincipalname userprincipalname
प्रिंटर के लिए सभी रिकॉर्ड मैन्युअल रूप से प्राप्त करें और सभी संबंधित विशेषताएँ दिखाएं:
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0 -s '(objectClass=printQueue)'
बिना किसी प्रयास के अनियंत्रित SPN प्रतिनिधित्व खोजें:
python ldapper.py -D 'EMP' -U 'bob' -P 'password' -S '10.0.0.2,10.0.0.3' -m 0 -s 4
Impacket इंजन का उपयोग करते समय और baseDN प्रदान न करने पर, उपकरण डोमेन कंट्रोलर से NETBIOS नाम प्राप्त करने के लिए SMB प्रमाणीकरण और कनेक्शन का प्रयास करेगा, ताकि baseDN प्राप्त किया जा सके। यह व्यवहार अत्यधिक संवेदनशील वातावरण में पहचान का कारण बन सकता है। ऐसे वातावरण में या तो Impacket का उपयोग न करें, या हमेशा baseDN निर्दिष्ट करें।
Impacket या तो पूर्ण LDAPS कनेक्शन करेगा या पूरी तरह से अनइन्क्रिप्टेड कनेक्शन। यह इस समय STARTTLS का उपयोग नहीं कर सकता है, इसलिए यदि सादा टेक्स्ट LDAP कनेक्शन पकड़ा जाएगा, तो या तो केवल पूर्ण TLS कनेक्शन का प्रयास करें या Impacket इंजन का उपयोग न करें।
Impacket रिकॉर्ड खींचने की गति पर सबसे अधिक नियंत्रण प्रदान नहीं करता है। इसलिए, "--delay" विकल्प केवल आंशिक रूप से लागू किया गया है। यदि रिकॉर्ड खींचने में देरी करना महत्वपूर्ण है, तो Impacket इंजन का उपयोग न करें।
Kerberoast: https://adsecurity.org/?p=2293
ASREPRoast: http://www.harmj0y.net/blog/activedirectory/roasting-as-reps/
अनियंत्रित प्रतिनिधित्व दुरुपयोग: http://www.harmj0y.net/blog/activedirectory/the-most-dangerous-user-right-you-probably-have-never-heard-of/
Oracle बकवास: https://blogs.oracle.com/mwilcox/entry/clarifying_ovd-ad_eus_password और http://onlineappsdba.com/index.php/2014/03/03/what-hashing-algorithm-oid-uses-to-store-user-password-ssha-or-md5/
Qwest/Defender/Oneidentity दूसरा कारक टोकन डेटा: http://support-public.cfm.quest.com/43565_Defender_5.9_AdminGuide.pdf
सामान्य सादा टेक्स्ट पासवर्ड: https://www.blackhillsinfosec.com/domain-goodness-learned-love-ad-explorer/
LDAP3 के विकल्प के रूप में Impacket जोड़ा गया क्योंकि LDAP3 हमेशा काम नहीं करता (और Impacket भी नहीं करता)।
एकाधिक LDAP सर्वर चयन हटा दिया गया क्योंकि यह सुविधा वास्तव में आवश्यक नहीं है, और Impacket में वास्तव में मौजूद नहीं है।
सब कुछ पुनर्संरचित किया गया।
SCCM खोज सुविधा जोड़ी गई।
आउटपुट फ़ाइल विकल्प जोड़ा गया।
कुछ प्रारूप आउटपुट चीजें ठीक की गईं।
stdin से LDAP क्वेरी लेने की क्षमता जोड़ी गई।
यदि उपयोगकर्ता ने पहले से नहीं किया है तो क्वेरी को स्वचालित रूप से कोष्ठक में लपेटें।
Python 2 समर्थन बग ठीक किया गया।
यदि आपके पास कुछ सामान्य खोज गणनाएँ हैं जिनका आप उपयोग करते हैं, तो कृपया मुझे बताएं ताकि मैं उन्हें सूची में जोड़ सकूं।
...
Shelby Spencer (shellster) द्वारा लिखित। बग या सुविधा अनुरोधों के लिए मुझसे संपर्क करें।