
Identifica servidores Microsoft Exchange expuestos públicamente y determina sus versiones de software

Esta herramienta escanea varios servicios públicos comunes en un host objetivo para detectar Microsoft Exchange Server e identificar su versión de software si es posible.
Para ello, utiliza las siguientes técnicas:
Los números de compilación (build) detectados se comparan con una tabla de versiones extraída de Microsoft que cubre todas las versiones desde Exchange Server 5.5 hasta Exchange Server Subscription Edition (SE), incluyendo niveles de Service Pack (SP), Cumulative Update (CU), Security Update (SU), Hotfix Update (HU) y Update Rollup (RU). Las coincidencias se notifican con nombre de producto, fecha de lanzamiento y cadenas CPE en el formato del diccionario NVD.
La forma recomendada de ejecutar el escáner es con Docker, que no requiere dependencias locales más allá del propio Docker. Para ejecutar el script directamente, se diseñó para usarse en Debian Linux de 64 bits, pero debería funcionar con cualquier variante de Linux compatible con Python 3, dnsx y fingerprintx (con modificaciones menores al script de instalación).
Construya la imagen. Esta incluye Python, los paquetes de Python fijados (pinned) y binarios dnsx y fingerprintx con versiones bloqueadas, y extrae la tabla de versiones de Exchange Server de Microsoft en tiempo de compilación:
docker build -t exchange-scanner .
Luego ejecute el escáner, pasando los mismos argumentos que pasaría al script (descritos en la sección Uso más abajo):
# 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
Reconstruya la imagen para actualizar la tabla de versiones.
Ejecute scripts/install-requirements.sh para instalar las herramientas, paquetes y otras dependencias necesarias. Los paquetes de Python están fijados a versiones específicas en scripts/requirements.txt.
No dude en volver a ejecutar scripts/get-exchange-versions.py por separado en cualquier momento para actualizar la tabla de versiones de software que se encuentra en exchange-versions.json.
Ejecute el script exchange-scanner.py con -h para ver los detalles de uso:
❯ ./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)
Requerido: -t o -l
-t con un solo nombre de host o dirección IP. Si el nombre de host resuelve a varias IPs, el script escaneará cada una de ellas por separado.-l con el nombre del archivo.Registro (logging): Para suprimir la mayor parte de la salida de registro, use -q. Para ver más detalle de registro, use -d.
Tiempo de espera (timeout): Para cambiar el tiempo máximo de respuesta por solicitud HTTP, especifique un valor de tiempo de espera en segundos (el valor predeterminado es 3). Tenga en cuenta que una sola dirección IP puede generar más de 200 solicitudes en ciertas circunstancias (aunque la mayoría de los escaneos no alcanzan este volumen), por lo que un tiempo de espera más corto generalmente es preferible.
Salida: Los resultados del escaneo se imprimen en formato JSON de forma predeterminada. Para guardar la salida en un archivo en lugar de imprimirla en stdout, use -o con un nombre de archivo.
$ ./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:*:*:*:*:*:*"
]
}
]
El uso de esta herramienta para atacar objetivos sin consentimiento mutuo previo es ilegal. Es responsabilidad del usuario final cumplir con todas las leyes locales, estatales y federales aplicables. Los desarrolladores no asumen ninguna responsabilidad y no son responsables de ningún uso indebido o daño causado por este programa.
Este proyecto está licenciado bajo la GNU General Public License.
recalled en su salida.