سوف نتحدث اليوم بشكل أساسي عن ثغرات Unrestricted File Upload بشكل سريع وسوف تكون مُقدمة للعديد من الشروحات المُركزة حول هذه الثغرة بإذن الله.

في قابلية رفع الملفات هناك مشاكل كثيرة يمكن ان تحصل في أمن التطبيق أو الموقع سنناقش اليوم كل ما يتعلق بثغرة Unrestricted File Upload.

ufa

الوصف 

تحميل الملفات في الموقع له خطورة كبيرة على النظام كاملاً فأي مهاجم يحتاج الى دخول النظام عن طريق الحصول على قابلية تنفيذ بعض التعليمات البرمجية التي تؤدي الى حصول المهاجم على الصلاحيات الادارية او الصلاحيات المطلقة للتحكم في السيرفر , الموقع , التطبيق .

وعواقب تحميل ملفات على الموقع قد تختلف باختلاف نوع الملفات وصيغها والمحتوى الذي تشمله .

المخاطر

  • حقن اكواد مصدرية ينفذها السيرفر كتعليمات برمجية ممكن أن يؤدي الى السيطرة الكاملة على النظام
  • رفع شيل يمكنه ان ينفذ الاوامر , يتصفح الملفات , يدرج ويعدل على الملفات في حالة الصلاحيات الخاصة بالملف . وبالتالي فشل النظام بالكامل
  • رفع صفحة تصيد على الموقع وبذلك يتم سحب الباسوردات والرموز والى ما شابه ذالك .
  • تخطي SOP من خلال رفع صفحة على نفس الموقع تقوم بارسال الطلبات .
  • يمكن للمهاجم ان يضع XSS مخزنة في النظام والموقع ويصيب المستخدمين او المدراء .
  • رفع ملفات script في الموقع .
  • رفع ملفات تحتوي اكواد ضارة تؤثر على المتصفحات القديمة مثل IE وتصيب المستخدمين

 

مثال على العملية 

لمهاجمة السيرفر 

  1. رفع ملفات php , jsp aspx,asp وغيرها لتنفيذها كتعليمات مصدرية .
  2. رفع ملفات ذات حجم كبير للتسبب في DOS في السيرفر .

مهاجمة التطبيق واعضائه 

  1. رفع ملفات .gif لمهاجمة مكتبة معينة حين تقوم بفلترة الصورة  (مثال في المصادر) . 
  2. رفع ملف EXE تنفيذي في موقع موثوق وارساله كتحديث للبرنامج .
  3. رفع ملفات فايروسات اخرى على موقع موثوق ومحمي ومؤتمن من قبل الاعضاء .
  4. رفع ملفات HTML للتسبب في ثغرات XSS .

 

كيفية الحماية من ثغرات Unrestricted File Upload 

هناك العديد من المبرمجين يحتاجون لمعرفة كيفية حماية تطبيقاتهم الخاصة والمواقع التي يديروها في سبيل سلامة المستخدمين والسيرفر . هناك عدة من الاجراءات التي يمكنك القيام بها لضمان امن رفع الملفات

  • استخدام حظر صيغ ملفات غير مصرح بها لبعض الصيغ مثل (php , asp , jsp ,html , htm ,exe .cmd …etc )
  • استخدام تمرير او قبول ببعض الصيغ المصرح بها  (مثل txt , png ,jpg , zip ,..etc )
  • جعل موضوع الرفع محمي بواسطة ملفات هتاكسس اذا توفرت او جعل اي ملف يتم تنزيله للمستخدم للحماية من رفع الشيل .
  • استخدام تحققات للHEADER ومطابقة الContent-Type للصيغ المصرح بها .
  • استخدام مكتبات وAPI التعرف على صيغ الملفات المتوفرة وابقائها على تحديثات الكاتبين للمكتبة حتى لا يتم كسر التحقق .
  • هناك العديد من المشاكل تواجه اسماء الملفات لذلك يجب منع وضع الاسماء برموز حتى لا ينفذها النظام كتعليمات وتتسبب في XSS .

 

مثال عملي 

ملف upload.html

1

 

 

ملف upload_picture.php

2

 

الان لو ناتي لملاحظة ملف الرفع نلاحظ عدم وجود اي فلترة او حماية للملفات المرفوعة لذلك لنرفع ملف به امر برمجي .

ومثل ما يمكن رؤيته الملف سيتم تخزينه في مسار الرفع .

 

ملف evil.php

3

دالة system تقوم بعمل اوامر للنظام

بأعتبار ان الملف سيتم رفعه في مجلد الصور لكن الصيغة هي php لذلك السيرفر سيقرأه كملف php ويتم تنفيذه

لو فرضنا ان الموقع هو server.example.com

http://server.example.com/upload_dir/evil.php?cmd=ls%20-l

مسار الرفع لنفرض سيكون /upload_dir/ في متغير cmd وضعنا ls%20-l  وهو امر للسيرفر لعرض الملفات في المجلد الحالي سيتم تطبيقه بواسطة الدالة system .

سيتم عرض ملفات السيرفر

سوف يتم شرح الموضوع بصورة اكبر في مواضيع اخرى ان شاء الله .

والمقال التالي سيكون حول ثغرة اكتشفتها في احد اكبر التطبيقات المستخدمة من قبل شركات عملاقة كفيس بوك وايباي وIBM .

مع تحيات فريق العمل ونرجوا ان تكونوا استفدتم من الموضوع.