نظرة عامة
ما هو 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-0 | SID = 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
🖨️ مشاركة الطابعات
Port 445
nmbd
Wظيفة 3 + 4
📛 تسجيل أسماء الأجهزة (NetBIOS)
🗺️ تصفح الشبكة (Browsing)
Port 137
🗺️ تصفح الشبكة (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
📋 جميع الإصدارات
| الإصدار | نظام التشغيل | الميزات | الخطر |
|---|---|---|---|
| CIFS | Windows NT 4.0 | NetBIOS interface — الإصدار الأصلي | ⚠️ قديم جداً |
| SMB 1.0 | Windows 2000 | أول اتصال مباشر TCP | 💀 EternalBlue |
| SMB 2.0 | Vista / Server 2008 | أداء أفضل، signing محسّن | محدود |
| SMB 2.1 | Win7 / 2008 R2 | Locking mechanisms | محدود |
| SMB 3.0 | Win8 / Server 2012 | Multichannel، تشفير end-to-end | أفضل |
| SMB 3.0.2 | Win8.1 / 2012 R2 | تحسينات على 3.0 | أفضل |
| SMB 3.1.1 | Win10 / 2016 | Integrity 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)
✗ الدخول بدون باسورد (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 | المعنى |
|---|---|
| -sV | Version Scan — إصدار الخدمة |
| -sC | Default Scripts — تشغيل NSE scripts |
| -p139,445 | SMB 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 بلا حدود!
✗ باسورد 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 | تصفح ورفع/تحميل ملفات | تفاعلي |
| rpcclient | users, groups, ACL تفصيلي | الأقوى manual |
| crackmapexec | enumeration شامل سريع | ضجيج أكثر |
| enum4linux-ng | كل شيء دفعة وحدة | ابدأ به للسرعة |
| samrdump.py | RID 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
• 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 حتى الطابعات!
• تعتمد على أداة وحدة
• تفترض إن إصدار حديث = آمن
• تتجاهل أي 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 = نفس الخطر!