◄ BACK TO PROTOCOLS
HTB Academy · Module 112 · Section 10/21
Footprinting Port 25/587/465 Open Relay Mail Spoofing
SMTP — SIMPLE MAIL TRANSFER PROTOCOL
EMAIL ANALYSIS · USER ENUM · OPEN RELAY · SPOOFING
Port قديم
TCP 25
Port حديث
TCP 587
SSL/TLS
TCP 465
Encrypted?
لا افتراضياً ⚠️
Linux Server
Postfix
Open Relay
mynetworks=0/0
نظرة عامة
ما هو SMTP؟

Simple Mail Transfer Protocol — بروتوكول إرسال الإيميلات عبر الشبكة. يشتغل بين الـ client والـ mail server، وبين سيرفرين SMTP. بدون تشفير افتراضياً — كل شيء يمشي clear-text.

الـ Ports
PORT 25 — قديم
سيرفر → سيرفر، بدون تشفير
PORT 587 — STARTTLS
Client → سيرفر، يبدأ عادي ثم يشفر
PORT 465 — SSL/TLS
Client → سيرفر، مشفر من البداية
SMTP vs ESMTP
SMTP عادي:
بدون تشفير، بدون authentication
ESMTP (Extended):
+ STARTTLS = تشفير
+ AUTH PLAIN = authentication
لما الناس يقولوا SMTP = يقصدون ESMTP
⚠️ عيبان أساسيان في SMTP
❌ العيب 1 — ما في تأكيد وصول
ترسل إيميل — SMTP ما يخبرك إذا وصل. لو ما وصل: رسالة خطأ بالإنجليزي بدون تنسيق موحد.
❌ العيب 2 — ما في authentication
أي شخص يقول "أنا ceo@company.com" — SMTP ما يتحقق! = Mail Spoofing مجاني 💀
💡 الحلول: DKIM (توقيع رقمي) + SPF (تحديد IPs المسموح لها) — بس على جانب المستلم فقط، ما يمنعون Open Relay!
🔒 STARTTLS vs SSL/TLS
Port 587 — STARTTLS
الاتصال يبدأ عادي (plaintext)
Client يرسل STARTTLS
بعدها يتحول للتشفير
"ابدأ عادي بعدين شفّر"
Port 465 — SSL/TLS
التشفير يبدأ من أول لحظة
ما في لحظة plaintext أبداً
"شفّر من البداية" ✅
مسار الإيميل
📧 المكونات الأربعة
💻
MUA
Mail User Agent
Gmail/Outlook
🚪
MSA
Submission Agent
يتحقق منك
📮
MTA
Transfer Agent
ساعي البريد
📬
MDA
Delivery Agent
يحط في الصندوق
📥
Mailbox
POP3/IMAP
🎯 Open Relay = MTA بدون MSA — ما في تحقق من المرسل = أي شخص يرسل لأي شخص!
🌍 مثال — من Gmail لـ Outlook
1. أنت (MUA) تكتب الإيميل في Gmail
2. Gmail SMTP (MTA) يستقبله — Port 587
3. Gmail يبحث في DNS عن MX record لـ outlook.com
4. Gmail SMTP يتصل بـ Outlook SMTP — Port 25
5. MDA يحط الإيميل في صندوق المستلم ✅
💡 سيرفرين SMTP على الأقل — Gmail يصير "client" لما يتصل بـ Outlook!
SMTP Commands
📋 جميع الأوامر
الأمرالوظيفةأهمية Pentest
HELOتعريف نفسك — SMTP قديممحدود
EHLOتعريف نفسك — ESMTP، يعرض الميزاتيكشف VRFY وAUTH!
MAIL FROMتحديد المرسلSpoofing — أي إيميل مزيف
RCPT TOتحديد المستلمتحديد الهدف
DATAبدء كتابة الإيميل (ينتهي بـ .)محتوى الإيميل
VRFYالتحقق من وجود يوزرUser Enumeration 🎯
EXPNعرض أعضاء mailing listكشف أسماء + إيميلات
RSETإلغاء الإيميل الحالي بدون قطع الاتصالابدأ من جديد
NOOPping للسيرفر — منع timeoutإبقاء الاتصال
QUITإنهاء الاتصالإغلاق الجلسة
💻 HELO vs EHLO
HELO — قديم:
HELO mail1.inlanefreight.htb 250 mail1.inlanefreight.htb ← يرجع الاسم فقط
EHLO — حديث (ESMTP):
EHLO mail1 250-mail1.inlanefreight.htb 250-PIPELINING 250-SIZE 10240000 250-VRFY ← User Enum! 250-STARTTLS 250-AUTH PLAIN 250 CHUNKING
🎯 VRFY في القائمة = User Enumeration مفعّل!
👤 VRFY — User Enumeration
telnet 10.129.14.128 25 220 ESMTP Server VRFY root 252 2.0.0 root ← ممكن موجود VRFY cry0l1t3 252 2.0.0 cry0l1t3 ← ممكن موجود VRFY aaaaaaaaaaaaaaaa 252 2.0.0 aaaaaaaaaaaaa ← السيرفر يكذب!
⚠️ كودات الرد:
252 = "ممكن موجود" — مش دايماً صادق!
250 = موجود 100%
550 = غير موجود
🎯 دايماً جرب VRFY على اسم عشوائي واضح — لو رجع 252 = السيرفر يكذب!
📤 إرسال إيميل كامل عبر telnet
telnet 10.129.14.128 25 220 ESMTP Server # 1. تعريف نفسك EHLO inlanefreight.htb 250-mail1.inlanefreight.htb # 2. تحديد المرسل (ممكن تزوّره!) MAIL FROM: <cry0l1t3@inlanefreight.htb> 250 2.1.0 Ok # 3. تحديد المستلم RCPT TO: <mrb3n@inlanefreight.htb> NOTIFY=success,failure 250 2.1.5 Ok # 4. بدء كتابة الإيميل DATA 354 End data with <CR><LF>.<CR><LF> From: <cry0l1t3@inlanefreight.htb> To: <mrb3n@inlanefreight.htb> Subject: DB Access Date: Tue, 28 Sept 2021 16:32:51 +0200 Hey man, the DB creds don't work. Did you change them? . 250 2.0.0 Ok: queued as 6E1CF1681AB QUIT 221 2.0.0 Bye
💡 النقطة . وحدها على سطر = نهاية الإيميل. NOTIFY=success,failure = أخبرني لو وصل أو لم يصل.
الإعدادات — Postfix
ملف الإعداد
cat /etc/postfix/main.cf | grep -v "#" | sed -r "/^\s*$/d" smtpd_banner = ESMTP Server ← ما يكشف الإصدار ✅ myhostname = mail1.inlanefreight.htb mynetworks = 127.0.0.0/8 10.129.0.0/16 ← محدود ✅ mydestination = $myhostname, localhost masquerade_domains = $myhostname mailbox_size_limit = 0 smtp_bind_address = 0.0.0.0 ← يستمع على كل interfaces! inet_protocols = ipv4 smtpd_helo_restrictions = reject_invalid_hostname home_mailbox = /home/postfix
📋 شرح الإعدادات المهمة
الإعدادالوظيفةالخطر
smtpd_bannerما يظهر عند الاتصاللو بدون إصدار = جيد ✅
myhostnameاسم السيرفريكشف اسم الجهاز
mynetworksمن يقدر يرسل عبر السيرفر0.0.0.0/0 = Open Relay 💀
smtp_bind_addressأي interface يستمع عليها0.0.0.0 = كل interfaces
smtpd_helo_restrictionsقيود على HELOreject_invalid = حماية
Dangerous Settings
💀 Open Relay — أخطر إعداد
الإعداد الخطير:
mynetworks = 0.0.0.0/0 ← أي IP في العالم يقدر يرسل عبر هاد السيرفر!
💀 Open Relay = أي شخص يرسل إيميلات مزيفة بدون authentication!
الإعداد الآمن:
mynetworks = 127.0.0.0/8 10.129.0.0/16 ← localhost والشبكة الداخلية فقط ✅
✅ محدود = فقط الأجهزة الداخلية تقدر ترسل
🎭 Mail Spoofing + Phishing
Open Relay مفتوح
MAIL FROM: <ceo@company.com> ← مزيف!
RCPT TO: <all-employees@company.com>
"أرسل بياناتك البنكية فوراً" 💀
🎯 أنواع الهجمات:
Phishing = إيميل لعدد كبير
Spear Phishing = مستهدف لشخص معين
Whaling = مستهدف لمدير كبير (CEO/CFO)
🛡️ DKIM و SPF — الحماية الجزئية
SPF
يحدد أي IPs مسموح لها ترسل باسم الدومين. المستلم يتحقق — لو IP غريب = spam.
DKIM
توقيع رقمي على الإيميل. المستلم يتحقق إن الإيميل جاء فعلاً من هاد الدومين.
⚠️ SPF وDKIM على جانب المستلم فقط — ما يمنعون Open Relay! وجودهم لا يلغي خطر الـ Spoofing على سيرفرات ما عندها هاي الحماية.
الأدوات
اختر الأداة:
🔍Nmap
💻telnet
📡Open Relay
👤User Enum
🔍 Nmap على SMTP
sudo nmap 10.129.14.128 -sC -sV -p25 PORT STATE SERVICE VERSION 25/tcp open smtp Postfix smtpd |_smtp-commands: mail1.inlanefreight.htb, PIPELINING, SIZE 10240000, VRFY, ← User Enum مفعّل! ETRN, ENHANCEDSTATUSCODES, 8BITMIME, DSN, SMTPUTF8, CHUNKING
🎯 VRFY في القائمة = ابدأ User Enumeration فوراً!
💡 smtpd_banner = "ESMTP Server" بدون إصدار — الـ admin أخفى الإصدار. لو ظهر "Postfix 3.4.13" = ابحث عن CVEs!
💻 telnet — User Enumeration بـ VRFY
telnet 10.129.14.128 25 220 ESMTP Server # أول شي — تحقق إذا السيرفر صادق: VRFY xxxxxxxxxxxxxxxxxxx 550 5.1.1 unknown ← صادق ✅ # لو رجع 252 = السيرفر يكذب! # بعدها جرب الأسماء الحقيقية: VRFY root 252 2.0.0 root ← ممكن موجود VRFY cry0l1t3 252 2.0.0 cry0l1t3 ← ممكن موجود
💡 استخدم EXPN للـ mailing lists:
EXPN support → يعرض كل الأعضاء
📡 Nmap — Open Relay Detection
sudo nmap 10.129.14.128 -p25 --script smtp-open-relay -v PORT STATE SERVICE 25/tcp open smtp | smtp-open-relay: Server is an open relay (16/16 tests) | MAIL FROM:<> -> RCPT TO:<relaytest@nmap.scanme.org> | MAIL FROM:<antispam@nmap.scanme.org> -> RCPT TO:<...> | MAIL FROM:<antispam@ESMTP> -> RCPT TO:<...> |_ ... (16 tests total)
💀 16/16 = Open Relay كامل! أي شخص يرسل إيميلات مزيفة عبر هاد السيرفر
💡 -v = verbose — يعرض تفاصيل كل test مش بس النتيجة
👤 smtp-user-enum — User Enumeration

