
सार्वजनिक Microsoft Exchange सर्वरों की पहचान करें और उनके सॉफ़्टवेयर संस्करणों का निर्धारण करें

यह टूल किसी लक्षित होस्ट पर कई सामान्य सार्वजनिक-मुखी सेवाओं को स्कैन करता है ताकि Microsoft Exchange Server का पता लगाया जा सके और संभव हो तो उसके सॉफ़्टवेयर संस्करण का फ़िंगरप्रिंट लिया जा सके।
ऐसा करने के लिए, यह निम्नलिखित तकनीकों का उपयोग करता है:
पता लगाए गए बिल्ड नंबरों को Microsoft से स्क्रैप की गई एक संस्करण तालिका से मिलान किया जाता है, जो Exchange Server 5.5 से लेकर Exchange Server Subscription Edition (SE) तक हर रिलीज़ को कवर करती है, जिसमें Service Pack (SP), Cumulative Update (CU), Security Update (SU), Hotfix Update (HU) और Update Rollup (RU) स्तर शामिल हैं। मिलानों को उत्पाद नाम, रिलीज़ दिनांक और CPE स्ट्रिंग्स के साथ NVD शब्दकोश प्रारूप में रिपोर्ट किया जाता है।
स्कैनर चलाने का अनुशंसित तरीका Docker है, जिसके लिए Docker के अलावा किसी स्थानीय निर्भरता की आवश्यकता नहीं होती है। यदि आप सीधे स्क्रिप्ट चलाना चाहते हैं, तो इसे 64-बिट Debian Linux के लिए डिज़ाइन किया गया है, लेकिन यह Python 3, dnsx और fingerprintx द्वारा समर्थित किसी भी Linux वैरिएंट पर काम करेगा (इंस्टॉलेशन स्क्रिप्ट में मामूली संशोधनों के साथ)।
इमेज बनाएँ। यह Python, पिन किए गए Python पैकेज और वर्ज़न-लॉक किए गए dnsx और fingerprintx बाइनरी को बंडल करती है, और बिल्ड के समय Microsoft से Exchange Server संस्करण तालिका स्क्रैप करती है:
docker build -t exchange-scanner .
फिर स्कैनर चलाएँ, वही तर्क पास करें जो आप स्क्रिप्ट को देंगे (नीचे उपयोग अनुभाग में वर्णित):
# Scan a single target
docker run --rm exchange-scanner -q -t 192.168.5.3
# Scan a list of targets (mount the file into the container)
docker run --rm -v "$PWD/targets.txt:/app/targets.txt" exchange-scanner -l targets.txt
संस्करण तालिका को ताज़ा करने के लिए इमेज को फिर से बनाएँ।
आवश्यक टूल, पैकेज और अन्य निर्भरताएँ स्थापित करने के लिए scripts/install-requirements.sh चलाएँ। Python पैकेज scripts/requirements.txt में विशिष्ट संस्करणों पर पिन किए गए हैं।
exchange-versions.json में उपलब्ध सॉफ़्टवेयर संस्करण तालिका को अपडेट करने के लिए आप किसी भी समय scripts/get-exchange-versions.py को अलग से फिर से चला सकते हैं।
उपयोग विवरण देखने के लिए exchange-scanner.py स्क्रिप्ट को -h के साथ चलाएँ:
❯ ./exchange-scanner.py -h
usage: exchange-scanner.py [-h] [-q] [-d] [-x TIMEOUT] [-o OUTFILE] (-t TARGET | -l LIST)
optional arguments:
-h, --help show this help message and exit
-q, --quiet Suppress log output (except errors)
-d, --debug Print debugging messages
-x TIMEOUT, --timeout TIMEOUT
Set timeout for HTTP requests (defaults to 3 seconds)
-o OUTFILE, --outfile OUTFILE
Save output to a file instead of writing to stdout
-t TARGET, --target TARGET
A single hostname or IP address to scan
-l LIST, --list LIST File containing a list of hostnames and/or IP addresses to scan (one per line)
आवश्यक: -t या -l
-t का उपयोग करें। यदि होस्टनाम कई IP पतों में हल होता है, तो स्क्रिप्ट उनमें से प्रत्येक को अलग-अलग स्कैन करेगी।-l का उपयोग करें।लॉगिंग: अधिकांश लॉग आउटपुट को दबाने के लिए -q का उपयोग करें। अधिक लॉग विवरण देखने के लिए -d का उपयोग करें।
टाइमआउट: प्रति HTTP अनुरोध अधिकतम प्रतिक्रिया समय बदलने के लिए, सेकंड में एक टाइमआउट मान निर्दिष्ट करें (डिफ़ॉल्ट 3 है)। ध्यान रखें कि एक एकल IP पता कुछ परिस्थितियों में 200 से अधिक अनुरोध उत्पन्न कर सकता है (हालाँकि अधिकांश स्कैन इस मात्रा तक नहीं पहुँचते हैं), इसलिए आम तौर पर कम टाइमआउट बेहतर होता है।
आउटपुट: स्कैन परिणाम डिफ़ॉल्ट रूप से JSON प्रारूप में मुद्रित होते हैं। stdout पर प्रिंट करने के बजाय आउटपुट को फ़ाइल में सहेजने के लिए, फ़ाइल नाम के साथ -o का उपयोग करें।
$ ./exchange-scanner.py -q -t 192.168.5.3
[
{
"hostname": "192.168.5.3",
"ip_address": "192.168.5.3",
"build_number": "15.2.1118",
"exchange_services": [
"https://192.168.5.3:443",
"imaps://192.168.5.3:993"
],
"product_name": "Exchange Server 2019 CU12 (2022H1)",
"major_version": "2019",
"update": "Cumulative Update 12",
"security_update": null,
"release_date": "2022-04-20",
"recalled": false,
"cpes": [
"cpe:2.3:a:microsoft:exchange_server:2019:cumulative_update_12:*:*:*:*:*:*",
"cpe:2.3:a:microsoft:outlook_web_access:2019:cumulative_update_12:*:*:*:*:*:*"
]
}
]
बिना पूर्व सहमति के लक्ष्यों पर हमला करने के लिए इस टूल का उपयोग अवैध है। सभी लागू स्थानीय, राज्य और संघीय कानूनों का पालन करना अंतिम उपयोगकर्ता की ज़िम्मेदारी है। डेवलपर्स कोई दायित्व नहीं मानते हैं और इस प्रोग्राम के कारण होने वाले किसी भी दुरुपयोग या क्षति के लिए ज़िम्मेदार नहीं हैं।
यह प्रोजेक्ट GNU General Public License के अंतर्गत लाइसेंस प्राप्त है।
recalled फ़ील्ड के माध्यम से Microsoft द्वारा वापस बुलाए गए अपडेट को भी चिह्नित करता है।