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 الدوال المستخدمة

  1. __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
لحقن الكود داخل الملف
والنتيجة


دمتم في حفظ الله

تعليقات

المشاركات الشائعة من هذه المدونة

Html code injection-[Post-Get-StoredData!]-

CRLF injection [\r\n Carriage Return]