HTB Academy · Module 112 · Section 7/21
Footprinting Port 445 High Risk Windows & Linux
SMB — SERVER MESSAGE BLOCK
PROTOCOL ANALYSIS · ENUMERATION · EXPLOITATION VECTORS
Protocol
SMB / CIFS
Ports
139, 445
Linux Impl.
Samba
Null Session
ممكن ⚠️
RID 500
Administrator
C:\ على Samba
= Linux /path/
◄ BACK
نظرة عامة
ما هو SMB؟

Server Message Block — بروتوكول Client-Server يتحكم بالوصول للملفات والمجلدات والموارد الشبكية: طابعات، routers، interfaces. يستخدم كمان لتبادل المعلومات بين عمليات النظام.

📜 التاريخ
OS/2 → LAN Manager & LAN Server (أول ظهور)
Windows → التبني الكامل في كل الإصدارات
Samba → تطبيق مجاني لـ Linux/Unix
🔌 كيف يشتغل
💻 Client
TCP Three-Way Handshake
🖥️ SMB Server
Ports المستخدمة
137
NetBIOS Name
138
NetBIOS Datagram
139
SMBv1 / NetBIOS
445
SMBv2/v3 / CIFS
💡 لو شفت Port 139 مفتوح وحده = SMBv1 = EternalBlue محتمل 🎯
⚠️ نقاط مهمة — Quick Facts
الموضوعالمعلومةأهمية في Pentest
RID 500دايماً = Administratorأول RID تستهدفه
C:\ على Sambaمجرد عرض — الحقيقة Linux pathما يعني Windows!
S-1-1-0SID = Everyoneأي شخص = full access
signing: falseما في توقيع رقميNTLM Relay ممكن
guest ok = yesدخول بدون باسوردNull Session مباشرة
📂 Shares و ACL

السيرفر يشارك أجزاء من نظام الملفات كـ Shares. الـ ACL تحدد من يوصل لإيش:

🔐 صلاحيات ACL
execute — تشغيل الملفات
read — قراءة الملفات
full access — كامل الصلاحيات
👥 من يوصل؟
👤 Individual Users
👥 User Groups
🌐 Everyone ← خطير!
⚠️ الـ ACL على الـ Share مش بالضرورة نفس صلاحيات الملفات المحلية!
Samba & CIFS
🐧 ما هو Samba؟

Samba هو تطبيق بديل لـ SMB server مطور لأنظمة Unix/Linux. بينفذ بروتوكول CIFS — وهو dialect من SMB v1 طوّره Microsoft أصلاً. هذا يتيح لـ Linux التواصل مع Windows على الشبكة.

SMB (Windows Only)
→ Samba →
Linux يفهم SMB ✅
💡 CIFS ≈ SMB v1 — لهيك Samba يُسمى SMB/CIFS
🏛️ Samba في Active Directory
▸ Samba v3
يقدر يصير عضو كامل في Active Directory domain — Linux ينضم لشبكة Windows
▸ Samba v4
يقدر يشتغل كـ AD Domain Controller كامل — يتحكم بكل الشبكة!
🎯 لو لاقيت Samba v4 في الشبكة = DC محتمل = هدف ذهبي
⚙️ الـ Daemons — عمليات الخلفية
smbd
Wظيفة 1 + 2
📁 مشاركة الملفات
🖨️ مشاركة الطابعات
Port 445
nmbd
Wظيفة 3 + 4
📛 تسجيل أسماء الأجهزة (NetBIOS)
🗺️ تصفح الشبكة (Browsing)
Port 137
التحقق من الـ Daemons على الجهاز المستهدف:
systemctl list-units | grep -E "smbd|nmbd" smbd.service active running nmbd.service active running # لو شغالين = Samba نشط = في shares تستكشفها 🎯
🏘️ Workgroups و NetBIOS

كل جهاز في الشبكة بيشارك في workgroup — اسم مجموعة يحدد collection من الأجهزة. ممكن يكون في أكثر من workgroup في نفس الشبكة.

