مضى على الشبكة و يوم من العطاء.
  • تحذير: يجب على كل روّاد الشبكة تشغيل برامج الاختراق داخل الأنظمة الوهمية وهي بهدف التعلم وحماية الأعضاء والتوعية بها

[ WalkTh ] فهم ثغرات File Inclusion والتعامل معها ـ ( File Inclusion )

3b0-0d3b0-0d is verified member.

{ || مشرف قسم CTF || }
.:: طاقم المشرفين ::.

السمعة:

55de4f7624252f03317e8e202822a6af
الـ File Inclusion هي ثغرات في البرامج والمواقع الإلكترونية الثغرات هاي بتشمل نوعين،
  1. الـ Local File Inclusion (LFI)
  2. الـ Remote File Inclusion (RFI)، وبتشمل كمان اشي اسمه directory traversal


راح يكون الحكي عن سبعه مواضيع :

1. مقدمة عن الـ File Inclusion

2. تعقب المسار (Path Traversal)

3. اختراق الملف المحلي - LFI (Local File Inclusion)

4. اختراق الملف المحلي #2 - LFI (Local File Inclusion)

5. اختراق الملف عن بعد - RFI (Remote File Inclusion)

6. إصلاح الثغرات - ( Remediation )


7. تحدي - Challenges

الاسئله من TryHackMe | File Inclusion

هذه الروم تتطلب اشتراك ⚠️


مقدمة عن الـ File Inclusion

الفكرة تاعت الـ File Inclusion إنها بتسمح للمهاجم إنه يستخدم ملفات من جهاز السيرفر تاع الموقع بطرق غير مخولة.

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

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

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


dbf35cc4f35fde7a4327ad8b5a2ae2ec
  • امثلة
مثال 1

كيفية استخدام الـ ( Parameters ) في البحث على جوجل كمثال. في البحث على جوجل، لما تكتب شيء وتضغط بحث، الرابط الذي يتم استخدامه بيمرر معلومات المستخدم لمحرك البحث. على سبيل المثال، لما تبحث عن شيء على جوجل، الرابط بيكون فيه Parameters تسمى “q” والقيمة بتكون الكلمة اللي بحثت عنها.

زي مثلا TryHackMe=q


مثال 2

المثال عن موقف تخيلي لمستخدم بيحاول يوصل لملف على سيرفر ويب. المستخدم بيبعث طلب HTTP للسيرفر على الإنترنت والطلب هاد بيحمل معه Parameters تسمى file وقيمتها اسم الملف اللي المستخدم بدو يوصله ويعرضه.

مثلا إذا كان المستخدم بده يعرض سيرته الذاتية (CV) داخل تطبيق الويب ف الطلب ممكن يكون كالتالي [B][COLOR=rgb(97, 189, 109)]http://webapp.thm/get.php?file=userCV.pdf[/COLOR][/B]حيث أن الـ file هي الـ Parameters
و userCV.pdf هو اسم الملف الذي يرغب المستخدم في الوصول إليه.


dc22709e572d5de31ed4effb2ebc161f

تعقب المسار (Path Traversal)



الـ Path Traversal ، هاي عبارة عن ثغرة أمان في مواقع الويب، بتسمح لصاحب الهجوم إنه يقرأ ملفات النظام اللي على السيرفر اللي الويب التطبيق بيشتغل عليه.
الهاكر بيستغل الثغرة هاي عن طريق تعديل واستغلال الرابط (URL) في التطبيق ليعثر ويوصل لملفات أو مجلدات برة المجلد الرئيسي للتطبيق.

المشكلة بتحصل لما يتم تمرير إدخال المستخدم لدالة زي file_get_contents في PHP. وهون الاهمية مش بالدالة نفسها
الاهم بالتصفية أو فلترة الإدخال اللي بيتم تمريره من المستخدم للدالة.

بـ PHP بتقدر تستخدم file_get_contents عشان تقرأ محتوى ملف. وبتقدر تلاقي معلومات أكتر عن الدالة هاي 👇

https://www.php.net/manual/en/function.file-get-contents.php

الصوره هاي بتبين كيف التطبيق بخزن الملفات بمجلد /var/www/app . 👇

45d9c1baacda290c1f95858e27f740c9

