◄ BACK TO PROTOCOLS
HTB Academy · Module 112 · Section 6/21
Footprinting Port 21/20 Clear-Text vsFTPd
FTP — FILE TRANSFER PROTOCOL
PROTOCOL ANALYSIS · ENUMERATION · EXPLOITATION VECTORS
Protocol
FTP / FTPS
Control Port
TCP 21
Data Port
TCP 20
Anonymous
ممكن ⚠️
Encryption
Clear-Text ⚠️
Linux Server
vsFTPd
نظرة عامة
ما هو FTP؟

بروتوكول نقل الملفات — من أقدم البروتوكولات على الإنترنت. يشتغل على Application Layer في TCP/IP، نفس طبقة HTTP وPOP. يستخدم قناتين منفصلتين للتواصل.

مكانه في TCP/IP Stack
Application Layer — FTP, HTTP, POP
Transport Layer — TCP
Internet Layer — IP
القناتين
PORT 21 — Control Channel
إرسال الأوامر ورموز الحالة
PORT 20 — Data Channel
نقل الملفات فعلياً
💡 لو الاتصال انقطع أثناء النقل، FTP يقدر يكمّل من آخر نقطة (resume).
Anonymous FTP

بعض السيرفرات تسمح بالدخول بدون باسورد باستخدام اليوزر anonymous.

⚠️ المهاجم يقدر يتصفح الملفات بدون credentials!
ftp 10.129.14.136 220 "Welcome to HTB vsFTP" Name: anonymous 230 Login successful. ftp> ls - Calendar.pptx - Important Notes.txt
Active vs Passive Mode
الفرق الأساسي

الفرق في مين يبدأ قناة البيانات:

🔵 Active Mode
1. Client يتصل بـ Port 21
2. Client يخبر السيرفر بـ port محلي
3. Server يتصل بالـ port اللي حدده Client
⛔ لو عند Client firewall — السيرفر ما يوصله!
🟢 Passive Mode (PASV)
1. Client يتصل بـ Port 21
2. Server يعلن عن port معين
3. Client هو اللي يتصل بهالـ port
✅ Client يبدأ الاتصال — Firewall ما يحجب!
🎯 في pentest: استخدم PASV لأنك خلف NAT/Firewall كـ attacker
FTP vs TFTP
المقارنة
الخاصيةFTPTFTP
المصادقةيوزر + باسوردبدون مصادقة!
البروتوكولTCP (موثوق)UDP (غير موثوق)
تصفح الملفاتيدعم lsلا يدعم!
الاستخدامالإنترنت والشبكاتالشبكات المحلية فقط
التشفيرClear-textClear-text
⚠️ TFTP لا يدعم directory listing — بخلاف FTP
أوامر TFTP
الأمرالوظيفة
connectتحديد الـ host والـ port
getتحميل ملف من السيرفر
putرفع ملف للسيرفر
quitالخروج
statusحالة الاتصال
verboseتفعيل الوضع التفصيلي
الإعدادات — vsFTPd
ملف الإعداد الافتراضي

ملف الإعداد: /etc/vsftpd.conf