NetBIOS
→ evolved to →
WINS
(Windows Internet Name Service)
إصدارات SMB
📋 جميع الإصدارات
الإصدارنظام التشغيلالميزاتالخطر
CIFSWindows NT 4.0NetBIOS interface — الإصدار الأصلي⚠️ قديم جداً
SMB 1.0Windows 2000أول اتصال مباشر TCP💀 EternalBlue
SMB 2.0Vista / Server 2008أداء أفضل، signing محسّنمحدود
SMB 2.1Win7 / 2008 R2Locking mechanismsمحدود
SMB 3.0Win8 / Server 2012Multichannel، تشفير end-to-endأفضل
SMB 3.0.2Win8.1 / 2012 R2تحسينات على 3.0أفضل
SMB 3.1.1Win10 / 2016Integrity checking، AES-128الأفضل
⚠️ إصدار حديث ≠ آمن! الخطر الأكبر في الإعدادات الغلط مش الإصدار
🔍 كيف تعرف الإصدار
sudo nmap 10.129.14.128 -sV -sC -p139,445 PORT STATE SERVICE VERSION 139/tcp open netbios-ssn Samba smbd 4.6.2 445/tcp open netbios-ssn Samba smbd 4.6.2 | smb2-security-mode: | 2.02: |_ Message signing enabled but not required
🎯 "signing not required" = NTLM Relay Attack ممكن
الإعدادات
⚙️ smb.conf — الإعداد الافتراضي
# /etc/samba/smb.conf cat /etc/samba/smb.conf | grep -v "#\|\;" [global] workgroup = DEV.INFREIGHT.HTB server string = DEVSMB log file = /var/log/samba/log.%m server role = standalone server map to guest = bad user usershare allow guests = yes [printers] browseable = no guest ok = no read only = yes [print$] browseable = yes guest ok = no
💡 [global] = إعدادات عامة تطبق على كل الـ shares — كل share يقدر يـ override
📋 شرح الإعدادات
الإعدادالوظيفة
[sharename]اسم الـ share على الشبكة
workgroupاسم الـ workgroup الذي يظهر للـ clients
path = /path/المسار المحلي المشارَك
map to guest = bad userيوزر غلط → يحوّله لـ guest تلقائياً
browseable = yesيظهر الـ share في القائمة
guest ok = yesدخول بدون باسورد
read only = yesقراءة فقط
create mask = 0700صلاحيات الملفات الجديدة
Dangerous Settings
⚠️ الإعدادات الخطيرة

كثير admins يشغّلون هاي الإعدادات "للراحة" أو "للاختبار" وينسون — وتبقى هكذا لسنين!

