
smbcrawler एक सीधा-सादा टूल है जो क्रेडेंशियल और होस्ट की सूची लेता है, और उन शेयर्स में 'क्रॉल' (या 'स्पाइडर') करता है।
SmbCrawler एक सीधा-सादा उपकरण है जो क्रेडेंशियल्स और होस्ट की सूची लेता है और उन शेयरों में 'क्रॉल' (या 'स्पाइडर') करता है। विशेषताएँ:
यदि आपको Python पैकेज स्थापित करने के निर्देशों की आवश्यकता है, तो मैं अनुशंसा करता हूँ कि आप सुनिश्चित करें कि आपके पास pipx स्थापित है और pipx install smbcrawler चलाएँ।
SmbCrawler कुछ बाइनरी फ़ाइलों जैसे PDF, XLSX, DOCX, ZIP आदि को MarkItDown का उपयोग करके स्वचालित रूप से सादे टेक्स्ट में बदल सकता है। क्योंकि यह पैकेज बहुत सारी निर्भरताएँ खींचता है, इसे एक अतिरिक्त के रूप में चिह्नित किया गया है। हालाँकि, सबसे अच्छे परिणाम प्राप्त करने के लिए इसकी अत्यधिक अनुशंसा की जाती है। यदि आप स्वचालित रूप से बाइनरी को परिवर्तित करना चाहते हैं, तो SmbCrawler को इस प्रकार स्थापित करें:
pipx install 'smbcrawler[binary-conversion]'
शेल कम्प्लीशन जोड़ना अत्यधिक अनुशंसित है। click लाइब्रेरी का उपयोग करने वाले Python ऐप के रूप में, आप सामान्य तंत्र का उपयोग करके bash, zsh और fish में टैब कम्प्लीशन जोड़ सकते हैं।
इसे इस प्रकार चलाएँ (10 थ्रेड, अधिकतम गहराई 5):
$ smbcrawler crawl -i hosts.txt -u pen.tester -p iluvb0b -d contoso.local -t 10 -D 5
SmbCrawler में एक बड़ा ओवरहाल हुआ है। सबसे महत्वपूर्ण परिवर्तन हैं:
पुराने CLI तर्क "दिलचस्प फ़ाइलों", "उबाऊ शेयरों" आदि के संबंध में बोझिल और भ्रामक थे। इसके बजाय हम अब "प्रोफ़ाइल" का उपयोग करते हैं; विवरण के लिए नीचे देखें।
साथ ही, मुझे एहसास हुआ कि मैंने मूल रूप से रिलेशनल डेटाबेस का पुन: आविष्कार किया, लेकिन बहुत खराब तरीके से किया, तो क्यों न सीधे sqlite का उपयोग किया जाए? sqlite दृष्टिकोण हमें अच्छे प्रदर्शन के साथ एक अच्छी इंटरैक्टिव HTML रिपोर्ट तैयार करने में सक्षम बनाता है। यदि आपको किसी टूल पाइपलाइन में डेटा का उपयोग करने की आवश्यकता है, तो आप अभी भी विभिन्न प्रारूपों में परिणाम निर्यात कर सकते हैं।
पुराना तरीका जिससे SmbCrawler अनुमतियों की रिपोर्ट करता था, कभी-कभी बहुत उपयोगी नहीं था। उदाहरण के लिए, यह असामान्य नहीं है कि आपके पास शेयर की रूट निर्देशिका में पढ़ने की अनुमतियाँ हैं, लेकिन सभी उप-निर्देशिकाएँ सुरक्षित हैं, जैसे उपयोगकर्ता प्रोफ़ाइलों के लिए। SmbCrawler अब रिपोर्ट करेगा कि वह शेयर की निर्देशिका संरचना को कितनी गहराई तक पढ़ सका और क्या यह अधिकतम सीमा तक पहुँच गया या यदि आपने अधिकतम गहराई तर्क के लिए उच्च मान प्रदान किया होता तो और गहराई तक जा सकता था।
यदि आप पुराने संस्करण को पसंद करते हैं, तो यह अभी भी PyPI पर उपलब्ध है और उदाहरण के लिए pipx install smbcrawler==0.2.0 से स्थापित किया जा सकता है।
रन टाइम के दौरान, आप निम्नलिखित कुंजियों का उपयोग कर सकते हैं:
p: क्रॉलर को रोकें और एकल होस्ट या शेयर छोड़ें<space>: वर्तमान प्रगति प्रिंट करेंs: अधिक विस्तृत स्थिति अपडेट प्रिंट करेंअधिक जानकारी के लिए, smbcrawler -h चलाएँ।
मध्यम आकार के नेटवर्क में भी, SmbCrawler बहुत सारा डेटा ढूँढ़ेगा। चुनौती झूठी सकारात्मकताओं को कम करना है।
यह समझना महत्वपूर्ण है कि अनुमतियाँ सेवा स्तर और फ़ाइल सिस्टम स्तर पर लागू हो सकती हैं। रिमोट SMB सेवा आपको प्रमाणित करने की अनुमति दे सकती है और आपके उपयोगकर्ता खाते के पास सिद्धांत रूप में पढ़ने की अनुमतियाँ हो सकती हैं, लेकिन फ़ाइल सिस्टम पर ये अनुमतियाँ नहीं हो सकती हैं।
SmbCrawler रिपोर्ट करेगा कि क्या आपके पास अनुमतियाँ हैं:
--depth तर्क द्वारा सीमित है)क्योंकि प्रश्न में कार्रवाई का प्रयास किए बिना SMB शेयरों की अनुमतियों की जाँच करना गैर-तुच्छ है, SmbCrawler प्रत्येक शेयर पर एक निर्देशिका बनाने का प्रयास करेगा। इसका नाम smbcrawler_DELETEME_<8 यादृच्छिक वर्ण> है और इसे तुरंत हटा दिया जाएगा, लेकिन फिर भी सावधान रहें।
[!WARNING] कभी-कभी आपके पास निर्देशिकाएँ बनाने की अनुमति होती है, लेकिन उन्हें हटाने की नहीं, इसलिए आप वहाँ एक खाली निर्देशिका छोड़ देंगे।
यह तय करने के लिए कि कुछ शेयरों, फ़ाइलों या निर्देशिकाओं के साथ क्या करना है, SmbCrawler में "प्रोफ़ाइल" नामक एक सुविधा है। डिफ़ॉल्ट प्रोफ़ाइल पर एक नज़र डालें।
प्रोफ़ाइल *.yml या *.yaml एक्सटेंशन वाली फ़ाइलों से इन स्थानों से लोड की जाती हैं:
$XDG_DATA_HOME/smbcrawler/ (डिफ़ॉल्ट रूप से ~/.local/share/smbcrawler)--extra-profile-directory द्वारा परिभाषित अतिरिक्त निर्देशिका--extra-profile-file द्वारा परिभाषित अतिरिक्त फ़ाइलेंप्रत्येक स्थान की प्रोफ़ाइल पिछली परिभाषाओं को ओवरराइड करती हैं।
regex मान परिभाषित करता है कि कोई प्रोफ़ाइल मेल खाती है या नहीं, और अंतिम मेल खाने वाली प्रोफ़ाइल का उपयोग किया जाएगा। सभी रेगुलर एक्सप्रेशन केस-इनसेंसिटिव हैं, जो विंडोज़ दुनिया में सबसे सामान्य व्यवहार को दर्शाते हैं।
चूँकि यह भ्रामक हो सकता है कि विभिन्न स्रोतों की प्रोफ़ाइल एक साथ कैसे काम करती हैं, --dry-run पैरामीटर का उपयोग करना सुनिश्चित करें। यह आपको प्रभावी कॉन्फ़िगरेशन दिखाता है और इसके अलावा कुछ नहीं करता।
आइए प्रत्येक अनुभाग को देखें, जो हमेशा शब्दकोशों की एक सूची होती है। शब्दकोश की प्रत्येक कुंजी एक मनमाना लेबल है और प्रत्येक मान फिर से विभिन्न गुणों वाला एक शब्दकोश है।
comment: इस प्रोफ़ाइल का वर्णन करने वाली एक सहायक स्ट्रिंगregex: एक रेगुलर एक्सप्रेशन जो परिभाषित करता है कि यह प्रोफ़ाइल किन फ़ाइलों पर लागू होती है। अंतिम मेल खाने वाला रेगुलर एक्सप्रेशन मायने रखता है।regex_flags: ध्वजों की एक सरणी जो रेगुलर एक्सप्रेशन match फ़ंक्शन को पास की जाएगीhigh_value (डिफ़ॉल्ट: false): यदि कोई फ़ाइल "उच्च मूल्य" है, तो इसकी उपस्थिति रिपोर्ट की जाएगी, लेकिन यह आवश्यक रूप से डाउनलोड नहीं की जाएगी (वर्चुअल हार्ड ड्राइव के बारे में सोचें - महत्वपूर्ण, लेकिन स्वचालित रूप से डाउनलोड करने के लिए बहुत बड़ी)download (डिफ़ॉल्ट: true): यदि true, तो पहले 200 KiB डाउनलोड किए जाएंगे (या यदि high_value=true है तो पूरी फ़ाइल) और रहस्यों के लिए पार्स की जाएगीcomment, regex, regex_flags: ऊपर जैसा हीhigh_value: इसकी उपस्थिति रिपोर्ट की जाएगी और क्रॉल गहराई अनंत में बदल दी जाएगीcrawl_depth: इस शेयर या निर्देशिका को --depth तर्क द्वारा परिभाषित गहराई से भिन्न गहराई तक क्रॉल करेंcomment, regex_flags: ऊपर जैसा हीregex: रहस्य से मेल खाने वाला एक रेगुलर एक्सप्रेशन। रहस्य स्वयं secret नाम वाला एक नामित समूह हो सकता है।पहले SmbCrawler को क्रॉलिंग गहराई 1 के साथ चलाना समझ में आता है ताकि यह अंदाजा लग सके कि आप किससे निपट रहे हैं। इस पहली रन में, आप -w के साथ लिखने की जाँच सक्षम कर सकते हैं:
$ smbcrawler -C permissions_check.crwl crawl -D1 -t10 -w \
-i <इनपुट फ़ाइल> -u <उपयोगकर्ता> -d <डोमेन> -p <पासवर्ड>
ध्यान दें कि यह केवल प्रत्येक शेयर की रूट निर्देशिका में लिखने और पढ़ने की अनुमतियों की जाँच करता है। केवल एक पूर्ण रन ही आपको बताएगा कि पढ़ने की अनुमतियाँ कितनी गहराई तक जाती हैं।
प्रारंभिक अनुमति जाँच के बाद, आप अपनी अगली रन या कई रनों के लिए दिलचस्प और उबाऊ शेयरों की पहचान कर सकते हैं। कुछ शेयर जैसे SYSVOL और NETLOGON कई बार दिखाई देते हैं, इसलिए आपको अगली रन पर क्रॉल गहराई शून्य पर सेट करनी चाहिए और तीसरी रन में इन डुप्लिकेट शेयरों को स्कैन करने के लिए एक होस्ट चुनना चाहिए। यहाँ एक उदाहरण है:
$ smbcrawler -C dc_only.crwl crawl -D -1 <DC IP> \
-u <उपयोगकर्ता> -d <डोमेन> -p <पासवर्ड>
$ smbcrawler -C full.crwl crawl -D5 -t10 -i <नई इनपुट फ़ाइल> \
-u <उपयोगकर्ता> -d <डोमेन> -p <पासवर्ड> \
--extra-profile-file skip_sysvol.yml
यहाँ, skip_sysvol.yml होगा:
shares:
sysvol:
comment: "SYSVOL और NETLOGON शेयर छोड़ें"
regex: 'SYSVOL|NETLOGON'
crawl_depth: 0
यहाँ अन्य शेयर शामिल करने के लिए स्वतंत्र महसूस करें जिन्हें आप क्रॉल करने योग्य नहीं समझते।
कच्चा डेटा एक SQLite डेटाबेस और एक निर्देशिका (डिफ़ॉल्ट रूप से output.crwl और output.crwl.d) में समाहित है। निर्देशिका में दो और निर्देशिकाएँ हैं: एक हैश सामग्री द्वारा अद्वितीयीकृत डाउनलोड की गई फ़ाइलों वाली और एक निर्देशिका जो सभी शेयरों को सिमलिंक के साथ दर्पणित करती है जो सामग्री फ़ाइलों की ओर इशारा करते हैं। बाद वाली सभी डाउनलोड की गई फ़ाइलों में grep करने के लिए अच्छी है।
डेटा को विभिन्न प्रारूपों में बदला जा सकता है। आप उदाहरण के लिए sqlitebrowser के साथ डेटाबेस तक पहुँच सकते हैं। कुछ उपयोगी दृश्य पूर्व-परिभाषित किए गए हैं। या आप JSON आउटपुट कर सकते हैं और डेटा को मैंगल करने के लिए jq का उपयोग कर सकते हैं।
यदि आप उदाहरण के लिए LaTeX तालिका में उन सभी शेयरों को प्रदर्शित करना चाहते हैं जिन्हें आप रूट निर्देशिका से परे पढ़ने में सक्षम थे, तो इस क्वेरी का उपयोग करें:
SELECT target_id || " & " || name || " & " || remark || " \\"
FROM share
WHERE read_level > 0
ORDER BY target_id, name
एक प्रायोगिक HTML आउटपुट सुविधा भी है। यह बड़ी मात्रा में डेटा के लिए अभी तक पूरी तरह से उपयोगी नहीं हो सकती है।
यदि आप रिपोर्ट किए गए रहस्यों में बहुत सारी झूठी सकारात्मकताएँ या झूठी नकारात्मकताएँ देखते हैं, तो कृपया सहायता करें और मुझे बताएं। स्वचालित पहचान में सुधार करने का प्रयास करते समय सामुदायिक इनपुट महत्वपूर्ण है। सबसे अच्छा परिदृश्य: डिफ़ॉल्ट प्रोफ़ाइल फ़ाइल में परिवर्तन के साथ एक पुल रिक्वेस्ट प्रदान करें।
Adrian Vollmer, SySS GmbH
MIT लाइसेंस; विवरण के लिए LICENSE देखें।