الطريقة الصحيحة بتكون لو المستخدم طلب محتوى ملف userCV.pdf من المسار المحدد /var/www/app/CVs



URLs
بنقدر نجرب الإدخال عن طريق إضافة بيانات تجريبية للرابط لنشوف كيف التطبيق بيتصرف. هجمات Path Traversal ، اللي بتعرف أيضًا بالـ نقطتين وشرطة مائلة ، بتستغل إمكانية نقل المجلد لخطوة واحدة للأعلى باستخدام نقطتين مثل ../ لو الهاكر لقى نقطة البداية، اللي في حالتنا هاي get.php?file=
بيقدر يبعت اشياء زي هاي مثلا http://webapp.thm/get.php?file=../../../../etc/passwd

لو مافي تصفية للإدخال، هو بيقدر يوصل لملفات ثانية برة مجلدات التطبيق، مثل etc/passwd/ . كل نقطة بتحرك المجلد مرحلة واحدة للأعلى حتى يوصل للمجلد الجذري /. وبعدين يغير المجلد لـ etc/ ومنها هو بقدر يقرأ ملف passwd .


c12d34456ebe25bafffeb829c58f98c0

بالمثال، لو التطبيق على سيرفر ويندوز، الهاكر لازم يعطي مسارات ويندوز. مثلاً لو الهاكر بده يقرأ ملف boot.ini اللي في c:\boot.ini ، بيقدر يجرب هيك حسب إصدار نظام التشغيل المستهدف:
[COLOR=rgb(26, 188, 156)]http://webapp.thm/get.php?file=../../../../boot.ini[/COLOR]
أو
[COLOR=rgb(26, 188, 156)]http://webapp.thm/get.php?file=../../../../windows/win.ini[/COLOR]
نفس المفهوم بيتطبق هنا زي ما بيتطبق مع أنظمة لينكس، حيث بنتحرك لأعلى في المجلدات حتى نوصل للمجلد الجذري، اللي عادة ما يكون c: .

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


الموقعالوصف
etc/issue/يحتوي على رسالة أو تعريف النظام التي سيتم طباعتها قبل شاشة تسجيل الدخول.
etc/profile/يتحكم في المتغيرات الافتراضية على مستوى النظام، مثل متغيرات الصدارة (Export variables)، وقناع إنشاء الملفات (umask)، أنواع الأجهزة (Terminal types)، ورسائل البريد للإشارة إلى وجود رسائل بريد جديدة.
proc/version/يحدد إصدار نواة نظام لينكس.
etc/passwd/يحتوي على معلومات عن جميع المستخدمين المسجلين على النظام والذين لديهم حق الوصول إليه.
etc/shadow/يحتوي على معلومات حول كلمات مرور المستخدمين في النظام.
root/.bash_history/يحتوي على سجل لجميع الأوامر التي تم تنفيذها بواسطة المستخدم الجذر.
var/log/dmessage/يحتوي على رسائل النظام العالمية، بما في ذلك الرسائل التي تم تسجيلها أثناء بدء تشغيل النظام.
var/mail/root/يحتوي على كل رسائل البريد الإلكتروني الواردة للمستخدم الجذر.
root/.ssh/id_rsa/يحتوي على مفاتيح SSH الخاصة للمستخدم الجذر أو أي مستخدم صالح معروف على الخادم.
var/log/apache2/access.log/يحتوي على سجل الطلبات التي تم الوصول إليها لخادم الويب Apache.
C:\boot.iniيحتوي على خيارات الإقلاع لأجهزة الكمبيوتر التي تعمل بنظام BIOS.
  • ما هي الوظيفة التي تسبب ثغرات أمنية في اجتياز المسار في PHP؟
image


الجواب file_get_contents


اختراق الملف المحلي - LFI (Local File Inclusion)
لو بتشتغل على تطبيق ويب وبتستخدم لغة PHP، ممكن تواجهك مشكلة أمان اسمها LFI . هاي مشكلة بتحصل لما المبرمج ما بعطي الأمان حقو زي الإفراط في استخدام أوامر معينة في الكود.

مثال

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