أداة متخصصة لـ SMTP User Enumeration باستخدام VRFY أو EXPN أو RCPT:

الأمر الأساسي:
smtp-user-enum -M VRFY -U footprinting-wordlist.txt -t 10.129.14.128 ######## Scan started ######## 10.129.14.128: robin exists 10.129.14.128: admin exists 10.129.14.128: john <no result> ######## 2 results ########
مع verbose وtimeout:
smtp-user-enum -M VRFY -U footprinting-wordlist.txt -t 10.129.14.128 -v -w 15 # -v = verbose (شوف المحاولات) # -w 15 = انتظر 15 ثانية لكل رد (للسيرفرات البطيئة)
خيارات الـ Method:
Flagالطريقةالاستخدام
-M VRFYVRFY commandالأكثر شيوعاً
-M EXPNEXPN commandللـ mailing lists
-M RCPTRCPT TO commandلو VRFY مغلق
⚠️ تنبيهات مهمة:
• HTB توفر wordlist خاصة في Resources — استخدمها أول
• usernames غالباً = أسماء الموظفين (john.smith, jsmith)
• بعض السيرفرات بطيئة — زد الـ timeout بـ -w
• تحقق يدوياً أول: VRFY على اسم عشوائي — لو رجع 252 = السيرفر يكذب!
Methodology
⛓️ خطوات الـ SMTP Footprinting
1
Nmap Scan
اكتشاف Port 25 + إصدار + الأوامر المدعومة
sudo nmap -sC -sV -p25 TARGET
👀 VRFY في القائمة؟ → User Enum ممكن
2
EHLO — تحقق من الميزات
شوف كل الميزات المدعومة
telnet TARGET 25 EHLO test
3
VRFY — User Enumeration
جرب أسماء من LinkedIn أو قوائم شائعة
VRFY root VRFY admin VRFY john.smith
⚠️ تحقق أول بـ VRFY على اسم عشوائي — السيرفر ممكن يكذب!
4
Open Relay Check
تحقق إذا السيرفر Open Relay
sudo nmap TARGET -p25 --script smtp-open-relay -v
5
لو Open Relay — Mail Spoofing
ترسل إيميل مزيف بهوية موثوقة
MAIL FROM: <ceo@company.com> RCPT TO: <target@company.com>
🎯 Spear Phishing بهوية المدير = أخطر هجوم!
Explained — Q&A
🌐 الأساسيات
إيش الفرق بين Port 587 وPort 465؟
587 يستخدم STARTTLS — يبدأ الاتصال عادي بعدين يتحول للتشفير. 465 يستخدم SSL/TLS — مشفر من أول لحظة. الاثنين مشفرين بس وقت بدء التشفير مختلف.
ليش SMTP ما عنده authentication افتراضياً؟
لأنه بروتوكول قديم (1982) — صُمم قبل ما الأمان يكون أولوية. الحل جاء لاحقاً بـ ESMTP وAUTH PLAIN. لكن لا يزال بدون authentication للاتصالات بين السيرفرات.
🎭 Mail Spoofing
هل SPF وDKIM يمنعون Mail Spoofing كلياً؟
لا — يعملان على جانب المستلم فقط. لو Open Relay موجود المهاجم يرسل الإيميل المزيف. بعض المستلمين SPF/DKIM يكشفه ويحطه في spam. بعضهم ما عندهم SPF/DKIM = الإيميل يوصل مباشرة!
إيش الفرق بين Phishing وSpear Phishing؟
Phishing = إيميل لعدد كبير من الناس بشكل عام "فزت بجائزة". Spear Phishing = مستهدف لشخص معين بمعلومات شخصية "عزيزي John، بخصوص مشروعك مع قسم IT". الثاني أخطر لأنه مقنع ومخصص.
👤 VRFY و EXPN
ليش لا نثق بنتائج VRFY دايماً؟
بعض السيرفرات مضبوطة تقول 252 حتى لو اليوزر ما موجود! جرب VRFY على اسم عشوائي واضح — لو رجع 252 = السيرفر يكذب وما تقدر تثق بالنتائج.
إيش الفرق بين VRFY وEXPN؟
VRFY يتحقق من يوزر واحد. EXPN يوسّع mailing list — يعرض كل الأشخاص فيها. EXPN أخطر لأنه يكشف أسماء + إيميلات دفعة وحدة.
📤 إرسال إيميل
ليش الإيميل ينتهي بنقطة . وحدها؟
لأن DATA يقول للسيرفر "ابدأ الاستقبال" — السيرفر ما يعرف متى تنتهي. النقطة على سطر وحدها = إشارة "انتهيت". بعدها السيرفر يرسل 250 Ok: queued.
إيش يعني NOTIFY=success,failure؟
يطلب من السيرفر إرسال إشعار: success = لو الإيميل وصل، failure = لو ما وصل. مفيد في pentest لتأكيد إن الإيميل المزيف وصل للهدف.