
إثبات المفهوم لرفع ملف عشوائي مصادق عليه في Sitecore 10.3، مما يتيح نشر webshell وتنفيذ الأوامر عن بُعد عبر وظيفة استيراد اللغات.
المؤلف: Thomas Stern
التاريخ: 26/01-2023
من الممكن عبر وظيفة استيراد اللغات رفع ملف عشوائي. قد يكون هذا الملف عبارة عن شل ويب يسمح بتنفيذ الأوامر على الخادم.
لاختبار هذه الثغرة، تم إنشاء مثيل Sitecore 10.3 على جهاز محلي عبر Docker. لم يتم اختبار هذه الثغرة على الإصدارات السابقة من Sitecore، لكن الإصدارات الأقدم قد تكون عرضة لنفس التقنية.
المضيف: Windows 11 تشغيل Docker for Desktop Sitecore 10.3
نظرًا لأن هذه ثغرة مصادق عليها، يلزم وجود مجموعة صالحة من بيانات الاعتماد. في هذا المثال الاختباري، تم استخدام admin/b
يوجد مربع الأدوات تحت لوحة التحكم في Sitecore
الآن اختر استيراد اللغة
ابدأ باختيار تصفح
بعد ذلك، حدد المجلد المؤقت 'سيكون هذا أيضًا وجهة الشل.
الكود المستخدم في الاختبار هو شل ويب بسيط تم تنزيله من https://github.com/tennc/webshell/blob/master/fuzzdb-webshell/asp/cmdasp.aspx مع ملاحظة أنه تم إجراء تعديل صغير لتشغيل powershell بدلاً من cmd الافتراضي.
اختر زر الرفع وحدد الشل الخاص بك ثم اضغط على التالي
يجب أن يتم رفع الشل الخاص بك الآن
ابدأ بالانتقال إلى الشل المرفوع "https://sitename/temp/shell.aspx" مع رفع الشل، أصبح من الممكن الآن تنفيذ الأوامر بشكل كامل على النظام
يجب أن يتحقق كود رفع ملفات اللغة من الملفات التي يتم رفعها ويسمح فقط بالملفات القابلة للتنفيذ مثل aspx, exe وغيرها. كما يجب رفع ملفات اللغة فقط إلى دليل لا يسمح بتنفيذ الأوامر. إحدى طرق القيام بذلك هي إضافة قاعدة حظر إلى ملف web.config كما يلي. لاحظ أن هذا سيمنع جميع الطلبات إلى الملفين المذكورين.
<rule name="BlockFileUpload" enabled="true" patternSyntax="Wildcard" stopProcessing="true">
<match url="*" />
<conditions logicalGrouping="MatchAny">
<add input="{URL}" pattern="*sitecore/shell/Applications/Files/FileBrowser.aspx" />
<add input="{URL}" pattern="*sitecore/shell/Applications/Dialogs/Upload/Upload2.aspx" />
</conditions>
<action type="CustomResponse" statusCode="404" statusReason="File or directory not found." statusDescription="The resource you are looking for might have been removed, had its name changed, or is temporarily unavailable." />
</rule>