المبرمج أيضًا ممكن يكون عمل محاولة لتحسين الأمان وحدد المسار اللي يحتوي على الملفات بناءً على إدخال المستخدم. لكن إذا ما عمل فحص جيد، الهاكر ممكن يستغل هاد الاشي بتغيير المسار في الرابط ليوصل لملفات حساسة زي etc/passwd/


حل لاب 1 👇

image

image
لقراءه الملف etc/passwd/ هكذا الرابط يكون

الجواب lab1.php?file=/etc/passwd


حل لاب 2 👇
image


لحل السؤال الثاني ومعرفه الدليل المحدد الذي يحتوي على الـ function نذهب للاب 2 ثم ندخل اي ادخال لتظهر رساله الخطأ
image
الجواب includes

اختراق الملف المحلي #2 - LFI (Local File Inclusion)

بهاي الحالة بنعمل اختبار الـ Black box
Black box
الفكرة هون إنه بنجرب البرنامج أو التطبيق بطريقة عادية زي أي شخص عادي بدون معرفة اشي عن كيفية عمله.

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

الفكرة برضه إنه الاختبار هاد بيزيد كتير في الوقت لجمع المعلومات وفهم مساحة الهجوم على الهدف.
حل لاب 3 👇

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

بالبدايه هذه هو الرابط التحدي [B][COLOR=rgb(255, 0, 0)]http://webapp.thm/index.php?lang=EN[/COLOR][/B]

إذا أدخلنا إدخالًا غير صحيح مثل THM، نحصل على خطأ يظهر كالتالي:

image
هذه الرسالة تكشف لنا معلومات هامة. عند إدخال THM كإدخال، تظهر رسالة الخطأ كيفية تبدو وظيفة الـ include include(languages/THM.php)

هيك بنعرف وظيفة الـ include بتضيف php. في نهاية الإدخال عند تضمين الملفات من دليل اللغات. لذلك يكون الإدخال الصحيح مثل هذا: index.php?lang=EN ، حيث يقع الملف EN داخل دليل اللغات المعطى ويسمى EN.php .

وكمان كشفت رسالة الخطأ معلومات ثانيه مهمه عن مسار دليل التطبيق على الويب الكامل وهو [B][COLOR=rgb(251, 160, 38)]/var/www/html/THM-4/[/COLOR][/B] .

للاستفادة من هذا، نحتاج إلى استخدام خدعة /.. كما وصفتها في الاعلى لنجرب ما يلي:

[B][COLOR=rgb(97, 189, 109)]http://webapp.thm/index.php?lang=../../../../etc/passwd[/COLOR][/B]
ملاحظة: استخدمنا 4 /.. لأننا نعلم أن المسار يحتوي على أربعة مستويات [B][COLOR=rgb(247, 218, 100)]var/www/html/THM-4/[/COLOR][/B] . ولكن مع ذلك، لا نزال نتلقى الخطأ التالي:
image
لما نحاول نوع معين من الاختراق في موقع ويب، نلاحظ أنه بغض النظر عن ما نفعله، يبدو أن النظام يضيف دائمًا php. في نهاية الملف الذي نحاول قراءته مثل المثال الذي اخذناه يعني إننا مثلًا إذا أردنا قراءة ملف [B][COLOR=rgb(255, 0, 0)]etc/passwd/[/COLOR][/B] ، سيجعل النظام ذلك يبدو وكأننا نحاول قراءة ملف etc/passwd.php/ ، الذي لا يوجد به البيانات التي نحتاجها.

لكن هناك خدعة تسمى NULL BYTE ونمثلها بـ %00 .

الـ %00 يخبر النظام أن يتوقف عن إضافة php. في نهاية الملف وأن يقرأ الملف الفعلي الذي نريد.

مثلاً، إذا قمنا بإضافة %00 في نهاية الإدخال الخاص بنا مثل index.php?lang=../../../../etc/passwd%00 ، بفهم النظام أننا نريد قراءة الملف الحقيقي etc/passwd/ بدون أي إضافات.

استخدام %00 يساعدنا بالوصول إلى الملفات التي بدنا اياها بدون مشاكل وبدون إضافة php. في نهايتها.

