
أداة بصمة خدمات الشبكة لمايكروسوفت
الإصدار: 1.0
المؤلف: Laurent Gaffie
الشركة: Secorizon
MSFinger هي أداة عالية الأداء لبصمة الشبكات، مصممة لاستطلاع الشبكات الداخلية. تحدد بسرعة خدمات مايكروسوفت، وتكتشف إعدادات الأمان، وتسلط الضوء على نقاط الضعف المحتملة عبر بروتوكولات SMB و LDAP و LDAPS.
الميزات الرئيسية:
MSFinger مكتوبة بلغة بايثون نقية بالكامل. لا تتطلب أي تبعيات إضافية بخلاف Python 3.6+.
cd /path/to/MSFinger
chmod +x MSFinger.py
python3 MSFinger.py -i <target> [options]
* يجب تحديد إما -i أو -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
مثال على 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
تُعرض النتائج في الوقت الفعلي مع مؤشرات أمنية مرمّزة بالألوان:
[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)
معلومات SMB:
SMB: X.X.X - إصدار لهجة SMB (2.0.2, 2.1, 3.0, 3.0.2, 3.1.1)Signing: <status> - مطلوب/مفعّل/معطّلOS: <version> - إصدار ويندوز مع رقم البناءDomain: <name> - اسم مجال/مجموعة عمل NetBIOSBoot: <time> - وقت إقلاع النظام (أو Disabled/Unknown)حالة SMB1:
SMB1: disabled - SMB1 غير مدعوم (آمن)SMB1: supported, Signing: <status> - SMB1 مدعوم (خطر محتمل)الخدمات:
RDP - بروتوكول سطح المكتب البعيد (المنفذ 3389) مفتوحMSSQL - خادم مايكروسوفت SQL (المنفذ 1433) مفتوحLDAP (signing: <status>) - LDAP على المنفذ 389LDAPS (signing: <status>, channel binding: <status>) - LDAPS على المنفذ 636LDAPS (port open, <error>) - منفذ LDAPS يستجيب لكن مصافحة SSL فشلتتخزّن MSFinger جميع نتائج الفحص في قاعدة بيانات SQLite للتخزين الدائم والتحليل.
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"
البروتوكولات المختبرة:
المعلومات التي يتم جمعها:
required - الخادم يطلب توقيع الرسائل (آمن)enabled - الخادم يدعم التوقيع لكنه لا يطلبهdisabled - لا يوجد دعم للتوقيع (ضعيف)تخطيط إصدارات نظام التشغيل:
يختبر الربط المجهول لتحديد متطلبات التوقيع:
يختبر اتصال SSL/TLS مع ربط LDAP:
النتائج المحتملة:
signing: required, channel binding: required - أقصى درجات الأمان (آمن)signing: not_required, channel binding: not_required - لا توجد حمايات (ضعيف)port open, SSL handshake failed - المنفذ يستجيب لكن تفاوض SSL فشلport open, Connection error: 104 - تم قطع الاتصال من الطرف المقابلتوقيع SMB معطّل:
توقيع LDAP غير مطلوب:
LdapEnforceChannelBinding=2 و LDAPServerIntegrity=2 في السجل (Registry)LDAPS بدون ربط قناة:
توقيع SMB مفعّل (غير مطلوب):
SMB1 مدعوم:
توقيع SMB مطلوب:
توقيع LDAP/LDAPS مطلوب:
ربط القناة مفروض:
يستهلك كل عامل قدرًا ضئيلًا من الذاكرة (~1-2MB). اضبط عدد العمال بناءً على موارد النظام:
# 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
تحقق من اتصال الشبكة:
ping <target_ip>
telnet <target_ip> 445
زيادة المهلة:
python3 MSFinger.py -i <target> -t 3.0
تحقق من قواعد جدار الحماية:
"SSL handshake failed" أو "Connection error: 104":
openssl s_client -connect <ip>:636 للتشخيصإذا كنت تفحص من عمليات متعددة:
# 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 &
تأكد من أن البرنامج النصي قابل للتنفيذ:
chmod +x MSFinger.py
حدد مضيفات SMB النشطة أولاً، ثم عرّف عليها:
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:
# 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:
# 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 ([email protected])
الترخيص: رخصة جنو العمومية العامة الإصدار 3.0
هذا البرنامج برنامج حر: يمكنك إعادة توزيعه و/أو تعديله بموجب شروط رخصة جنو العمومية العامة كما نشرتها مؤسسة البرمجيات الحرة، إما الإصدار 3 من الرخصة أو (حسب اختيارك) أي إصدار لاحق.
يُوزَّع هذا البرنامج على أمل أن يكون مفيدًا، لكن دون أي ضمان؛ حتى دون الضمان الضمني للقابلية للتسويق أو الملاءمة لغرض معين. راجع رخصة جنو العمومية العامة لمزيد من التفاصيل.
| الخيار | الوصف | الافتراضي |
|---|
-i, --ip | عنوان IP الهدف، أو نطاق CIDR، أو نطاق IP | مطلوب* |
-f, --file | ملف يحتوي على الأهداف (هدف واحد في كل سطر) | مطلوب* |
-t, --timeout | مهلة الاتصال بالثواني | 1.0 |
-w, --workers | عدد العمال المتزامنين | 100 |
-d, --database | ملف قاعدة بيانات SQLite لتخزين النتائج | MSFinger.db |
--no-color | تعطيل المخرجات الملونة | معطّل |
| العمود | النوع | الوصف |
|---|
id | INTEGER | المفتاح الأساسي (تزايدي تلقائي) |
ip | TEXT | عنوان IP (فريد) |
hostname | TEXT | اسم المضيف (محجوز للاستخدام المستقبلي) |
os_version | TEXT | إصدار نظام التشغيل |
os_build | INTEGER | رقم بناء نظام التشغيل |
domain | TEXT | اسم المجال/مجموعة العمل |
boot_time | TEXT | طابع زمني لإقلاع النظام |
smb_dialect | TEXT | إصدار بروتوكول SMB |
smb_signing | TEXT | حالة توقيع SMB |
smb1_supported | INTEGER | SMB1 مفعّل (0=لا، 1=نعم) |
smb1_signing | TEXT | حالة توقيع SMB1 |
rdp_open | INTEGER | منفذ RDP مفتوح (0=لا، 1=نعم) |
mssql_open | INTEGER | منفذ MSSQL مفتوح (0=لا، 1=نعم) |
ldap_signing | TEXT | حالة توقيع LDAP |
ldaps_signing | TEXT | حالة توقيع LDAPS |
ldaps_channel_binding | TEXT | حالة ربط قناة LDAPS |
ldaps_error | TEXT | خطأ اتصال LDAPS (إن وجد) |
scan_time | TIMESTAMP | طابع زمني للفحص الأول |
last_seen | TIMESTAMP | طابع زمني لأحدث فحص |
| نطاق البناء | نظام التشغيل |
|---|
| 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 |
| نوع الشبكة | المهلة الموصى بها | العمال |
|---|
| شبكة LAN داخلية سريعة (1Gbps+) | 0.5s | 200-300 |
| شبكة داخلية عادية | 1.0s (الافتراضي) | 100-150 |
| شبكة بطيئة/لاسلكية | 2.0-3.0s | 50-100 |
| اتصال VPN | 3.0-5.0s | 30-50 |