
Определение публично доступных серверов 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, но должен работать с любым вариантом Linux, поддерживаемым Python 3, dnsx и fingerprintx (с небольшими изменениями в скрипте установки).
Соберите образ. Он включает Python, зафиксированные Python-пакеты и привязанные к версиям бинарные файлы dnsx и fingerprintx, а при сборке загружает таблицу версий Exchange Server с сайта Microsoft:
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.
Вы можете в любой момент повторно запустить scripts/get-exchange-versions.py отдельно, чтобы обновить таблицу версий ПО, находящуюся в exchange-versions.json.
Запустите скрипт 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-адресом. Если имя хоста разрешается в несколько 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 в выводе.