
CVE-2025-47812 POC
هذا دليل إثبات المفهوم (PoC) لاستغلال خادم Wing FTP (CVE-2025-47812)
عانت إصدارات خادم Wing FTP السابقة للإصدار 7.4.4 من ثغرة تنفيذ التعليمات البرمجية عن بُعد (RCE) نتيجة المعالجة غير الآمنة لمعامل اسم المستخدم. عندما يُسمح لنا بتسجيل الدخول في صفحة /loginok.html، يمكننا حقن بايتات فارغة %00 متبوعة بكود Lua للحصول على RCE.
عند إرسال طلب POST إلى صفحة loginok.html، تستخدم الدالة c_CheckUser() (التي تتحقق من اسم المستخدم وكلمة المرور الصحيحين) strlen(). المشكلة هي أن الدالة المعتمدة ضعيفة أمام اقتطاع البايتات الفارغة.
هذا يعني أنه إذا أرسلنا %00 بعد اسم المستخدم، فإن c_CheckUser() ستتحقق فقط من الجزء من السلسلة قبل البايت الفارغ: "anonymous%00........." --> "anonymous".
بعد ذلك، يقوم التطبيق بإنشاء متغير SESSION، يُكتب إلى ملف. ومع ذلك، لا يحتوي هذا الملف على اسم المستخدم فحسب، بل يحتوي على السلسلة بأكملها بما في ذلك البايت الفارغ والكود التالي. نظرًا لأن الملف هو ملف Lua، يمكن حقن كود Lua مما يؤدي إلى RCE.
تخيل أن تسجيل الدخول المجهول مسموح به. إذا أرسلنا طلب POST بهذا الهيكل: username=anonymous%00]]%0dlocal+h+%3d+io.popen("whoami")%0dlocal+r+%3d+h%3aread(\"*a\")%0dh%3aclose()%0dprint(r)%0d--&password=&username_val=anonymous&password_val= فسنكون قد حقنا الأمر whoami بعد البايتات الفارغة باستخدام كود Lua. بمجرد أن نقوم بذلك، نحتاج إلى نسخ UID من الاستجابة وإرسال طلب GET إلى أي صفحة موثقة، على سبيل المثال صفحة dir.html باستخدام نفس UID.
يقوم سكريبت CVE-2025-47812.py بتنفيذ العملية لنا.