استخدام البايت الفارغ (Null Byte) هو تقنية حيث يتم تمثيل البيانات المستخدمة بترميز URL مثل %00 أو 0x00 في النص لإنهاء السلسلة. يمكنك التفكير فيها كمحاولة لخداع التطبيق على الويب لتجاهل أي شيء يأتي بعد البايت الفارغ.

بواسطة إضافة البايت الفارغ في نهاية البيانات، نقول لوظيفة التضمين أن تتجاهل أي شيء بعد البايت الفارغ، ويمكن أن يبدو هكذا:

include(“languages/…/…/…/…/…/etc/passwd%00”).“.php”);
وهذا مكافئ لـ
include(“languages/…/…/…/…/…/etc/passwd”);
ملحوظة: هذه الخدعة %00 لا تعمل مع PHP 5.3.4 وما فوق.
image

الجواب /lab3.php?file=…/…/…/…/etc/passwd%00




حل لاب 4 👇

في الاب هذا يقوم الموقع بفلتره الكلمات الرئيسية لتجنب الكشف عن معلومات حساسة ! يتم فلتره ملف etc/passwd/ . يعني بتسألو هسا كيف طيب شو نعمل تابع

هناك طريقتين ممكنتين لتجاوز الفلتره . باستخدام NullByte %00 أو الخدعة التي تضيف المجلد الحالي بنهاية الكلمة المصفاة /.. ويمكن استخدامها كالتالي: http://webapp.thm/index.php?lang=/etc/passwd/ أو يمكننا استخدام http://webapp.thm/index.php?lang=/etc/passwd%00 .

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

image
ندخل اي قيمه لنحل السؤال
image
الجواب file_get_contents

حل لاب 5 👇

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

زرنا الرابط التالي: http://webapp.thm/index.php?lang=../../../../etc/passwd

حصلنا على الخطأ التالي:

image
إذا تحققنا من رسالة الخطأ في قسم include(languages/etc/passwd) ، نعلم أن تطبيق الويب يقوم بتبديل /.. بسلسلة فارغة. هناك طرق عدة يمكننا استخدامها لتجاوز ذلك.

أولاً، يمكننا إرسال البيانات التالية للتجاوز: etc/passwd//....//....//....//....//....

شرح 👇

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

توضيح 👇

إذا قمنا بإرسال البيانات etc/passwd//....//....//....//....//....
، سيتم مطابقة الجزء //.... في البداية واستبداله بسلسلة فارغة، ثم يتوقف PHP عن البحث ويقرأ الملف الفعلي etc/passwd/ دون أي تعديل.

الصوره التاليه توضح الذي تم تحويلله الى سلسله فارغه من قبل الفلتره وماذا يقرأ بعد الفلتره 👇

30d3bf0341ba99485c5f683a416a056d

image

حل لاب 6 👇
image

image
الجواب THM-profile

بعدها عن طريق الامر THM-profile/../../../../etc/os-release
لقراءه etc/os-release/ كما هو مطلوب

image
الجواب 12.04

اختراق الملف عن بعد - RFI (Remote File Inclusion)

الـ Remote File Inclusion هو اختراق يسمح للمهاجم بتضمين ملفات من مصادر خارجية داخل تطبيق ضعيف الأمان. زي الـ Local File Inclusion

الـ RFI يحدث عندما يتم تلقيم إدخال المستخدم بشكل غير صحيح، مما يسمح للمهاجم بحقن عنوان URL خارجي داخل وظيفة التضمين. شرط واحد لحدوث هجوم RFI هو تفعيل خيار allow_url_fopen .

b0c2659127d95a0b633e94bd00ed10e0
مخاطر هجوم RFI أعلى من الـ LFI لأن ثغرات RFI تسمح للمهاجم بتنفيذ أوامر عن بعد على الخادم. ومن آثار هجوم RFI الناجحة ما يلي:
  1. كشف معلومات حساسة.
  2. Cross-site Scripting (XSS) - تنفيذ سكربتات خبيثة على الموقع.
  3. حجب الخدمة (DoS) - تعطيل خدمة الموقع.
لحدوث هجوم RFI ناجح، يجب على الخادم الخارجي التواصل مع خادم التطبيق. يستضيف المهاجم ملفات ضارة على خادمه، ثم يتم حقن الملف الضار داخل وظيفة التضمين باستخدام طلبات HTTP. يتم تنفيذ محتوى الملف الضار على خادم التطبيق الضعيف الأمان.

