استكماﻻ لدروس تعليم إختبار اﻹختراق،سننتقل اليوم إلى ثغرات تختص بالبرامج و منها سنتطرق إلى الهندسة العكسية و بالتالي سنأخذ نظرة بسيطة عن هذا العالم الواسع جدا.
ببساطة كبيرة،فإن ثغرات فيض الذاكرة هي تنتج عندما يتم ملئ مساحة من الذاكرة فقدر من البيانات هو أكبر من استطاعتها على التحمل.
سنأخذ مثاﻻ بسيطا عن ثغرات الحقن و ذلك عن طريق مثال بسيط،دعونا نقرأ هذا الكود البسيط و المبرمج عن طريق لغة سي
في هذا المثال البرمجي،قمنا بإنشاء دالة تحت إسم GetInput و التي تتلقى مدخلات من المستخدم باستخدام الدالة gets و التي ﻻ تقوم بالتحقق من مدخلات المستخدم و بالتالي فإنه باﻹمكان زيادة المدخلات عن القيمة المحددة.
في المثال السابق قمنا بإنشاء متغير تحت إسم buffer و نوعه char و الحجم اﻹفتراضي له هو 8،قمنا بتلقي المدخلات من المستخدم و الذي نتوقع منه أن يقوم بإدخال نص من 8 حروف(كمثال)،في المرة اﻷولى أدخل 6 حروف(كل شيء على ما يرام)،في المرة الثانية أدخل 8 حروف(وصل المتغير أو حجم الذاكرة المحجوزة إلى حده اﻷقصى)،ادخل المستخدم في المرة الثالثة 10 حروف،هنا سيأخذ البرنامج وقتا أكبر في اﻹستجابة و لكنه في اﻷخير سيتجيب،لو رفع المستخدم حجم المدخلات إلى 20 حرفا فإن البرنامج سيتوقف عن العمل و يظهر خطأ سنتعرف عليه في الدرس المقبل و الذي سيكون تطبيقيا.
فكرة مشاكل فيض الذاكرة يمكن تشبيهها بكأس الماء،مثلا نجلب كأسا فارغا سعته 250 ML،و نبدأ في سكب الماء في الكأس،نقوم بسكب 100 ML،بعدها 50 ML بعدها 100 ML أخرى،هنا وصلنا إلى الحد الأقصى و هو 250 ML و بالتالي لو أضفنا 20 ML أخرى سيتفيض إلى خارج الكأس.
في عالم البرمجة المتغير هو الكأس و البيانات هي الماء.
أتمنى أن تكونوا قد استوعبتم الفكرة،نلتقي في الدرس المقبل مع الجانب التطبيقي...دمتم بود،سلام.
في المثال السابق قمنا بإنشاء متغير تحت إسم buffer و نوعه char و الحجم اﻹفتراضي له هو 8،قمنا بتلقي المدخلات من المستخدم و الذي نتوقع منه أن يقوم بإدخال نص من 8 حروف(كمثال)،في المرة اﻷولى أدخل 6 حروف(كل شيء على ما يرام)،في المرة الثانية أدخل 8 حروف(وصل المتغير أو حجم الذاكرة المحجوزة إلى حده اﻷقصى)،ادخل المستخدم في المرة الثالثة 10 حروف،هنا سيأخذ البرنامج وقتا أكبر في اﻹستجابة و لكنه في اﻷخير سيتجيب،لو رفع المستخدم حجم المدخلات إلى 20 حرفا فإن البرنامج سيتوقف عن العمل و يظهر خطأ سنتعرف عليه في الدرس المقبل و الذي سيكون تطبيقيا.
فكرة مشاكل فيض الذاكرة يمكن تشبيهها بكأس الماء،مثلا نجلب كأسا فارغا سعته 250 ML،و نبدأ في سكب الماء في الكأس،نقوم بسكب 100 ML،بعدها 50 ML بعدها 100 ML أخرى،هنا وصلنا إلى الحد الأقصى و هو 250 ML و بالتالي لو أضفنا 20 ML أخرى سيتفيض إلى خارج الكأس.
في عالم البرمجة المتغير هو الكأس و البيانات هي الماء.
أتمنى أن تكونوا قد استوعبتم الفكرة،نلتقي في الدرس المقبل مع الجانب التطبيقي...دمتم بود،سلام.
أزال المؤلف هذا التعليق.
ردحذفشكرا اخي على هذا الشرح الرائع ,, ,, اذكر انك في درس من الدروس اعتقد في احد دروس الاسمبلي قلت انك ﻻ تجيد لغة الـ C هل تعلمتها بهذه السرعة ؟ ارجوك انا اعرف البرمجة بلغة vb.net ولكنها لغة بسيطة جدا وليست قوية مثل البايثون و الـ C ارجوك اعطني بعض النصائح لتعلم اللغات القوية ؟ تقبلني طالبك. اخاك عبدالله . وشكرا
ردحذفالعفو أخي عبد الله،نعم و لحد اﻵن ﻻ اتقن البرمجة عن طريق لغة C،منذ ذلك الوقت تعلمت اﻷساسيات فقط التي ستساعدني في فهم،اكتشاف و استغلال ثغرات فيض الذاكرة،المشكل ليس في عدم تعلمها،المشكل يمكن في اﻹرادة لتعلم شيء.
حذففي الحقيقة أخي عبد الله،لست استاذا حتى تكون طالبا عندي،فأنا مجرد شاب يحاول نشر ما تعلمه فقط.حاول تعلم بايثون فهي أسهل و أكثر إمتاعا
شكرا لك عبدالمجيد
ردحذفبالرغم من انني شاهدت عدة شروحات عملية لثغرة buffer over flow بالعربي والانجليزي فمنهم من كان يستخدم olly ومنهم من استخدم immunity debugger لكن لازالت مبهمة بعض الشي بالنسبة لي
اتمنى اني افهمها جيدا معك
العفو أخي الحبيب،إن شاء الله سأجعلها أبسط من البساطة
ردحذفبالتوفيق اخي ننتظر المزيد
ردحذف