الشرح المفصل لثغرات buffer overflow و استغلالها *الجزء الاول+الثاني*
كاتب الموضوع
رسالة
Admin Admin
المساهمات : 20 تاريخ التسجيل : 22/05/2008
موضوع: الشرح المفصل لثغرات buffer overflow و استغلالها *الجزء الاول+الثاني* الخميس مايو 22, 2008 3:42 pm
الشرح المفصل لثغرات buffer overflow و استغلالها
*هذه الدروس عبارة عن هدية صغيرة و متواضعه لفريق عمل القراصنة العرب *
* أولا أنا ابرئ نفسي من اي استعمال سيئ لهذه المعلومات *
* ثانياأنا تعبت كثيرا من اجل هذا الموضوع والذي هو من تأليفي 100% ... لذا فأمنع منعا باتا النقل و التعديل من غير استشارتي شخصيا برسالة خاصة او على الايمايل k--9999@hotmail.fr *
اقدم لكم هذا الدرس مع علمي الكبير بخطورة هذه الثغرات .. و هي الثغرات رقم 1 التي يعتمد عليها المحترفون كونها قوية جدا حيث تستطيع الحصول على صفة root بها بكل بساطة .
1- ماهي البفر اوفر فلو :
هي عبارة عن خطا برمجي يسمح بتحكم استثنائي في ذاكرة المعالج processor . تحصل عندما نقوم بادخال معطيات تفوق سعة ال buffer وهو الجزء من الذاكرة المسؤول عن تخزين المدخلات كاسم المستعمل و كلمة السر مثلا ..وهكذا .مثلا اذا كان المبرمج حدد طول اسم المستعمل ب 50 حرف بذاكرة الBuffer و التي هي كافية من الناحية النظرية ..
ناتي نحن وندخل في اسم المستخدم 55 حرف مثلا ! ماذا يحدث يتوقف البرنامج عن العمل .وتخرج لنا مثل هذه الصورة.
و نكون بذلك قد كتبنا فوق مكان آخر من الذاكرة . مسببين عطل بالبرنامج مثل ما كان واضح باالصورة السابقة. لكن نستطيع كتابة اوامر مختلفة لتنفيذ غاياتنا كارسال رسالة أو أخذ صفة root ... مستغلين بذلك هذه الثغرة. 2-الدراسة المعمقة: - صناعة برنامجنا الخاص الذي نتعمد الخطأ في برمجته : لاحظ هذا البرنامج و الذي هو بلغة ال C كود PHP: # include <stdio.h> main() { char nom [5] ; printf ("What's your name ? : ") ; scanf ("%s",nom) ; printf ("Hi %s ", nom) ; return 0 ; }
يقوم هذا البرنامج بسؤال المستعمل عن اسمه .. فيكتب المستعمل اسمه .. فيرسل له البرنامج رسالة ترحيب باسمه . - برنامج ابسط مما يكون - قم بحفظه باسم k-9999.c و حمل برنامج Digital Mars C/C++ Compilers ستجده بهذا الموقع www.digitalmars.com .. قم بتنصيبه وفك ضغطه و ليكن في مجلد ال c كما يلي :
تجده باسم dm طريقة العمل بالبرنامج ضع k-9999.c في هذا المكان c:\dm\bin
ثم اذهب الى start ثم run ثم اكتب في المربع cmd .. فيفتح معك الدوس . اكتب هذه الاوامر وراء بعض : cd\ cd dm\bin sc k-9999.c k-9999 لاحظ الصورة
تستطيع تطبيق البرنامج بكتابت k-9999 في محث اوامر الدوس فتجد رسالة من برنامجنا تقول What's your name اكتب اسمك مثلا mohamed فيرسل كما قلنا البرنامج رسالة ترحيب لاحظ الصورة
الكود المهم بالبرنامج هو كود PHP: char nom [5] ;
حيث قمنا بتحديد طول اسم المستخدم . ماذا لو وضعنا اسم مستخدم طويل ماذا يحدث ؟ سنضع مثلا AAAAAAAAAAAAAAAAAAAA تخرج لنا رسالة خطأ تفيد ان برنامجنا قد اتلف أو حدثت له عملية crash .لاحظ الصورة
الان انتهينا من صناعة برنامجنا و الذي به مشكلة سنحاول استغلالها . 2- مراقبت عمل البرنامج : نحتاج لبرنامج ال OllyDbg v1.10 ..ستجدونه بالبحث في google. * يجب عليكم تعلم مهارة البحث عن الادوات * نفتح برنامحنا الصغير بواسطة olly من file .. ثم open ابحث عن مكان البرنامج الصغير و افتحه .
اليوم قد تعبت حقا في انجاز هذا الدرس الذي ساكمله في الجزء الثاني ان شاء الله الذي سيكون اكثر تشويق . [size=25]أخــــــ k-9999 ــــوكم[/size] * هذه الدروس عبارة عن هدية صغيرة و متواضعه لفريق عمل القراصنة العرب * * أولا أنا أبرئ نفسي من أي استعمال سيئ لهذه المعلومات * * ثانياأنا تعبت كثيرا من اجل هذا الموضوع والذي هو من تأليفي 100% ... لذا فأمنع منعا باتا النقل و التعديل من غير استشارتي شخصيا برسالة خاصة أو على الايمايل k--9999@hotmail.fr * وصلنا بدرسنا السابق الى فتح بنامجنا الصغير k-9999.exe بواسطة ال Olly . يجب علينا اولا تشغيل التطبيق و وضع الاسم الكبير مثل : AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAA و هي 60 A ( يجب احترام هذه القيمة فلو وضعت عدد كبير جدا لن تنجح في استغلال الثغرة ) وذلك من اجل انتاج خطأ في البرنامج لاحظ الصورة :
يجب علينا الآن أن نبحث عن الاشياء المهمه ..و هي عنوان العوده و مكان ال60 Aالتي ادخلناها . لاحظ الصورة .
هنا ناتي الى المرحلة المهمة .وهي وضع كود الاستغلال بعد عنوان العودة وهو كالتالي :
انا الآن لن اكمل العمل ببرنامج k-9999.exe كون استغلاله أمر مستحيل . تقولون لماذا ؟ الأمر لن ينتبه له الا من تابع معنا من البداية.. وكان له قدر صغير من الذكاء . فأولا وقبل وضع الكود الاستغلال يجب الاشارة الى مكان بدايته في اول خانه كالتالي :
لكن كيف نضع العنوان هل نكتب بعد ال 16 A العنوان كالتالي : AAAAAAAAAAAAAAAA0012FF90 مثلما فعلنا مع الجمله السابقه اذكركم بها . AAAAAAAAAAAAAAAAput-your-code-here بالتاكيد لا و الف لا ... كيف اذا ؟ العنوان هو عبارة عن رموز ascii وكل رمز يقابله رمز اخر و للاسف الرمز 00 لم استطع ايجاد رمز يقابله فهو يشير الى نهاية السلسلة الحرفية . اي لو اردت استغلال برنامج k-9999.exe لن استطيع لاني لن اتمكن من وضع عنوان بدء تنفيد كود الاستغلال 0012FF90 كون ال00 تقابلها نهاية السلسة الحرفية التي ندخلها عند الاستغلال . أعلم ان الامر معقد نوعا ما لكن ان لم تفهم شيئا اقرء و أعد القراءه مره اخرى فان لم تستطع ضع في ردك النقطة التي لم تفهمها و ساعيد شرحها . و سيكون التطبيق الان على برنامج آخر و هو برنامج myprog للتحميل من هنا و هو برنامج بسيط قمت بتعريبه و بعض التعديلات فيه اذ يقوم بنسخ ما يوجد بالملف info و الذي هو ملف نصي . وهذا هو الجزء المهم من كوده كود PHP: BOOL Rfile(HWND mhWnd) { HANDLE hfile=(HANDLE)-1; DWORD nbt=0; // لاحظ حجم مصفوفة الحروف TCHAR buf[10]; hfile=CreateFile ("info.txt",GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE, (LPSECURITY_ATTRIBUTES )NULL,OPEN_EXISTING,0,NULL); if(hfile==(HANDLE)-1)
مثلا للعمل بالبرنامج اكتب k-9999 بالملف info و قم بحفظ التغيرات . ثم افتح برنامج myprog و اضغط على read file لتنسخ لك ما كتبته سايقا بالملف info لا حظ الصوره
* أظن أنكم مباشرة من كود البرنامج ادركتم اننا لو نضع في الملف info نص اكبر من 10 احرف سيحدث خطأ * نفتح مباشرة البرنامج بال olly و ذلك لدراسة عنوان العوده كاتبيين في ملف ال info 32 A AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ما علينا الان الا التطبيق ..و يجب عليك البحث عن برنامج ال hex workshop و ستعرف لماذا.
و لتبديل عنوان بداية الكود نقوم بفتح ملف الـ info بالhex workshop و نعدل به كالتالي : " تجدون التعديل جاهزا بملف info آخر مضغوط . "
و طريقة التعديل هي كالتالي :
الى ان نصل الى النتيجة النهائيه و هي كالتالي :
ثم قم بحفظ التعديلات على ملف info و قم بتشغيل برنامج myprog بالolly و اضغط على read file ولاحظ في ال olly ما يلي :
كما تخرج لنا رساله
لقد نجحنا بعملنا . و في الاخير نصيحة صغيرة للتعامل ببرنامج ال Olly في كل مرة تشغلون برنامج "مثل k-9999"ويحدث له تخريب تستطيعون مباشرة اعادة العمل به من debug ثم restart و ليس عليكم اقفال ال olly بالكامل و المباشرة بالعمل به مره اخرى.
الشرح المفصل لثغرات buffer overflow و استغلالها *الجزء الاول+الثاني*