إصلاح الثغرات - ( Remediation )

كأنك مطور برامج، يعني مهم جدا إنك تكون عارف كيف تشوف ثغرات في البرامج اللي بتشتغل عليها على الويب، وكمان تعرف كيف تمنعها. عشان تمنع ثغرات في البرامج اللي بتخليك تضيف ملفات مش مفروض تدخلها،

بعض الحلول اللي بتقدر تعملها:

  1. احرص على تحديث النظام والخدمات اللي بتستخدمها، بما في ذلك إطارات البرمجة للتطبيقات على الويب.
  2. قفل الأخطاء اللي بتيجي من PHP عشان ما تبينش للهاكرز مسار التطبيق ومعلومات ثانية ممكن تساعدهم.
  3. استخدم Firewall خاص بالتطبيقات على الويب (Web Application Firewall) عشان تقلل احتمالية هجمات البرامج الضارة على التطبيق.
  4. اطفي بعض مميزات PHP إذا ما احتجتها في تطبيقك، زي ميزة allow_url_fopen و allow_url_include اللي بتسبب مشاكل في إدراج الملفات.
  5. فحص التطبيق على الويب بعناية وخليه يقبل بروتوكولات وطرق برمجة PHP اللي بتحتاجها بس.
  6. متوثقش بمدخلات المستخدم وتأكد إنك عامل فحص سليم للمداخل قبل ما تدرج ملفات.
  7. ضع قائمة بيضاء (Whitelist) لأسماء الملفات والمواقع المسموح بها، وكمان قائمة سوداء (Blacklist).

تحدي - Challenges
image

حل التحدي الاول
image
عن طريق البرب سويت ( وسيتم شرحها لاحقاً )

بعد فتح burp suite نذهب الى خيار proxy ثم نفتح الـ browser وندخل الموقع وندخل الادخال التالي كما يتطلب السؤال

../../../../etc/flag1
ثم نضفط على intercept ونعيد تحميل الصفحه 👇
image
نجد ال GET Request ثم نبدل ال GET بال POST عن طريق النقر على زر الماوس الايمن ثم
change request method

image
ثم نضغط على Forward
image


نجد على المتصفح النتيجه 👇


حل التحدي الثاني

عند القياب بنفس الخطوات ب البرب سويت نجد 👇

image
نبدل قيمه الكوكيز بدال Guest الى admin

ثم نضغط على Forward

image
ثم نبدل ال admin بالمسار الذي نريد استعراض ما بداخله الا وهو
../../../../etc/flag2
عند وضعها كما هي يظهر انه يضيف php.
image
لحل المشكله نضيف %00 كما شرح سابقاً
image

حل التحدي الثالث

عند تجربه استبدال Guest ب etc/flag3/../../../.. بعد استبدال ال GET بال POST

يظهر كاللآتي

image
نضع ال %00 كما شرح سابقاً ثم نعد الخطوى السابقه👇

image

حل التحدي الرابع

احصل على RCE في Lab #Playground /playground.php باستخدام RFI لتنفيذ أمر اسم المضيف. ما هو الناتج؟

نفتح سيرفر
image


ثم اجعل الرابط هكذا

1703836253388.png
ثم يظهر الحل
image
 

المرفقات

  • 3037513935e3242f74bd0fe97833b5ac.png
    3037513935e3242f74bd0fe97833b5ac.png
    24.2 KB · المشاهدات: 157
  • image.png
    image.png
    8.3 KB · المشاهدات: 151
  • image.png
    image.png
    19.1 KB · المشاهدات: 165
  • 1_H3EJPTNZtlU425f6R4outA.webp
    1_H3EJPTNZtlU425f6R4outA.webp
    3.8 KB · المشاهدات: 157
التعديل الأخير:
يعطيك العافية اخوي شرحك ساعدني جدا لفهم الموضوع في THM بسبب حاجز اللغة
داخل ملف host.txt يجب وضع هذا الكود لكي يظهر ال flag


<?php
print exec('hostname');
?>
 
التعديل الأخير بواسطة المشرف:

آخر المشاركات

فانوس

رمضان
عودة
أعلى