Hacking Minions

ثغرة Unrestricted File Upload واستغلالها

في هذا الموضوع سنشرح ثغرة file upload، والتي تسمح لنا برفع أي نوع من الملفات التي نرغب برفعها على السيرفر المستهدف، وهذه الهجمة هي من الهجمات التي تستهدف السيرفر و مستخدمي الموقع وتختلف أسباب كل عملية حسب رغبة الهاكر.

– ماهي ثغرة File Upload؟

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

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

– استكشاف الثغرة.

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

فإذا استطعنا رفع ملف نوعه لا يطابق الملف المطلوب(مثلاً إذا كان الملف المطلوب صورة واستطعنا رفع ملف نصي txt ) فهنا نقوم بالاختبار واستغلال الثغرة.

HTTP&GET Requests:

قبل أن ننتقل للشرح التطبيقي دعنا نتحدث عن أنواع الـ Requests قليلاً وباختصار فمن المهم جداً معرفتها.

الـ GET Request: وتعني أن الـRequest سيطلب فقط عرض المحتوى المطلوب من قبل المستخدم ولن تدخل أي Data إلى السيرفر عن طريق الـRequest.

الـ POST Request: وتعني أن السيرفر سيتلقى Data من خلال هذا الـRequest وسيقوم بمعالجته لتنفيذه أو تخزينه.

– كيف نحدد نوع الـRequest؟

نعرف ذلك عن طريق الـURL الذي يظهر لنا، فإذا استطعنا رؤية المتغير والقيمة فهذا الطلب هو من نوع GET ويظهر كالتالي :

http://website.com/path1/path2/path3/?page=include.php

وإذا لم يظهر المتغير وقيمته فهذه الطلب من نوع POST، ويظهر كالتالي:

http://website.com/path1/path2/path3/

ولكن

إذا كنّا لا نستطيع رؤية المتغير وقيمته فكيف سنستطيع تخطي الفلاتر ورفع الملفات التي نريد رفعها على السيرفر؟

لتخطي الفلترة سنقوم بتحرير الـRequests التي تَحمل الملف الذي نرغب برفعه، وذلك عن طريق أداة Burp suite، وسنشرح ذلك في الخطوات بعد قليل.

*إذا لم تكن قد استخدمت أداة Burp Suite من قبل فاتبع هذه الروابط وقم بتحميلها وتهيئة المتصفح ليعمل معها

للتحميل: https://portswigger.net/burp/communitydownload 3

للتهيئة: https://portswigger.net/burp/documentation/desktop/penetration-testing/configuring-your-browser

– استغلال الثغرة والإختراق:

بعدما انتهينا من توضيح جميع المعلومات التي تحتاج معرفتها لفهم الثغرة وطريقة تعامل السيرفر مع الطلبات، نبدأ الآن بشن هذه الهجمة واستغلال الثغرة.

*سنطبق جميع الخطوات على سيرفر metasploitable والمجهز ليتم اختراقه، إذا لم تقم بتثبيت هذا السيرفر على جهازك فلابد أن تقوم بذلك الآن فلقد قمنا بشرح طريقة تثبيته وتهيئته في موضوع سابق.

*سنستخدم PHP meterpreter Shell هذه المرة وسنترك لكم طريقة إنشاؤه والتفاعل معه لأنه سبق وقمنا بشرحها في المواضيع السابقة، بالإضافة إلى أننا سنقوم بهذه الخطوة في المقطع الخاص بهذا الموضوع.

أولاً: نقوم بتشغيل metasploitable ثم ندخل الـIP الخاص بها في المتصفح ثم الدخول إلى صفحة DVWA حيث سنطبق الهجمة.

ثانياً: نضع مستوى الأمان على low عن طريق صفحة DVWA Security من القائمة اليسرى بالأسفل.

ثالثاً: ننتقل إلى صفحة Upload من القائمة اليسرى أيضاً.

ثم نقوم برفع أي صورة لاختبار عمل خاصية الرفع. بعد رفع الصورة ستظهر رسالة تخبرك بأنه قد تم رفع الصورة بنجاح.

رابعاً: قم برفع أي ملف آخر بشرط ألّا يكون صورة. وسيتم رفع الملف لأننا وضعنا مستوى الأمان low أي لايوجد حماية من الأساس.

قم الآن بزيادة مستوى الأمان إلى Medium وحاول رفع الملف الأخير، ستظهر لك رسالة بأنه لم يتم رفع الملف، لماذا؟لأن السيرفر لا يقبل سوى ملفات png,jpeg وغيرها من ملفات الصور.

إذاً، ماعلينا فعله الآن هو تخطي الفلترة التي يقوم بها السيرفر وذلك عن طريق تحرير الـrequest كما ذكرنا سابقاً.

خامساً: نقوم بتشغيل البروكسي(burp suite) والـintercept من خانة Proxy بالأعلى لنجري التغييرات على الطلب المرسل…

سادساً: نقوم برفع الملف بصيغة JPEG ثم نعود إلى Burp ونقوم بالتعديل على اسم الملف في الRequest Header الظاهر أمامنا، اسم الملف هو المظلل في الصورة التالية، نغير امتداد الملف من JPEG الى php ليتم حفظه بصيغة php.

والآن تم رفع ملف الـShell بنجاح ويجب عليك الآن الانتقال إلى عنوان الملف في السيرفر كما هو ظاهر أمامنا في الصورة عن طريق متصفحك ليتم تشغيل الملف في السيرفر وتتمكن من التحكم به .

ولكن …لماذا تم رفع الملف؟

نستنتج من هذا الإختبار أن السيرفر يقوم بفحص نوع الملف أو ماتسمى بـ content-type حيث يحدد ذلك عن طريق الإمتداد الذي رفعنا به الملف(JPEG) ويدل ذلك أيضاً أن الفلتر هو من نوع client-side filter أي يقوم بتحديد النوع عند خروجه من المستخدم وليس عند وصوله للسيرفر، فنقوم نحن بتغيير امتداد الملف بعد تخطي الفلتر ونرفعه على السيرفر بصيغةPHP.

– استغلال الثغرة بمستوى حماية أعلى.

الآن قم بوضع مستوى الحماية على High وهو أعلى مستوى حماية في هذا السيرفر، ونبدأ بمحاولة رفع ملف الشّل.

-نقوم برفع الملف بدون أن نقوم بأي من الخطوات السابقة، سنرى أن الملف لم يرفع.

-نبدأ باختبار نوع الفلترة من جديد ونعاود رفع الملف و تغيير الإمتداد عن طريق البروكسي(Burp).

مجدداً، لن يتم رفع الملف،

إذاً ما الذي علينا فعله؟ يبدو أن السيرفر يقوم بفحص الإمتداد أيضاً بالإضافة إلى نوع الملف…

نعود إلى البروكسي ونرفع الملف ونراجع الـRequest Header، نقوم بتغيير امتداد الملف المرفوع كما هو موضح في الصورة بإضافة .PHP إلى اسم الملف

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

*يوجد طرق أخرى لتخطي الفلاتر… هل تستطيع ذكرها لنا في الردود بالأسفل؟

*إذا كان هناك أي شيء لم يتضح معك فيمكنك مشاهدة الشرح التطبيقي في المقطع التالي:

*وإذا كان لديك أي سؤال فقم بكتابته في تعليقات الموضوع بالأسفل وسنقوم بالرد في أسرع وقت ممكن.

تذكير:
كل ما يقدمه Hacking Minions هو لأسباب تعليمية فقط ونحن غير مسؤولون أبداً عن أي استخدام غير قانوني لأي محتوى يتم نشره.

0
0

اترك تعليقا