نظرة عامة
ما هو 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
المقارنة
| الخاصية | FTP | TFTP |
|---|---|---|
| المصادقة | يوزر + باسورد | بدون مصادقة! |
| البروتوكول | TCP (موثوق) | UDP (غير موثوق) |
| تصفح الملفات | يدعم ls | لا يدعم! |
| الاستخدام | الإنترنت والشبكات | الشبكات المحلية فقط |
| التشفير | Clear-text | Clear-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=NO | UID/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 | المعنى |
|---|---|
| -sV | Version Scan |
| -p21 | Port 21 فقط |
| -sC | Default NSE Scripts |
| -A | Aggressive — 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 → فروع الشركة
• 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-brute | Brute-force credentials |
| ftp-vsftpd-backdoor | ثغرة vsFTPd 2.3.4 backdoor |
| ftp-bounce | FTP 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 — كلها نفس التفكير!
أي 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.