
Herramienta de huellas digitales de servicios de red de Microsoft
Versión: 1.0
Autor: Laurent Gaffie
Empresa: Secorizon
MSFinger es una herramienta de identificación de red de alto rendimiento diseñada para el reconocimiento de redes internas. Identifica rápidamente servicios de Microsoft, detecta configuraciones de seguridad y resalta posibles vulnerabilidades en los protocolos SMB, LDAP y LDAPS.
Características Clave:
MSFinger está escrito en Python puro. No se requieren dependencias adicionales más allá de Python 3.6+.
cd /path/to/MSFinger
chmod +x MSFinger.py
python3 MSFinger.py -i <target> [options]
* Se debe especificar -i o -f
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
Ejemplo targets.txt:
192.168.1.0/24
10.0.0.1-100
172.16.5.50
# Comments are supported
192.168.2.0/25
# Escaneo más rápido con tiempo de espera más corto y más trabajadores
python3 MSFinger.py -i 10.0.0.0/16 -t 0.3 -w 200
# Escaneo más confiable con tiempo de espera más largo
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
Los resultados se muestran en tiempo real con indicadores de seguridad codificados por colores:
[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)
Información SMB:
SMB: X.X.X - versión del dialecto SMB (2.0.2, 2.1, 3.0, 3.0.2, 3.1.1)Signing: <status> - firma: requerida/habilitada/deshabilitadaOS: <version> - versión de Windows con número de compilaciónDomain: <name> - nombre del dominio/grupo de trabajo NetBIOSBoot: <time> - hora de arranque del sistema (o Deshabilitado/Desconocido)Estado de SMB1:
SMB1: disabled - SMB1 no soportado (seguro)SMB1: supported, Signing: <status> - SMB1 habilitado (riesgo potencial)Servicios:
RDP - Protocolo de Escritorio Remoto (puerto 3389) abiertoMSSQL - Microsoft SQL Server (puerto 1433) abiertoLDAP (signing: <status>) - LDAP en el puerto 389LDAPS (signing: <status>, channel binding: <status>) - LDAPS en el puerto 636LDAPS (port open, <error>) - Puerto LDAPS respondiendo pero el handshake SSL fallóMSFinger almacena todos los resultados de escaneo en una base de datos SQLite para almacenamiento y análisis persistentes.
hosts# Ver todos los hosts vulnerables (sin firma SMB)
sqlite3 MSFinger.db "SELECT ip, os_version, smb_signing FROM hosts WHERE smb_signing != 'required'"
# Buscar hosts con firma LDAP deshabilitada
sqlite3 MSFinger.db "SELECT ip, domain, ldap_signing FROM hosts WHERE ldap_signing = 'not_required'"
# Listar todos los hosts de Windows Server 2022
sqlite3 MSFinger.db "SELECT ip, os_version, domain FROM hosts WHERE os_version LIKE '%Server 2022%'"
# Exportar a CSV
sqlite3 -header -csv MSFinger.db "SELECT * FROM hosts" > results.csv
# Contar hosts por SO
sqlite3 MSFinger.db "SELECT os_version, COUNT(*) FROM hosts GROUP BY os_version"
Protocolos Probados:
Información Recopilada:
required - El servidor requiere firma de mensajes (seguro)enabled - El servidor soporta pero no requiere firmadisabled - No soporte de firma (vulnerable)Mapeo de Versiones del SO:
Prueba el enlace anónimo para determinar los requisitos de firma:
Prueba la conexión SSL/TLS con enlace LDAP:
Posibles Resultados:
signing: required, channel binding: required - Máxima seguridad (seguro)signing: not_required, channel binding: not_required - Sin protecciones (vulnerable)port open, SSL handshake failed - Puerto respondiendo pero la negociación SSL fallóport open, Connection error: 104 - Conexión reiniciada por el parFirma SMB Deshabilitada:
Firma LDAP No Requerida:
LdapEnforceChannelBinding=2 y LDAPServerIntegrity=2 en el registroLDAPS sin Enlace de Canal:
Firma SMB Habilitada (no requerida):
SMB1 Soportado:
Firma SMB Requerida:
Firma LDAP/LDAPS Requerida:
Enlace de Canal Aplicado:
Cada trabajador consume memoria mínima (~1-2MB). Ajusta los trabajadores según los recursos del sistema:
# Escaneo de alto rendimiento (requiere buena CPU/RAM)
python3 MSFinger.py -i 10.0.0.0/8 -t 0.5 -w 500
# Escaneo conservador (bajo uso de recursos)
python3 MSFinger.py -i 192.168.0.0/16 -t 2.0 -w 50
Verificar conectividad de red:
ping <target_ip>
telnet <target_ip> 445
Aumentar tiempo de espera:
python3 MSFinger.py -i <target> -t 3.0
Verificar reglas de firewall:
"SSL handshake failed" o "Connection error: 104":
openssl s_client -connect <ip>:636 para diagnosticarSi se escanea desde múltiples procesos:
# Use diferentes archivos de base de datos
python3 MSFinger.py -i 192.168.1.0/24 -d scan1.db &
python3 MSFinger.py -i 192.168.2.0/24 -d scan2.db &
Asegúrate de que el script sea ejecutable:
chmod +x MSFinger.py
Identificar primero hosts SMB activos, luego identificarlos:
nmap -p445 --open -oG - 192.168.1.0/24 | awk '/445\/open/{print $2}' > smb_hosts.txt
python3 MSFinger.py -f smb_hosts.txt
Monitorear cambios de red con cron:
# Agregar a crontab (todos los días a las 2 AM)
0 2 * * * /usr/bin/python3 /path/to/MSFinger.py -i 192.168.1.0/24 -d /var/scans/daily_scan.db
Consultar y remediar desde PowerShell:
# Instalar el módulo SQLite de PowerShell
Install-Module -Name SimplySql
# Consultar hosts vulnerables
Open-SQLiteConnection -DataSource "MSFinger.db"
$vulnerable = Invoke-SqlQuery -Query "SELECT ip FROM hosts WHERE smb_signing != 'required'"
Close-SqlConnection
# Remediar
foreach ($host in $vulnerable) {
Set-SmbServerConfiguration -ComputerName $host.ip -RequireSecuritySignature $true -Force
}
Autor: Laurent Gaffie ([email protected])
Licencia: GNU General Public License v3.0
Este programa es software libre: puedes redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General de GNU publicada por la Free Software Foundation, ya sea la versión 3 de la Licencia, o (a tu elección) cualquier versión posterior.
Este programa se distribuye con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Consulta la Licencia Pública General de GNU para más detalles.
| Opción | Descripción | Predeterminado |
|---|
-i, --ip | IP objetivo, rango CIDR o rango de IP | Requerido* |
-f, --file | Archivo que contiene objetivos (uno por línea) | Requerido* |
-t, --timeout | Tiempo de espera de conexión en segundos | 1.0 |
-w, --workers | Número de trabajadores concurrentes | 100 |
-d, --database | Archivo de base de datos SQLite para resultados | MSFinger.db |
--no-color | Deshabilitar salida coloreada | Deshabilitado |
| Columna | Tipo | Descripción |
|---|
id | INTEGER | Clave primaria (auto-incremento) |
ip | TEXT | Dirección IP (única) |
hostname | TEXT | Nombre de host (reservado para uso futuro) |
os_version | TEXT | Versión del sistema operativo |
os_build | INTEGER | Número de compilación del SO |
domain | TEXT | Nombre del dominio/grupo de trabajo |
boot_time | TEXT | Marca de tiempo de arranque del sistema |
smb_dialect | TEXT | Versión del protocolo SMB |
smb_signing | TEXT | Estado de firma SMB |
smb1_supported | INTEGER | SMB1 habilitado (0=no, 1=sí) |
smb1_signing | TEXT | Estado de firma SMB1 |
rdp_open | INTEGER | Puerto RDP abierto (0=no, 1=sí) |
mssql_open | INTEGER | Puerto MSSQL abierto (0=no, 1=sí) |
ldap_signing | TEXT | Estado de firma LDAP |
ldaps_signing | TEXT | Estado de firma LDAPS |
ldaps_channel_binding | TEXT | Estado de enlace de canal LDAPS |
ldaps_error | TEXT | Error de conexión LDAPS (si lo hay) |
scan_time | TIMESTAMP | Marca de tiempo del primer escaneo |
last_seen | TIMESTAMP | Marca de tiempo del escaneo más reciente |
| Rango de Compilación | Sistema Operativo |
|---|
| 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 |
| Tipo de Red | Tiempo de Espera Recomendado | Trabajadores |
|---|
| LAN interna rápida (1Gbps+) | 0.5s | 200-300 |
| Red interna normal | 1.0s (predeterminado) | 100-150 |
| Red lenta/inalámbrica | 2.0-3.0s | 50-100 |
| Conexión VPN | 3.0-5.0s | 30-50 |