Directory traversal ثغرة ال

مقدمة

تغرة ال Directory traversal بتندرج تحت ثغرات ال Authorization

يعني ايه authorization؟

مصطلح الAuthorizaion بيختلف عن ال Authentication او المصادقة, عملية المصادقة مسؤلة عن اثبات هوية المستخدمين اما ال Authorization فهو مسؤل عن التحقق من ان المستخدم له صلاحية استخدام وظيفة معينة او قرائة بيانات معينه ولا لا

علي سبيل المثال: لو انت دخلت منشأة ما قبل ما تدخل بيطلبوا منك بطاقة تحقيق الشخصية او ال ID علشان يعرفوا انت مين ودي هي المصادقة, بعد ما بتدخل المنشأة بتختلف المعاملة علي حسب وظيفتك جوه المنشأة دي ممكن تكون ضيف او موظف او مدير وعلى حسب رتبتك بيبقي مصرح ليك بدخول مناطق معينه داخل المنشأة ودا هو الAuthorizaiton

ثغرات ال Directory Traversal او تجاوز المسار بتسمح للمهاجم Attacker انوا يقرأ ملفات من الخادم server اللي بيستضيف تطبيق معين web app زي الكود المصدري source code الخاص بالتطبيق او ملفات ال configuration او اي ملفات حساسة علي الخادم server وفي بعض الحالات بتسمح للمهاجم انه يكتب او يعيد كتابه ملف معين علي الخادم

الاختبار

قبل الاختبار محتاجين نحدد input fields اللي من المحتمل تكون مصابة بثغرة ال Directory Traversal, زي الparameters وال cookies عن طريق اننا نتصفح الموقع ونجمع input fields دي

https://example.com/?page=/home
https://example.com/load?url=/example.jpg
Cookie: id=<id>; page=/settings
<img src=/load?image=dogs.jpg>

وممكن باستخدام ادوات زي gau, grep

اداه gau هي اداة مفتوحة المصدر مكتوبة بلغة GO بنستخدمها علشان نجمع ال URLs الخاصة بموقع معين من wayback api, اما grep فهنستخدمها علشان نجمع ال URLs اللي فيها parameters معينه زي page, load

بعد ما بنعمل تحليل لسطح الهجوم analyzing attack surface ونعرف ايه ال parameters او ال cookies اللي من المحتمل انا تكون مصابة بثغرة ال Directory Traversal بنبدأ عملية الاختبار

مثال

ال payloads المستخدمة في عملية الاختبار بتختلف علي حسب نظام التشغيل فلو الخادم شغال بنظام Linux ال payload بيكون بالشكل دا:

http://example.com/?page=../../../../etc/passwd

في نظام linux النقطتين متبوعين ب slash معناهم اننا هنرجع خطوه للخلف

1- المسار الحالي هو ال root directory

2- انتقلت للمسار home باستخدام الامر cd

3- رجعت خطوة للخلف باستخدام نفس الامر مع كتابة dot-dot-slash

بالنسبة لنظام windows فالامر مختلف, بنكتب الحرف الخاص بال partition متبوع بالمسار المطلوب وبدل ال slash بنستخدم back-slash

..\..\..\windows\win.ini

معرفة نوع نظام التشغيل بتكون في مرحلة ال recon وممكن تعرف نوعه من خلال ال server header او من خلال لغة البرمجة المستخدمة, لازم تاخد وقت في مرحلة ال recon وتسجل كل تفصيلة علشان تعرف ازاي تتعامل مع الtarget

دا مثال علي استغلال الثغرة

طبعا في موقع حقيقي الاستغلال مش بيبقي بالسهولة دي في الحقيقة هتلاقي WAF او Filters اما بتعملك block او بتخرب الpayload عن طريق انها بتحذف الاجزاء المهمة

علي سبيل المثال ممكن تكون بتستخدم payload زي اللي موجود فوق في الصورة لاكن الموقع بيعمل filter لل dot-dot-slash

احد الطرق المستخدمة في تخطي ال filter دا بتكون عن طريق استخدام dot-dot-dot-dot-slash-slash لما filter يحذف dot-dot-slash الشكل النهائي لل payload هيكون مناسب وهيشتغل زي ما انت عايز

قبل ال filter

....//....//....//....//etc/passwd

بعد ال filter

../../../../etc/passwd

في طرق كتير ممكن تستخدما علشان تتخطي ال filter وممكن تجمع بين اكثر من طريقة, في مستودع علي github اسمه PayloadsAllTheThings هتلاقي عليه معظم الطرق لاستغلال الثغرات وتخطي ال filters

دي code sample بتوضح ازاي Directory Traversal ممكن تكون موجودة في الcookies, التطبيق هنا بيعتمد على قيمة ال cookie في انوا يعمل include لصفحة معينة

لو قيمة الcookie كانت موجودة بياخدها ويضيفها للمسار /home/users/phpguru/templates/ ويعلمها include

لاكن لو مش موجودة هيعمل include للملف blue.php

<?php
$template = 'blue.php';
if (is_set( $_COOKIE['TEMPLATE']))
    $template = $_COOKIE['TEMPLATE'];
include("/home/users/phpguru/templates/" . $template);
?>

ودا مثال على طريقة الاستغلال Exploit : بنبعت ال payload بتاعنا بدل قيمة ال cookie اللي اسمها TEMPLATE

الحلول

1- التحقق من المدخلات عن طريق عمل whitelist لاسماء الملفات المسموح بيها وحذف الحروف اللي ممكن تكون مستخدمة في ال attack دا زي dot و slash

2- اتأكد من تحديث مكونات الخادم server باستمرار

3- اتأكد ان ال web app شغال بال minimum privileges لتجنب الوصول لملفات حساسة علي الخادم في حالة حصل تخطي لل filters

المصادر

Last updated