Introduction to Insecure Deserialization

(Part 1)



يا اهلا وسهلا بالجميع, حياكم الله في مقالة متواضعة جديدة بعد فترة طوييييلة وفي هذه السلسلة بنتكلم عن الـInsecure Deserialization. طيب يا يوسف ايش يعني هذا الكلام؟؟؟…… هذا ما سنعرفه في هذه الحلقة.


قراءة ممتعة :)


بدون لف ودوران ومقدمات طويلة, تخيل معي انك قاعد تلعب لعبة معينة, لنفترض انها ماينكرافت(افضل لعبة في العالم), وانت تتجول في عالمها البديع, قلت خلني اقفل واحفظ اللعبة وارقد لان وراي دوام…..

كيف تتخيل شكل اللاعب في الذاكرة (الميموري (الـRAM))؟؟


هذا راح يكون شكل الشخصية في اللعبة….. لكن في الميموري الموضوع مختلف , لان الشخصية راح تكون على هيئة اوبجكت (object) فيه خصائص الشخصية وبعض المعلومات بهذا الشكل تقريبا:

اللاعب مجرد اوبجكت يتجول في الميموري بكل سلام وعنده شوية معلومات :)


طيب الان جاء وقت النوم وتبغا تقفل اللعبة خلاص, هذا الاوبجكت لازم نحفظه في الهارديسك (permanent storage)…. هنا يجي مفهوم الـSerialization


نقولها بالانجليزي اول شي؟ 

Serialization: is the process of converting objects into a stream of bytes.

الان بلغة الضاد؟


الـSerialization: هو عملية تحويل الاوبجيكت الى مجموعة بايتات (يعني باختصار, نحفظه من الميموري الى الهارديسك)


فهمت؟ لا؟ ابشر ما خلصنا….


طيب اذا كان اسم العملية لتحويل وحفظ الاوبجكت من الميموري الى الديسك serialization, ف ايش ممكن يكون اسم العكسية؟؟…


صح!!!… نسميها Deserialization


الان خلصت نوم ورحت الدوام وتبي ترفه عن نفسك بعد الدوام, هذا اللي راح يصير:


1- تحمل الـserialized object من الديسك.

2- تعمل عليه deserialization.

3- والان صار عندك الاوبجت موجود في الميموري يعيش بسلام :) 


Test with code using Python for simplicity

خلينا الان من الكلام النظري, ونركز في الكلام العملي والتطبيق, وراح نجرب نعمل كلاس (class) وناخذ منه اوبجيكت (object) ونعمل عليه serialization:

Join