
Öffentlich zugängliche Microsoft Exchange-Server identifizieren und deren Softwareversionen ermitteln

Dieses Tool scannt mehrere gängige öffentlich erreichbare Dienste auf einem Zielhost, um Microsoft Exchange Server zu erkennen und, wenn möglich, dessen Softwareversion zu identifizieren.
Hierzu verwendet es die folgenden Techniken:
Erkannte Build-Nummern werden mit einer von Microsoft extrahierten Versionstabelle abgeglichen, die alle Versionen von Exchange Server 5.5 bis Exchange Server Subscription Edition (SE) abdeckt, einschließlich Service Pack (SP), Cumulative Update (CU), Security Update (SU), Hotfix Update (HU) und Update Rollup (RU). Übereinstimmungen werden mit Produktname, Veröffentlichungsdatum und CPE-Zeichenfolgen im NVD-Wörterbuchformat gemeldet.
Die empfohlene Methode zum Ausführen des Scanners ist Docker, das außer Docker selbst keine lokalen Abhängigkeiten erfordert. Wenn Sie das Skript stattdessen direkt ausführen möchten: Es wurde für den Einsatz auf 64-Bit-Debian-Linux entwickelt, sollte jedoch mit jeder Linux-Variante funktionieren, die von Python 3, dnsx und fingerprintx unterstützt wird (mit geringfügigen Änderungen am Installationsskript).
Erstellen Sie das Image. Es bündelt Python, die festgelegten (gepinnten) Python-Pakete sowie versionsgebundene dnsx- und fingerprintx-Binärdateien und extrahiert die Exchange-Server-Versionstabelle zur Build-Zeit von Microsoft:
docker build -t exchange-scanner .
Führen Sie dann den Scanner aus, wobei Sie dieselben Argumente übergeben, die Sie auch an das Skript übergeben würden (beschrieben unter Verwendung weiter unten):
# 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
Erstellen Sie das Image neu, um die Versionstabelle zu aktualisieren.
Führen Sie scripts/install-requirements.sh aus, um die erforderlichen Tools, Pakete und anderen Abhängigkeiten zu installieren. Die Python-Pakete sind in scripts/requirements.txt auf bestimmte Versionen festgelegt (gepinnt).
Sie können scripts/get-exchange-versions.py jederzeit separat erneut ausführen, um die in exchange-versions.json enthaltene Software-Versionstabelle zu aktualisieren.
Führen Sie das Skript exchange-scanner.py mit -h aus, um Details zur Verwendung anzuzeigen:
❯ ./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)
Erforderlich: -t oder -l
-t mit einem einzelnen Hostnamen oder einer IP-Adresse. Wenn der Hostname zu mehreren IPs aufgelöst wird, scannt das Skript jede davon separat.-l mit dem Namen der Datei.Protokollierung: Um die meiste Protokollausgabe zu unterdrücken, verwenden Sie -q. Um weitere Protokolldetails anzuzeigen, verwenden Sie -d.
Zeitlimit: Um die maximale Antwortzeit pro HTTP-Anfrage zu ändern, geben Sie einen Zeitlimitwert in Sekunden an (Standard ist 3). Beachten Sie, dass eine einzelne IP-Adresse unter bestimmten Umständen über 200 Anfragen erzeugen kann (obwohl die meisten Scans diesen Umfang nicht erreichen), daher ist ein kürzeres Zeitlimit im Allgemeinen vorzuziehen.
Ausgabe: Scan-Ergebnisse werden standardmäßig im JSON-Format ausgegeben. Um die Ausgabe in einer Datei zu speichern, anstatt sie auf stdout zu schreiben, verwenden Sie -o mit einem Dateinamen.
$ ./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:*:*:*:*:*:*"
]
}
]
Die Verwendung dieses Tools zum Angriff auf Ziele ohne vorherige gegenseitige Zustimmung ist illegal. Es liegt in der Verantwortung des Endbenutzers, alle geltenden lokalen, staatlichen und bundesstaatlichen Gesetze einzuhalten. Die Entwickler übernehmen keine Haftung und sind nicht verantwortlich für Missbrauch oder Schäden, die durch dieses Programm verursacht werden.
Dieses Projekt ist unter der GNU General Public License lizenziert.
recalled-Feld in seiner Ausgabe.