
Outil d'empreinte des services réseau Microsoft
Version: 1.0
Auteur : Laurent Gaffie
Société : Secorizon
MSFinger est un outil d'empreinte réseau haute performance conçu pour la reconnaissance de réseaux internes. Il identifie rapidement les services Microsoft, détecte les configurations de sécurité et met en évidence les vulnérabilités potentielles sur les protocoles SMB, LDAP et LDAPS.
Fonctionnalités clés :
MSFinger est écrit en Python pur. Aucune dépendance supplémentaire requise au-delà de Python 3.6+.
cd /path/to/MSFinger
chmod +x MSFinger.py
python3 MSFinger.py -i <target> [options]
* Soit -i ou -f doit être spécifié
python3 MSFinger.py -i 192.168.1.10
python3 MSFinger.py -i 192.168.1.0/24
python3 MSFinger.py -i 192.168.1.1-50
python3 MSFinger.py -f targets.txt
Exemple targets.txt :
192.168.1.0/24
10.0.0.1-100
172.16.5.50
# Comments are supported
192.168.2.0/25
# 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
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
Les résultats sont affichés en temps réel avec des indicateurs de sécurité colorés :
[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)
Informations SMB :
SMB: X.X.X - Version du dialecte SMB (2.0.2, 2.1, 3.0, 3.0.2, 3.1.1)Signing: <status> - required/enabled/disabledOS: <version> - Version Windows avec numéro de buildDomain: <name> - Nom de domaine/groupe de travail NetBIOSBoot: <time> - Heure de démarrage du système (ou Disabled/Unknown)Statut SMB1 :
SMB1: disabled - SMB1 non pris en charge (sécurisé)SMB1: supported, Signing: <status> - SMB1 activé (risque potentiel)Services :
RDP - Protocole Remote Desktop (port 3389) ouvertMSSQL - Microsoft SQL Server (port 1433) ouvertLDAP (signing: <status>) - LDAP sur le port 389LDAPS (signing: <status>, channel binding: <status>) - LDAPS sur le port 636LDAPS (port open, <error>) - Port LDAPS répondant mais échec de la poignée de main SSLMSFinger stocke tous les résultats de scan dans une base de données SQLite pour un stockage et une analyse persistants.
hosts# 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"
Protocoles testés :
Informations recueillies :
required - Le serveur exige la signature des messages (sécurisé)enabled - Le serveur prend en charge mais n'exige pas la signaturedisabled - Aucune prise en charge de signature (vulnérable)Correspondance des versions OS :
Teste la liaison anonyme pour déterminer les exigences de signature :
Teste la connexion SSL/TLS avec une liaison LDAP :
Résultats possibles :
signing: required, channel binding: required - Sécurité maximale (sécurisé)signing: not_required, channel binding: not_required - Aucune protection (vulnérable)port open, SSL handshake failed - Port répondant mais échec de négociation SSLport open, Connection error: 104 - Connexion réinitialisée par le pairSignature SMB désactivée :
Signature LDAP non requise :
LdapEnforceChannelBinding=2 et LDAPServerIntegrity=2 dans le registreLDAPS sans liaison de canal :
Signature SMB activée (non requise) :
SMB1 pris en charge :
Signature SMB requise :
Signature LDAP/LDAPS requise :
Liaison de canal appliquée :
Chaque worker consomme une mémoire minimale (~1-2 Mo). Ajustez les workers en fonction des ressources système :
# 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
Vérifier la connectivité réseau :
ping <target_ip>
telnet <target_ip> 445
Augmenter le timeout :
python3 MSFinger.py -i <target> -t 3.0
Vérifier les règles de pare-feu :
"SSL handshake failed" ou "Connection error: 104" :
openssl s_client -connect <ip>:636 pour diagnostiquerSi vous scannez depuis plusieurs processus :
# 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 &
Assurez-vous que le script est exécutable :
chmod +x MSFinger.py
Identifiez d'abord les hôtes SMB actifs, puis analysez les empreintes :
nmap -p445 --open -oG - 192.168.1.0/24 | awk '/445\/open/{print $2}' > smb_hosts.txt
python3 MSFinger.py -f smb_hosts.txt
Surveillez les changements réseau avec cron :
# 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
Interrogez et corrigez depuis PowerShell :
# 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
}
Auteur : Laurent Gaffie ([email protected])
Licence : GNU General Public License v3.0
Ce programme est un logiciel libre : vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation, soit la version 3 de la Licence, soit (à votre discrétion) toute version ultérieure.
Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de COMMERCIALISATION ou D'ADAPTATION À UN USAGE PARTICULIER. Voir la Licence Publique Générale GNU pour plus de détails.
| Option | Description | Par défaut |
|---|
-i, --ip | IP cible, plage CIDR ou plage IP | Requis* |
-f, --file | Fichier contenant les cibles (une par ligne) | Requis* |
-t, --timeout | Timeout de connexion en secondes | 1.0 |
-w, --workers | Nombre de workers simultanés | 100 |
-d, --database | Fichier de base de données SQLite pour les résultats | MSFinger.db |
--no-color | Désactiver la sortie colorée | Désactivé |
| Colonne | Type | Description |
|---|
id | INTEGER | Clé primaire (auto-incrémentée) |
ip | TEXT | Adresse IP (unique) |
hostname | TEXT | Nom d'hôte (réservé pour usage futur) |
os_version | TEXT | Version du système d'exploitation |
os_build | INTEGER | Numéro de build OS |
domain | TEXT | Nom de domaine/groupe de travail |
boot_time | TEXT | Horodatage de démarrage du système |
smb_dialect | TEXT | Version du protocole SMB |
smb_signing | TEXT | Statut de signature SMB |
smb1_supported | INTEGER | SMB1 activé (0=non, 1=oui) |
smb1_signing | TEXT | Statut de signature SMB1 |
rdp_open | INTEGER | Port RDP ouvert (0=non, 1=oui) |
mssql_open | INTEGER | Port MSSQL ouvert (0=non, 1=oui) |
ldap_signing | TEXT | Statut de signature LDAP |
ldaps_signing | TEXT | Statut de signature LDAPS |
ldaps_channel_binding | TEXT | Statut de liaison de canal LDAPS |
ldaps_error | TEXT | Erreur de connexion LDAPS (le cas échéant) |
scan_time | TIMESTAMP | Horodatage du premier scan |
last_seen | TIMESTAMP | Horodatage du scan le plus récent |
| Plage de build | Système d'exploitation |
|---|
| 10240 | Windows 10 1507 |
| 14393 | Windows 10 1607 / Server 2016 |
| 17763 | Windows 10 1809 / Server 2019 |
| 19041-19045 | Windows 10 20H2 - 22H2 |
| 20348 | Windows Server 2022 21H2 |
| 22000+ | Windows 11 |
| 25398 | Windows Server 2025 |
| Type de réseau | Timeout recommandé | Workers |
|---|
| Réseau local rapide (1 Gbit/s+) | 0.5s | 200-300 |
| Réseau interne normal | 1.0s (défaut) | 100-150 |
| Réseau lent/sans fil | 2.0-3.0s | 50-100 |
| Connexion VPN | 3.0-5.0s | 30-50 |