Deserialization vulnerability in [PHP]-Object injection
السلام عليكم ورحمة الله وبركاتة،
اليوم راح اشرح وتبسيطها بقدر الامكان عن ثغرات PHP object injection وكيفيه حدوثها
[Deserialization vulnerability]
الشرح راح يكون على ثلاث محاور وهي :
1- تعريف عن Object-Oriented في الphp
هي اسلوب برمجي يقوم بجمع العمليات المتقاربة في كلاسات
ليسهل عملية إنشاء كود برمجي بحيث يسمح للمطورين بجمع المهمات المتشابهة في كلاسات
مما يسمح للأكواد ان تكون تحت مظلة مبدأ
2-Serialization-Deserialization

Serialize :هي بكل بساطه تحويل object الى bytes بحيث يستطيع تخزينه
unserialize: بكل بساطه هي تحويل bytes الى object مره اخرى عكس Serialize
حدوث الثغرة : تحدث الثغرة عندما يكون unserialize بشكل صحيح
3- magic methods
الدوال المستخدمه في عمليه Serialize وا unserialize تسمى با Magic methods وهي
في حاله serialization الدوال المستخدمة
- __sleep
- تقوم دالة __sleep بالاستدعاء عندما يتم تخزين object و تحويله الى bytes
في حاله deserialization الدوال المستخدمة
2.__wakeup
تقوم دالة wakeup بالاستدعاء عندما يتم تحويل من bytes الى object
3.__destruct
تقوم دالة __destruct عندما يقوم سكربت php في الانتهاء وا محتوى object يتم بنهاءه.
4.__toString
دالة __toString تستخدم في تحويل object الى string وايضا من الممكن استخدام الداله في قراءه ملفات او اكثر من ذالك بعتمادها في الداله المستدعيها لها في السكربت
بعد معرفه الدوال واستخدماته في استدعاء object والعكس . نقوم بعمل كود بسيط يقوم بتوضيح عمل كل دالة وطباعتها لنا
نقوم بشرح اهم مافي الكودع السريع
والناتج بعد الرفع والاستعراض
نلاحظ في دالة sleep تم تحويل object الى bytes
O:10:"r3m0t3nu11":1:{s:6:"string";s:21:"Hello this is a test ";}
عندما يقوم بعمليه الملف بعمليه serialize object يضع المحتوى الbytes تحت عناصر ليتمكن php للتعرف عليهم عن طريق serialize format
راح نشرح كل عنصر في الخانه الاولى
O:10:"r3m0t3nu11":1:
= الخانه الاولى تعني Object
الخانيه الثانيه :10= تعنيlength" object 10" باسم r3m0t3nu11
الخانه الثالثه تعني property=1
الباقي اضعه لكم للاستنتاج من الجدول

4- الاستغلال
الكود الي فوق يشرح magic method في طريقه serialization وا deserialization راح نركز ع __wakeup and __destuct في بناء الاستغلال
نقوم الان باستغلال الثغرة طبعا في البداية من الصعب ولكن ليس مسحتيل باستغلالها من دون رؤيه الكود ولكن يفضل باقراءه الكود كابدايه في الاستغلال وعند التمكن تسطتيع معرفه عدد الخانات والطريقه الانسب في استغلال من دون الجوء الى الكود
لناخذ كود بسيط مصاب بثغرة PHP object injection
من الصوره يظهر لنا انه الملف info.php يستدعي ملف File.php
الان عرفنا بأن الكود يقوم بعمليه unserialize للمتغير u عن طريق GET method عن طريق __toString magic method
الان نستعرض ملف File.php ونرى ماذا يحتوي
شرح للكود موجود في الصوره اسفل
كما نلاحظ بأن ملف File.php يحتوي على
ملف بأسم type.txt وا المحتوى r3m0t3nu11 والاستدعاء يتم من خلال magic method __destruct()
الاستغلال راح يكون في التحكم في الملف والمحتوى من خلال كتابه object بنفس المعطيات الي موجوده مع بعض التغير الملف والمحتوى ومن ثم عمل serialization للمحتوى
بعد ذالك نقوم بطباعه المحتوى من التيرمنل وا من المتصفح ولكن لسبب وجود اكواد html راح اطبعه من التيرمنل
كما نلاحظ اعطانا ال serialization format للobject الموجود عليه الثغرة الان نقوم بداخل serialization format الذي يحتوي عليه كود ال html الى المتغير u في ملف info.php
لنرى النتيجه من التيرمنل
والنتيجه من المتصفح
اضافه php
والنتيجة
ناخذ مثال ثاني
نقوم بشرح الكود بالصوره التالية
من ثم نقوم بالاستغلال عن طريق serilaize الobject
بحكم دالة eval راح يتم الاستغلال عن طريق php code execution
من ثم نقوم باستعراض الاستغلال
ونسخه ولصقه في المتغير r لللملف المصاب لعمليه unserialization
لحقن الكود داخل الملف
والنتيجة
دمتم في حفظ الله





















تعليقات
إرسال تعليق