Sploitus

Exploit for MSFinger

kitploit · 2026-08-27

Exploit Code

MARKDOWN486 lines
## 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.