
Identifica i server Microsoft Exchange esposti pubblicamente e determina le loro versioni software.

Questo strumento esegue la scansione di diversi servizi comuni esposti al pubblico su un host target per rilevare Microsoft Exchange Server e, se possibile, identificarne la versione del software tramite fingerprinting.
A tale scopo, utilizza le seguenti tecniche:
I numeri di build rilevati vengono confrontati con una tabella delle versioni estratta via scraping da Microsoft che copre tutte le release da Exchange Server 5.5 fino a Exchange Server Subscription Edition (SE), inclusi i livelli Service Pack (SP), Cumulative Update (CU), Security Update (SU), Hotfix Update (HU) e Update Rollup (RU). Le corrispondenze vengono riportate con nome del prodotto, data di rilascio e stringhe CPE nel formato del dizionario NVD.
La modalità consigliata per eseguire lo scanner è tramite Docker, che non richiede dipendenze locali oltre a Docker stesso. Per eseguire invece lo script direttamente, è stato progettato per l'uso su Debian Linux a 64 bit, ma dovrebbe funzionare con qualsiasi variante Linux supportata da Python 3, dnsx e fingerprintx (con modifiche minori allo script di installazione).
Creare l'immagine. Essa include Python, i pacchetti Python bloccati alle versioni specifiche e i binari dnsx e fingerprintx con versioni fisse, e recupera la tabella delle versioni di Exchange Server da Microsoft al momento della build:
docker build -t exchange-scanner .
Quindi eseguire lo scanner, passando gli stessi argomenti che si passerebbero allo script (descritti nella sezione Utilizzo di seguito):
# 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
Ricostruire l'immagine per aggiornare la tabella delle versioni.
Eseguire scripts/install-requirements.sh per installare gli strumenti, i pacchetti e le altre dipendenze richieste. I pacchetti Python sono bloccati a versioni specifiche in scripts/requirements.txt.
Sentiti libero di eseguire nuovamente scripts/get-exchange-versions.py separatamente in qualsiasi momento per aggiornare la tabella delle versioni del software presente in exchange-versions.json.
Eseguire lo script exchange-scanner.py con -h per visualizzare i dettagli di utilizzo:
❯ ./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)
Richiesti: -t o -l
-t con un singolo hostname o indirizzo IP. Se l'hostname risolve a più IP, lo script eseguirà la scansione di ciascuno di essi separatamente.-l con il nome del file.Registrazione (log): per sopprimere la maggior parte dell'output dei log, usa -q. Per visualizzare maggiori dettagli nei log, usa -d.
Timeout: per modificare il tempo massimo di risposta per ogni richiesta HTTP, specifica un valore di timeout in secondi (il default è 3). Tieni presente che un singolo indirizzo IP può generare oltre 200 richieste in determinate circostanze (anche se la maggior parte delle scansioni non raggiunge questo volume), quindi un timeout più breve è generalmente preferibile.
Output: i risultati della scansione vengono stampati in formato JSON per impostazione predefinita. Per salvare l'output in un file invece di stamparlo su stdout, usa -o con un nome file.
$ ./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:*:*:*:*:*:*"
]
}
]
L'utilizzo di questo strumento per attaccare target senza il preventivo consenso reciproco è illegale. È responsabilità dell'utente finale rispettare tutte le leggi locali, statali e federali applicabili. Gli sviluppatori non si assumono alcuna responsabilità e non sono responsabili per qualsiasi uso improprio o danno causato da questo programma.
Questo progetto è concesso in licenza secondo la GNU General Public License.
recalled nel suo output.