Skip to content
MSFinger exploit

MSFinger exploit

Sploitus September 9, 2026

MSFinger — это высокопроизводительный инструмент для снятия отпечатков сети, предназначенный для внутренней разведки сети. Он быстро идентифицирует службы Microsoft, обнаруживает конфигурации безопасности и выделяет потенциальные уязвимости в протоколах SMB, LDAP и LDAPS.

* Быстрое параллельное сканирование, оптимизированное для внутренних сетей (тайм-аут по умолчанию 1 секунда)

* Обнаружение версий SMB/SMB2/SMB3 и подписывания

* Обнаружение подписывания и привязки каналов LDAP/LDAPS

* Идентификация версии ОС с сопоставлением номеров сборок

* База данных SQLite для постоянного хранения результатов сканирования

* Цветной вывод, выделяющий риски безопасности

* Поддержка отдельных IP-адресов, диапазонов CIDR, диапазонов IP и ввода из файла

MSFinger написан на чистом Python. Дополнительные зависимости не требуются, кроме Python 3.6+.

python3 MSFinger.py -i [options]

* Должен быть указан либо `-i`, либо `-f`

### Пользовательские тайм-аут и рабочие потоки

# Faster scan with shorter timeout and more workers

python3 MSFinger.py -i 10.0.0.0/16 -t 0.3 -w 200

python3 MSFinger.py -i 192.168.1.0/24 -t 1.0 -w 50

python3 MSFinger.py -i 192.168.1.0/24 -d pentest_2026.db

python3 MSFinger.py -i 192.168.1.0/24 --no-color > scan_results.txt

Результаты отображаются в реальном времени с цветовыми индикаторами безопасности:

[192.168.1.10] SMB: 3.1.1, Signing: required, OS: Windows Server 2022 21H2, Domain: CORP.LOCAL, Boot: 2026-01-01 10:30:15 | SMB1: disabled | Services: RDP, LDAP (signing: required), LDAPS (signing: required, channel binding: required)

* 🟢 **ЗЕЛЁНЫЙ** : Безопасная конфигурация (подписывание обязательно)

* 🟡 **ЖЁЛТЫЙ** : Предупреждение (включено, но не обязательно, или порт открыт с ошибками)

* 🔴 **КРАСНЫЙ** : Уязвимо (подписывание отключено или не обязательно)

* 🔵 **СИНИЙ** : Информационное (SMB1 отключён, статус службы)

* `SMB: X.X.X` — версия диалекта SMB (2.0.2, 2.1, 3.0, 3.0.2, 3.1.1)

* `Signing: ` — обязательно/включено/отключено

* `OS: ` — версия Windows с номером сборки

* `Domain: ` — имя домена/рабочей группы NetBIOS

* `Boot: ` — время загрузки системы (или Disabled/Unknown)

* `SMB1: disabled` — SMB1 не поддерживается (безопасно)

* `SMB1: supported, Signing: ` — SMB1 включён (потенциальный риск)

* `RDP` — Протокол удалённого рабочего стола (порт 3389) открыт

* `MSSQL` — Microsoft SQL Server (порт 1433) открыт

* `LDAP (signing: )` — LDAP на порту 389

* `LDAPS (signing: , channel binding: )` — LDAPS на порту 636

* `LDAPS (port open, )` — Порт LDAPS отвечает, но SSL-рукопожатие не удалось

MSFinger сохраняет все результаты сканирования в базе данных SQLite для постоянного хранения и анализа.

* **Существующая база данных:** Записи обновляются последними данными сканирования (операция upsert)

* **Новая база данных:** Создаётся автоматически с правильной схемой

* **Дублирующиеся IP-адреса:** Последний результат сканирования перезаписывает предыдущие данные для того же IP

# View all vulnerable hosts (no SMB signing)

sqlite3 MSFinger.db "SELECT ip, os_version, smb_signing FROM hosts WHERE smb_signing != 'required'"

sqlite3 MSFinger.db "SELECT ip, domain, ldap_signing FROM hosts WHERE ldap_signing = 'not_required'"

sqlite3 MSFinger.db "SELECT ip, os_version, domain FROM hosts WHERE os_version LIKE '%Server 2022%'"

sqlite3 -header -csv MSFinger.db "SELECT * FROM hosts" > results.csv

sqlite3 MSFinger.db "SELECT os_version, COUNT(*) FROM hosts GROUP BY os_version"

* SMB1 (устаревший протокол, риск безопасности, если включён)

* SMB2/3 (современные протоколы с несколькими диалектами)

1. **Версия диалекта:** 2.0.2, 2.1, 3.0, 3.0.2, 3.1.1

* `required` — сервер требует подписывания сообщений (безопасно)