الإعدادالخطر
browseable = yesأي شخص يتصفح المحتوى
read only = noإنشاء وتعديل الملفات
writable = yesكتابة كاملة
guest ok = yesدخول بدون باسورد
create mask = 0777ملفات جديدة = rwx للجميع
directory mask = 0777مجلدات = rwx للجميع
logon script = script.shيشغّل script عند كل login = Persistence!
magic script = script.shتشغيل تلقائي عند إغلاق الـ script
enable privileges = yesيحترم صلاحيات SID معين
💀 مثال Share خطير — [notes]
[notes] comment = CheckIT path = /mnt/notes/ browseable = yes read only = no writable = yes guest ok = yes create mask = 0777 directory mask = 0777
💀 هاد الـ share يسمح لـ أي شخص بـ:
✗ الدخول بدون باسورد (guest ok = yes)
✗ تصفح كل المحتوى (browseable = yes)
✗ رفع وتعديل وحذف الملفات (writable + 0777)
🔒 logon script = Persistence
يوزر يسجل دخول
script.sh يشتغل تلقائياً على جهازه
reverse shell → اتصال للمهاجم 💥
🎯 حتى لو غيّروا الباسوردات — كل ما حدا يدخل ترجع لك اتصال
الأدوات
اختر الأداة:
🔍Nmap
🔌smbclient
🗺️SMBmap
🛠️rpcclient
CrackMapExec
🔄enum4linux-ng
🐍samrdump.py
📊smbstatus
🔍 Nmap — الاكتشاف الأولي
الأمر الأساسي:
sudo nmap 10.129.14.128 -sV -sC -p139,445 PORT STATE SERVICE VERSION 139/tcp open netbios-ssn Samba smbd 4.6.2 445/tcp open netbios-ssn Samba smbd 4.6.2 |_nbstat: NetBIOS name: HTB | smb2-security-mode: | 2.02: |_ Message signing enabled but not required
⚠️ Nmap يعطي معلومات محدودة على SMB — استخدمه للاكتشاف الأولي فقط
Flagالمعنى
-sVVersion Scan — إصدار الخدمة
-sCDefault Scripts — تشغيل NSE scripts
-p139,445SMB Ports فقط
🔌 smbclient — التصفح التفاعلي
عرض الـ Shares (Null Session):
smbclient -N -L //10.129.14.128 Sharename Type Comment --------- ---- ------- print$ Disk Printer Drivers home Disk INFREIGHT Samba dev Disk DEVenv notes Disk CheckIT IPC$ IPC IPC Service SMB1 disabled -- no workgroup available
الدخول لـ Share:
smbclient //10.129.14.128/notes Enter WORKGROUP\username's password: Anonymous login successful smb: \> ls prep-prod.txt N 71 Sun Sep 19 2021 smb: \> get prep-prod.txt getting file \prep-prod.txt of size 71 smb: \> !cat prep-prod.txt # ! = تشغيل أمر محلي بدون قطع الاتصال
💡 استخدم ! قبل أي أمر لتشغيله على جهازك المحلي
🗺️ SMBmap — رؤية سريعة للـ Permissions
smbmap -H 10.129.14.128 Disk Permissions Comment ---- ----------- ------- print$ NO ACCESS Printer Drivers home NO ACCESS INFREIGHT Samba dev NO ACCESS DEVenv notes READ,WRITE CheckIT IPC$ NO ACCESS IPC Service
✅ أسرع أداة لتحديد الـ shares المتاحة — ابدأ بها دايماً
🛠️ rpcclient — الأقوى للـ Manual Enumeration
الاتصال:
rpcclient -U "" 10.129.14.128 # -U "" = Null Session rpcclient $>
الأوامر المهمة:
rpcclient $> srvinfo DEVSMB platform_id: 500 os version: 6.1 rpcclient $> enumdomusers user:[mrb3n] rid:[0x3e8] user:[cry0l1t3] rid:[0x3e9] rpcclient $> queryuser 0x3e9 User Name : cry0l1t3 Password last set: 2021-09-22 bad_password_count: 0 rpcclient $> netshareenumall netname: notes path: C:\mnt\notes\ netname: dev path: C:\home\sambauser\dev\ rpcclient $> netsharegetinfo notes ACE type: ACCESS ALLOWED SID: S-1-1-0 # Everyone = أي شخص!
⚠️ C:\ على Samba ≠ Windows — هو Linux path معروض بصيغة Windows!
RID Brute Force — اكتشاف مستخدمين مخفيين:
for i in $(seq 500 1100); do rpcclient -N -U "" 10.129.14.128 \ -c "queryuser 0x$(printf '%x\n' $i)" \ | grep "User Name\|user_rid" && echo "" done User Name : sambauser rid: 0x1f5 User Name : mrb3n rid: 0x3e8 User Name : cry0l1t3 rid: 0x3e9
💡 RID 500 = 0x1f4 = Administrator دايماً!
⚡ CrackMapExec — Enumeration شامل
crackmapexec smb 10.129.14.128 --shares -u '' -p '' SMB 10.129.14.128 445 DEVSMB [*] Windows 6.1 Build 0 (signing:False)(SMBv1:False) SMB 10.129.14.128 445 DEVSMB [+] \: SMB 10.129.14.128 445 DEVSMB Share Permissions SMB 10.129.14.128 445 DEVSMB notes READ,WRITE SMB 10.129.14.128 445 DEVSMB IPC$
🎯 signing:False + notes:READ,WRITE بدون auth = خطر مباشر
🔄 enum4linux-ng — كل شيء دفعة وحدة
التثبيت والتشغيل:
git clone https://github.com/cddmp/enum4linux-ng.git cd enum4linux-ng && pip3 install -r requirements.txt ./enum4linux-ng.py 10.129.14.128 -A
النتيجة الكاملة:
SMB signing required: false Null session allowed: true OS: Windows 7 / Server 2008 R2 Users: mrb3n (1000), cry0l1t3 (1001) Shares: notes → Mapping: OK, Listing: OK min_pw_length: 5 DOMAIN_PASSWORD_COMPLEX: false lockout_threshold: None
💀 Password Policy خطيرة:
✗ باسورد 5 أحرف فقط
✗ ما في تعقيد مطلوب
✗ ما في حظر = brute-force بلا حدود!
🐍 samrdump.py — RID Brute Force تلقائي
samrdump.py 10.129.14.128 Found user: mrb3n, uid = 1000 Found user: cry0l1t3, uid = 1001 mrb3n/PasswordLastSet: 2021-09-22 mrb3n/AccountIsDisabled: False cry0l1t3/AccountIsDisabled: False
💡 AccountIsDisabled: False = الحساب نشط = قابل للـ brute-force
📊 smbstatus — من متصل الآن؟ (Admin Side)
root@samba:~# smbstatus Samba version 4.11.6-Ubuntu PID Username Group Machine Protocol ----------------------------------------------- 75691 sambauser samba 10.10.14.4 SMB3_11 Service pid Machine Connected at ----------------------------------------- notes 75691 10.10.14.4 Sep 23 2021 No locked files
💡 في pentest: لو وصلت لجهاز = smbstatus يعطيك خريطة من يتصل بمن 🗺️
📊 متى تستخدم كل أداة؟
الأداةالأفضل لـملاحظة
nmapالاكتشاف الأولي والإصدارمعلومات محدودة
smbmapرؤية سريعة للـ permissionsابدأ بها دايماً
smbclientتصفح ورفع/تحميل ملفاتتفاعلي
rpcclientusers, groups, ACL تفصيليالأقوى manual
crackmapexecenumeration شامل سريعضجيج أكثر
enum4linux-ngكل شيء دفعة وحدةابدأ به للسرعة
samrdump.pyRID brute-force تلقائيمن Impacket
⚠️ استخدم أكثر من أداة دايماً — كل أداة قد تظهر معلومات مختلفة!
Methodology — طريقة التفكير
⛓️ خطوات الهجوم الكاملة
1
Nmap Scan — الاكتشاف الأولي
تحقق من ports 139/445، إصدار SMB، وحالة الـ signing
sudo nmap -sV -sC -p139,445 TARGET
👀 تحقق من:
• SMBv1 مفتوح؟ → EternalBlue
• signing not required? → NTLM Relay
2
SMBmap — رؤية سريعة للـ Permissions
شوف كل الـ shares ومن عنده READ/WRITE دفعة وحدة
smbmap -H TARGET
3
enum4linux-ng — تجميع شامل
users, shares, policies, OS info — كل شيء دفعة وحدة
./enum4linux-ng.py TARGET -A
ركز على: lockout_threshold, min_pw_length, DOMAIN_PASSWORD_COMPLEX
4
rpcclient — تعمق في المعلومات
ACL كاملة، RID brute-force، تفاصيل كل user
rpcclient -U "" TARGET rpcclient $> enumdomusers rpcclient $> queryuser 0x3e8 rpcclient $> netsharegetinfo notes
5
smbclient — دخول الـ Shares
تصفح وتحميل الملفات من الـ shares المتاحة
smbclient //TARGET/notes smb: \> ls smb: \> get filename.txt smb: \> !cat filename.txt
6
بناءً على النتائج — اختر الهجوم
كل نتيجة تفتح طريق مختلف:
signing false → NTLM Relay SMBv1 → EternalBlue writable → Upload Payload weak policy → Brute Force users found → Credential Attack
🧠 قواعد التفكير
✅ دايماً افعل:
• افحص [global] أول بعدين كل share
• حمّل أي ملف مثير للاهتمام فوراً
• استخدم أكثر من أداة
• ابدأ بالأبسط والأسرع
❌ لا تفعل:
• تثق بـ [global] guest ok = no بدون تحقق
• تتجاهل أي share حتى الطابعات!
• تعتمد على أداة وحدة
• تفترض إن إصدار حديث = آمن
💡 PrintNightmare (CVE-2021-34527) — هجوم عبر print$ share! الطابعات مش "مش مهمة" 🖨️
⛓️ سيناريو الهجوم الكامل
🔍
Nmap
139/445
📋
enum4linux
users+policy
🔌
smbclient
تصفح shares
📥
تحميل
ملفات حساسة
🔑
Brute Force
usernames
💥
Full Access
domain!
Explained — شرح بأسلوب السؤال والجواب
🌐 SMB vs Samba
ليش نحتاج Samba أصلاً؟
SMB بناه Microsoft لـ Windows فقط — Linux ما يفهمه بطبيعته. Samba جاء كـ "مترجم" يخلي Linux يحكي نفس لغة Windows على الشبكة.
ما هو CIFS وعلاقته بـ SMB v1؟
CIFS هو dialect من SMB — نسخة/تطبيق محدد منه. CIFS يتوافق أساساً مع SMB v1. لهيك لما تشوف Samba تعرف إنه يستخدم CIFS = SMB v1 أساساً، وهاد يعني ثغرات قديمة محتملة مثل EternalBlue.
🔌 Ports والإصدارات
لو شفت Port 139 مفتوح بس 445 مغلق — إيش يعني؟
يعني SMBv1 موجود على الجهاز. Port 139 = NetBIOS = SMB v1 القديم. أول شي يجي على بالك: EternalBlue (MS17-010).
⚙️ الإعدادات والـ Config
ليش نبدأ بـ [global] أول؟
لأنه نقطة البداية — يعطيك الإعدادات العامة. بعدها تشوف كل share لحاله لأن كل share يقدر يـ override الـ global. لو [global] قال guest ok = no بس share معين قال guest ok = yes — الـ share هو اللي يطبق!
ما هو map to guest = bad user؟
يعني أي يوزر يحاول يدخل بـ credentials غلط — بدل ما يرفضه، يحوّله لـ guest تلقائياً. يعني الإعداد اللي المفروض يحمي السيرفر يفتح باب خلفي!
🛠️ RPC والـ Enumeration
إيش هو RID وليش مهم؟
RID = Relative Identifier — رقم فريد لكل مستخدم. الأهم: RID 500 = Administrator دايماً في أي نظام. نعمل loop من 500 لـ 1100 ونجرب كل رقم لنكتشف مستخدمين مخفيين حتى لو enumdomusers ما أظهرهم.
C:\ طلعت على Samba — يعني Windows؟
لا! Samba على Linux بيعرض المسارات بصيغة Windows للـ clients. C:\mnt\notes\ في الحقيقة هو /mnt/notes/ على Linux. لما تشوف "Samba" في Nmap = Linux مؤكد.
SID S-1-1-0 يعني إيش؟
S-1-1-0 = "Everyone" — يعني كل شخص على الشبكة بدون استثناء. لو شفته في الـ ACL مع ACCESS ALLOWED = أي شخص عنده صلاحية كاملة على الـ share!
🔒 Message Signing
إيش هو Message Signing وليش مهم؟
توقيع رقمي على كل رسالة — مبني على HMAC hashing. السيرفر يحسب hash(الرسالة + Session Key) ويضيفه كتوقيع. لو "not required" — ما في إلزام للتوقيع = مهاجم يقدر يقف في المنتصف ويعدل الرسائل = NTLM Relay Attack.
إيش هو NTLM Relay؟
موظف يحاول يدخل على السيرفر → المهاجم يمسك الـ credentials → يعيد إرسالها لسيرفر ثاني → يدخل بدون ما يعرف الباسورد الفعلي. نوع من MITM خاص بـ Windows authentication.
⚠️ Password Policy
ما أهمية lockout_threshold: None؟
يعني ما في حظر بعد محاولات باسورد غلط. لو مع min_pw_length = 5 وCOMPLEX = false — تقدر تجرب آلاف الباسوردات البسيطة (12345، admin، pass1) بلا حدود ومن دون خوف من الحظر!
🎯 Pentest Mindset
ليش ما نتجاهل print$ share؟
PrintNightmare (CVE-2021-34527) — هجوم حقيقي اشتغل عبر print$ share! المهاجم يحط driver ملغوم وكل جهاز يحمّله يُصاب. القاعدة: ما في share مش مهم.
إصدار SMB 3.0 حديث = آمن؟
لا! الإصدار الحديث يعني ثغرات البروتوكول أقل — بس الإعدادات الغلط تفتح الباب بغض النظر عن الإصدار. guest ok = yes + writable = yes على SMB 3.0 = نفس الخطر!