## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-SECORIZON-MSFINGER
# MSFinger — Инструмент для снятия отпечатков сетевых служб Microsoft
**Версия:** 1.0
**Автор:** Laurent Gaffie
**Компания:** Secorizon
## Обзор
MSFinger — это высокопроизводительный инструмент для снятия отпечатков сети, предназначенный для внутренней разведки сети. Он быстро идентифицирует службы Microsoft, обнаруживает конфигурации безопасности и выделяет потенциальные уязвимости в протоколах SMB, LDAP и LDAPS.
**Ключевые особенности:**
* Быстрое параллельное сканирование, оптимизированное для внутренних сетей (тайм-аут по умолчанию 1 секунда)
* Обнаружение версий SMB/SMB2/SMB3 и подписывания
* Обнаружение подписывания и привязки каналов LDAP/LDAPS
* Идентификация версии ОС с сопоставлением номеров сборок
* База данных SQLite для постоянного хранения результатов сканирования
* Цветной вывод, выделяющий риски безопасности
* Поддержка отдельных IP-адресов, диапазонов CIDR, диапазонов IP и ввода из файла
* * *
## Установка
MSFinger написан на чистом Python. Дополнительные зависимости не требуются, кроме Python 3.6+.
root@kitploit:~
cd /path/to/MSFinger
chmod +x MSFinger.py
* * *
## Использование
### Базовый синтаксис
root@kitploit:~
python3 MSFinger.py -i <target> [options]
### Параметры командной строки
* Должен быть указан либо `-i`, либо `-f`
* * *
## Примеры
### Сканирование одного хоста
root@kitploit:~
python3 MSFinger.py -i 192.168.1.10
### Сканирование подсети (CIDR)
root@kitploit:~
python3 MSFinger.py -i 192.168.1.0/24
### Сканирование диапазона IP
root@kitploit:~
python3 MSFinger.py -i 192.168.1.1-50
### Несколько диапазонов из файла
root@kitploit:~
python3 MSFinger.py -f targets.txt
Пример `targets.txt`:
root@kitploit:~
192.168.1.0/24
10.0.0.1-100
172.16.5.50
# Comments are supported
192.168.2.0/25
### Пользовательские тайм-аут и рабочие потоки
root@kitploit:~
# Faster scan with shorter timeout and more workers
python3 MSFinger.py -i 10.0.0.0/16 -t 0.3 -w 200
# More reliable scan with longer timeout
python3 MSFinger.py -i 192.168.1.0/24 -t 1.0 -w 50
### Пользовательская база данных
root@kitploit:~
python3 MSFinger.py -i 192.168.1.0/24 -d pentest_2026.db
### Отключение цветов (для логирования)
root@kitploit:~
python3 MSFinger.py -i 192.168.1.0/24 --no-color > scan_results.txt
* * *
## Формат вывода
### Вывод в консоль
Результаты отображаются в реальном времени с цветовыми индикаторами безопасности:
root@kitploit:~
[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:**
* `SMB: X.X.X` — версия диалекта SMB (2.0.2, 2.1, 3.0, 3.0.2, 3.1.1)
* `Signing: <status>` — обязательно/включено/отключено
* `OS: <version>` — версия Windows с номером сборки
* `Domain: <name>` — имя домена/рабочей группы NetBIOS
* `Boot: <time>` — время загрузки системы (или Disabled/Unknown)
**Статус SMB1:**
* `SMB1: disabled` — SMB1 не поддерживается (безопасно)
* `SMB1: supported, Signing: <status>` — SMB1 включён (потенциальный риск)
**Службы:**
* `RDP` — Протокол удалённого рабочего стола (порт 3389) открыт
* `MSSQL` — Microsoft SQL Server (порт 1433) открыт
* `LDAP (signing: <status>)` — LDAP на порту 389
* `LDAPS (signing: <status>, channel binding: <status>)` — LDAPS на порту 636
* `LDAPS (port open, <error>)` — Порт LDAPS отвечает, но SSL-рукопожатие не удалось
* * *
## Схема базы данных
MSFinger сохраняет все результаты сканирования в базе данных SQLite для постоянного хранения и анализа.
### Таблица: `hosts`
### Поведение базы данных
* **Существующая база данных:** Записи обновляются последними данными сканирования (операция upsert)
* **Новая база данных:** Создаётся автоматически с правильной схемой
* **Дублирующиеся IP-адреса:** Последний результат сканирования перезаписывает предыдущие данные для того же IP
### Запросы к базе данных
root@kitploit:~
# View all vulnerable hosts (no SMB signing)
sqlite3 MSFinger.db "SELECT ip, os_version, smb_signing FROM hosts WHERE smb_signing != 'required'"
# Find hosts with LDAP signing disabled
sqlite3 MSFinger.db "SELECT ip, domain, ldap_signing FROM hosts WHERE ldap_signing = 'not_required'"
# List all Windows Server 2022 hosts
sqlite3 MSFinger.db "SELECT ip, os_version, domain FROM hosts WHERE os_version LIKE '%Server 2022%'"
# Export to CSV
sqlite3 -header -csv MSFinger.db "SELECT * FROM hosts" > results.csv
# Count hosts by OS
sqlite3 MSFinger.db "SELECT os_version, COUNT(*) FROM hosts GROUP BY os_version"
* * *
## Детали обнаружения
### Обнаружение SMB/SMB2/SMB3
**Проверяемые протоколы:**
* SMB1 (устаревший протокол, риск безопасности, если включён)
* SMB2/3 (современные протоколы с несколькими диалектами)
**Собираемая информация:**
1. **Версия диалекта:** 2.0.2, 2.1, 3.0, 3.0.2, 3.1.1
2. **Статус подписывания:**
* `required` — сервер требует подписывания сообщений (безопасно)
* `enabled` — сервер поддерживает, но не требует подписывания
* `disabled` — поддержка подписывания отсутствует (уязвимо)
3. **Версия ОС:** извлекается из запроса NTLMSSP
4. **Номер сборки:** номер сборки Windows для точной идентификации версии
5. **Домен:** имя домена или рабочей группы NetBIOS
6. **Время загрузки:** временная метка запуска системы (если доступно)
**Сопоставление версий ОС:**
### Обнаружение LDAP (порт 389)
Проверяет анонимное подключение для определения требований к подписыванию:
* **Код результата 0:** Успех — подписывание НЕ требуется (уязвимо к relay-атакам)
* **Код результата 8:** Требуется строгая аутентификация — подписывание ТРЕБУЕТСЯ (безопасно)
* **Другие коды:** Различные ошибки аутентификации
### Обнаружение LDAPS (порт 636)
Проверяет 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 отключено:**
* Уязвимо к relay-атакам SMB
* Злоумышленник может перехватывать и ретранслировать аутентификацию
* **Рекомендация:** Включите подписывание SMB через групповую политику
**Подписывание LDAP не требуется:**
* Уязвимо к relay-атакам LDAP
* Учётные данные могут быть ретранслированы на другие службы
* **Рекомендация:** Установите `LdapEnforceChannelBinding=2` и `LDAPServerIntegrity=2` в реестре
**LDAPS без привязки канала:**
* Уязвимо к relay-атакам LDAPS, несмотря на шифрование
* **Рекомендация:** Включите расширенную защиту для аутентификации
### Предупреждения (🟡 Жёлтый)
**Подписывание SMB включено (не обязательно):**
* Лучше, чем отключено, но не принудительно
* Клиенты могут отказаться от подписывания
* **Рекомендация:** Измените с «включено» на «требуется»
**SMB1 поддерживается:**
* Устаревший протокол с известными уязвимостями
* Должен быть отключён, если не требуется для устаревших систем
* **Рекомендация:** Отключите SMBv1 через PowerShell или групповую политику
### Хорошие конфигурации (🟢 Зелёный)
**Подписывание SMB требуется:**
* Весь трафик SMB криптографически подписан
* Предотвращает relay-атаки
**Подписывание LDAP/LDAPS требуется:**
* Сообщения LDAP подписаны
* Защищает от подмены и relay-атак
**Привязка канала принудительно:**
* Привязка TLS-канала предотвращает relay через SSL
* Самый высокий уровень безопасности LDAPS
* * *
## Настройка производительности
### Рекомендации по тайм-ауту
### Память
Каждый рабочий поток потребляет минимум памяти (~1-2 МБ). Настройте количество потоков в зависимости от ресурсов системы:
root@kitploit:~
# High-performance scan (requires good CPU/RAM)
python3 MSFinger.py -i 10.0.0.0/8 -t 0.5 -w 500
# Conservative scan (low resource usage)
python3 MSFinger.py -i 192.168.0.0/16 -t 2.0 -w 50
* * *
## Устранение неполадок
### Результаты не отображаются
1. **Проверьте сетевое подключение:**
root@kitploit:~
ping <target_ip>
telnet <target_ip> 445
2. **Увеличьте тайм-аут:**
root@kitploit:~
python3 MSFinger.py -i <target> -t 3.0
3. **Проверьте правила брандмауэра:**
* Убедитесь, что порты 445, 389, 636, 3389, 1433 доступны
* Проверьте, не блокирует ли сканирование брандмауэр хоста
### Ошибки подключения LDAPS
**"SSL handshake failed" или "Connection error: 104":**
* Сервер может требовать аутентификацию по клиентскому сертификату
* Сервер может использовать нестандартную конфигурацию SSL/TLS
* Попробуйте выполнить `openssl s_client -connect <ip>:636` для диагностики
### База данных заблокирована
Если сканирование выполняется из нескольких процессов:
root@kitploit:~
# Use different database files
python3 MSFinger.py -i 192.168.1.0/24 -d scan1.db &
python3 MSFinger.py -i 192.168.2.0/24 -d scan2.db &
### Ошибки прав доступа
Убедитесь, что скрипт является исполняемым:
root@kitploit:~
chmod +x MSFinger.py
* * *
## Примеры интеграции
### Интеграция с Nmap
Сначала определите живые SMB-хосты, затем снимите отпечатки:
root@kitploit:~
nmap -p445 --open -oG - 192.168.1.0/24 | awk '/445\/open/{print $2}' > smb_hosts.txt
python3 MSFinger.py -f smb_hosts.txt
### Плановое сканирование
Мониторинг изменений в сети с помощью cron:
root@kitploit:~
# Add to crontab (every day at 2 AM)
0 2 * * * /usr/bin/python3 /path/to/MSFinger.py -i 192.168.1.0/24 -d /var/scans/daily_scan.db
### Экспорт в PowerShell
Запрос и исправление из PowerShell:
root@kitploit:~
# Install SQLite PowerShell module
Install-Module -Name SimplySql
# Query vulnerable hosts
Open-SQLiteConnection -DataSource "MSFinger.db"
$vulnerable = Invoke-SqlQuery -Query "SELECT ip FROM hosts WHERE smb_signing != 'required'"
Close-SqlConnection
# Remediate
foreach ($host in $vulnerable) {
Set-SmbServerConfiguration -ComputerName $host.ip -RequireSecuritySignature $true -Force
}
* * *
## Авторы
**Автор:** Laurent Gaffie (some-email@example.com)
**Лицензия:** GNU General Public License v3.0
* * *
## Лицензия
Эта программа является свободным программным обеспечением: вы можете распространять её и/или изменять в соответствии с условиями Стандартной общественной лицензии GNU, опубликованной Фондом свободного программного обеспечения, либо версии 3 Лицензии, либо (по вашему выбору) любой более поздней версии.
Эта программа распространяется в надежде, что она будет полезной, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ; даже без подразумеваемых гарантий КОММЕРЧЕСКОЙ ЦЕННОСТИ или ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЁННОЙ ЦЕЛИ. Подробнее см. в Стандартной общественной лицензии GNU.