sudo apt install vsftpd cat /etc/vsftpd.conf | grep -v "#" listen=NO anonymous_enable=NO local_enable=YES write_enable=YES use_localtime=YES xferlog_enable=YES connect_from_port_20=YES secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd ssl_enable=NO
💡 الإعدادات الافتراضية = مغلقة ومحمية — الخطر يجي من التعديلات!
شرح الإعدادات المهمة
الإعدادالوظيفة
anonymous_enable=YESالسماح بالدخول المجهول
local_enable=YESالسماح لمستخدمي النظام
write_enable=YESالسماح بالكتابة
xferlog_enable=YESتسجيل عمليات النقل
ssl_enable=YESتفعيل TLS
hide_ids=YESيخفي أسماء المستخدمين
🚫 /etc/ftpusers — المستخدمون الممنوعون
cat /etc/ftpusers guest john kevin
⚠️ حتى لو موجودين في النظام — ممنوعون من دخول FTP
Dangerous Settings
الإعدادات الخطيرة
الإعدادالخطر
anonymous_enable=YESدخول بدون باسورد
anon_upload_enable=YESرفع ملفات من أي شخص
anon_mkdir_write_enable=YESإنشاء مجلدات
no_anon_password=YESحتى بدون سؤال باسورد!
write_enable=YESتعديل + حذف الملفات
ls_recurse_enable=YESيظهر كل الملفات دفعة وحدة
hide_ids=NOUID/GID ظاهر = usernames للـ brute-force
⛓️ Upload → RCE
🔍
Nmap
Port 21
👤
Anonymous
بدون باسورد
📤
put shell.php
رفع webshell
🌐
Browser
site.com/shell.php
💥
RCE
root!
🎯 FTP متصل بـ web server + write مفعّل = RCE مباشر
الأدوات
اختر الأداة:
🔍Nmap
📁ftp client
📥wget
🔒openssl
🔌netcat
🔍 Nmap على FTP
sudo nmap -sV -p21 -sC -A 10.129.14.136 PORT STATE SERVICE VERSION 21/tcp open ftp vsftpd 2.0.8 | ftp-anon: Anonymous FTP login allowed! | - Calendar.pptx [NSE: writeable] | ftp-syst: vsFTPd 3.0.3
💡 script ftp-anon يكتشف تلقائياً Anonymous ويعرض المحتوى!
Flagالمعنى
-sVVersion Scan
-p21Port 21 فقط
-sCDefault NSE Scripts
-AAggressive — OS + version + scripts
📁 ftp client — الاتصال والتصفح
الاتصال:
ftp 10.129.14.136 220 "Welcome to HTB vsFTP" Name: anonymous 230 Login successful. ftp> ls prep-prod.txt ftp> get prep-prod.txt 226 Transfer complete. ftp> put shell.php 226 Transfer complete.
💡 get = تحميل، put = رفع
📥 wget — تحميل كل شيء
wget -m --no-passive ftp://anonymous:anonymous@10.129.14.136 tree . └── 10.129.14.136 ├── Calendar.pptx ├── Clients/ └── Important Notes.txt
✅ يحمّل كل الملفات ويحفظها في مجلد باسم الـ IP
🔒 openssl — للـ FTPS (TLS)
openssl s_client -connect 10.129.14.136:21 -starttls ftp CONNECTED(00000003) depth=0 C = US, ST = California, O = Inlanefreight, OU = Dev, CN = master.inlanefreight.htb, emailAddress = admin@inlanefreight.htb
💡 SSL Certificate يكشف:
• hostname → سيرفرات ثانية في الدومين
• email → يوزرنيم الـ admin للـ brute-force
• OU = Dev → إعدادات أضعف غالباً
• Location → فروع الشركة
🔌 netcat / telnet — اتصال Raw
nc -nv 10.129.14.136 21 220 "Welcome to HTB vsFTP" telnet 10.129.14.136 21 220 "Welcome to HTB vsFTP"
💡 مفيد لو FTP client ما يشتغل — تتحكم بالبروتوكول يدوياً
📋 NSE Scripts المهمة
Scriptالوظيفة
ftp-anonيكشف Anonymous login
ftp-systمعلومات السيرفر والإصدار
ftp-bruteBrute-force credentials
ftp-vsftpd-backdoorثغرة vsFTPd 2.3.4 backdoor
ftp-bounceFTP Bounce Attack
Methodology
⛓️ خطوات الهجوم
1
Nmap Scan
اكتشاف Port 21 + إصدار vsFTPd + Anonymous مفعّل؟
sudo nmap -sV -p21 -sC -A TARGET
2
Anonymous Login
جرب الدخول بدون باسورد
ftp TARGET anonymous + Enter
3
تصفح وتحميل كل شيء
حمّل أي ملف مثير للاهتمام فوراً
wget -m --no-passive ftp://anonymous:anonymous@TARGET
4
تحقق من Write Access
جرب ترفع ملف — لو نجح = ممكن RCE
ftp> put test.txt 226 Transfer complete ← write مفعّل!
5
بناءً على النتائج
كل نتيجة تفتح طريق:
Anonymous → تصفح مباشر Write → Upload Shell → RCE vsFTPd 2.3.4 → Backdoor FTPS → SSL Certificate Info
🧠 القاعدة الأهم
💡 هاد الـ mindset مش بس لـ FTP:
أي service تلاقيها → في upload؟ → ممكن RCE؟
FTP، SMB، HTTP upload، NFS — كلها نفس التفكير!
Explained — Q&A
🌐 الأساسيات
ليش FTP يستخدم قناتين بدل واحدة؟
عشان الأوامر والبيانات منفصلين — Port 21 للأوامر دايماً مفتوح، Port 20 يُفتح فقط وقت نقل الملف. هاد يخلي الـ connection أكثر استقراراً.
ليش FTP خطير رغم قدمه؟
لأنه clear-text — كل باسورد وكل ملف يمشي على الشبكة readable. أي شخص يعمل sniffing يشوف كل شيء. وكمان Anonymous login لو مفعّل = دخول مجاني لأي شخص.
⚡ Active vs Passive
ليش Passive أفضل في الـ pentest؟
لأنك كـ attacker خلف NAT أو Firewall. في Active Mode السيرفر يتصل فيك — الـ Firewall يحجبه. في Passive Mode أنت اللي تتصل بالسيرفر — يشتغل دايماً.
🔒 TLS/SSL
TLS يحمي FTP — ليش لا يزال خطير؟
TLS يشفر البيانات أثناء النقل — صح. بس الـ SSL Certificate نفسه يكشف معلومات: hostname، email الـ admin، اسم الشركة والقسم والموقع. المهاجم يستخدم هاي المعلومات في brute-force وaggregation.
ليش email الـ admin مهم؟
لأن admin@inlanefreight.htb يعطيك اليوزرنيم "admin" — تجربه على SSH، FTP، SMB بباسوردات شائعة. الناس بتستخدم نفس اليوزرنيم على أكثر من سيرفر!
🎯 Upload → RCE
ليش FTP المتصل بـ web server خطير جداً؟
لأن الـ developer يستخدم FTP لرفع ملفات الموقع. لو أنت ترفع shell.php عبر FTP — الملف يصير على الـ web server. تفتحه من المتصفح = تشغّله = RCE. الـ admin فكّر FTP "للنقل فقط" وما فكّر فيه كـ attack vector.