* `enabled` — сервер поддерживает, но не требует подписывания

* `disabled` — поддержка подписывания отсутствует (уязвимо)

3. **Версия ОС:** извлекается из запроса NTLMSSP

4. **Номер сборки:** номер сборки Windows для точной идентификации версии

5. **Домен:** имя домена или рабочей группы NetBIOS

6. **Время загрузки:** временная метка запуска системы (если доступно)

Проверяет анонимное подключение для определения требований к подписыванию:

* **Код результата 0:** Успех — подписывание НЕ требуется (уязвимо к relay-атакам)

* **Код результата 8:** Требуется строгая аутентификация — подписывание ТРЕБУЕТСЯ (безопасно)

* **Другие коды:** Различные ошибки аутентификации

Проверяет SSL/TLS-соединение с привязкой LDAP:

1. **SSL-рукопожатие:** Попытка TLS-соединения с допустимыми наборами шифров

2. **Обнаружение подписывания:** Проверяет подписывание сообщений LDAP через SSL

3. **Привязка канала:** Определяет, применяется ли привязка TLS-канала

* `signing: required, channel binding: required` — максимальная безопасность (безопасно)

* `signing: not_required, channel binding: not_required` — защита отсутствует (уязвимо)

* `port open, SSL handshake failed` — порт отвечает, но SSL-согласование не удалось

* `port open, Connection error: 104` — соединение сброшено партнёром

* Злоумышленник может перехватывать и ретранслировать аутентификацию

* **Рекомендация:** Включите подписывание SMB через групповую политику

* Учётные данные могут быть ретранслированы на другие службы

* **Рекомендация:** Установите `LdapEnforceChannelBinding=2` и `LDAPServerIntegrity=2` в реестре

* Уязвимо к relay-атакам LDAPS, несмотря на шифрование

* **Рекомендация:** Включите расширенную защиту для аутентификации

**Подписывание SMB включено (не обязательно):**

* Лучше, чем отключено, но не принудительно

* Клиенты могут отказаться от подписывания

* **Рекомендация:** Измените с «включено» на «требуется»

* Устаревший протокол с известными уязвимостями

* Должен быть отключён, если не требуется для устаревших систем

* **Рекомендация:** Отключите SMBv1 через PowerShell или групповую политику

* Весь трафик SMB криптографически подписан

* Привязка TLS-канала предотвращает relay через SSL

* Самый высокий уровень безопасности LDAPS

Каждый рабочий поток потребляет минимум памяти (~1-2 МБ). Настройте количество потоков в зависимости от ресурсов системы:

# High-performance scan (requires good CPU/RAM)

python3 MSFinger.py -i 10.0.0.0/8 -t 0.5 -w 500

python3 MSFinger.py -i 192.168.0.0/16 -t 2.0 -w 50

* Убедитесь, что порты 445, 389, 636, 3389, 1433 доступны

* Проверьте, не блокирует ли сканирование брандмауэр хоста

**"SSL handshake failed" или "Connection error: 104":**

* Сервер может требовать аутентификацию по клиентскому сертификату

* Сервер может использовать нестандартную конфигурацию SSL/TLS

* Попробуйте выполнить `openssl s_client -connect :636` для диагностики

Если сканирование выполняется из нескольких процессов:

python3 MSFinger.py -i 192.168.1.0/24 -d scan1.db &

python3 MSFinger.py -i 192.168.2.0/24 -d scan2.db &

Убедитесь, что скрипт является исполняемым:

Сначала определите живые SMB-хосты, затем снимите отпечатки:

nmap -p445 --open -oG - 192.168.1.0/24 | awk '/445\/open/{print $2}' > smb_hosts.txt

Мониторинг изменений в сети с помощью cron:

0 2 * * * /usr/bin/python3 /path/to/MSFinger.py -i 192.168.1.0/24 -d /var/scans/daily_scan.db

Open-SQLiteConnection -DataSource "MSFinger.db"

$vulnerable = Invoke-SqlQuery -Query "SELECT ip FROM hosts WHERE smb_signing != 'required'"

Set-SmbServerConfiguration -ComputerName $host.ip -RequireSecuritySignature $true -Force

**Автор:** Laurent Gaffie ([email protected])

**Лицензия:** GNU General Public License v3.0

Эта программа является свободным программным обеспечением: вы можете распространять её и/или изменять в соответствии с условиями Стандартной общественной лицензии GNU, опубликованной Фондом свободного программного обеспечения, либо версии 3 Лицензии, либо (по вашему выбору) любой более поздней версии.

Эта программа распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОЙ ЦЕЛИ. Подробнее см. в Стандартной общественной лицензии GNU.

Extracted Entities

Email Addresses (1)

IP Addresses (1)

Platforms (2)