|
![]() |
| LinkBack ![]() | أدوات الموضوع ![]() | انواع عرض الموضوع ![]() |
![]() | رقم المشاركة : 1 (permalink) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() السلام عليكم و رحمة الله بعد تشغيل السكريبت و مشاهدة كيفية عمله نستخدم الأمر التالي:
-i : يفحص فقط الدوال التي تقبل مدخلات خارجية (user input) -w 1: إظهار الدوال التي خطورتها عالية. 1-High, 2-Medium, 3 Low -d : تحديد نوع القاعدة التي بها الدوال اللازم فحصها في هذه الحالة البرنامج بال c++ نستخدم rats-c.xml ناتج الفحص كان كالتالي: ![]() نستطيع تقسيم ناتج الفحص إلى قسمين: 1-قسم إظهار المتغيرات ذات الحجم المحدود (fixed size) و التي يمكن أن يكون لها إستخدام غير صحيح فيما بعد (فيض في الذاكرة مثلا). 2-قسم إظهار الدوال المصابة مع توضيح تلميح حول كيفية تجنب حدوث الثغرة. في مثالنا نلاحظ تحذيرين نبدأ بالثاني و اللذي يتعلق بالدالة recv
الدالة محددة الحد الأعلى لعدد البيانات المستقبلة و العدد هو 5000 نفس حجم المتغير Message. لكن التحذير يقول أنه يجب عمل تحقيق آخر في حالة ما إذا تم إستخدام نفس المتغير خلال عملية أخرى و هو الحال الذي سنراه بالنسبة للدالة strcpy الموجودة في الدالة
فبعد إستقبال بيانات من الclient الموجودة في المتغير Message عن طريق دالة recv سيتم إستدعاء الدالة pr(Message)l الparameter هو Message. الآن داخل دالة pr()
الخطأ واضح هنا فالدالة تعمل نسخ للبيانات من المتغير str= Message ذات حجم 5000إلى المتغير buf ذات الحجم 500 و بذلك نستطيع إحداث فيض في الذاكرة و التحكم في سير البرنامج. 2- إكتشاف و تحليل الثغرة بإستخدام الهندسة العكسية : نفترض الآن أننا لا نملك سورس البرنامج في هذه الحالة سنلجأ إما إلى fuzzing أو reverse engineering سنتكلم عن الخيار الثاني. لعمل ذلك سنستخدم برنامج IDA. ميزة هذا disassembler هو أنه يستطيع إستخراج الدوال الخاصة بالبرنامج حتى أسماؤها و الparameters الخاصة بها. بالإضافة إلى العديد من الخصائص التي تميز هذا البرنامج. ![]() لنفحص الآن كود دالة pr() ![]() نلاحظ أن البرنامج إستطاع تحديد حجم المتغير buf 500 bytes. -القسم ما قبل par1 :هو عبارة عن prologue الدالة يعني تهيئة المكدس و حفظ المسجل esp و ebp… بالإضافة إلى وضع الcanary(******)l هذا لأن عملية ترجمة البرنامج كانت بإضافة GS Flag. -Part1: هنا تتم تهيئة المتغير buf لملأ محتواه عن طريق دالة memset كما نعلم دالة memset بها 3 parameters
1)*ptr : هو مؤشر نحو قسم الذاكرة الذي نريد ملأه في مثالنا هوbuf
2) value : القمية التي نريد وضعها في الذاكرة في المثال 0 (قيمة بدائية).
3)num : و هو عدد البيتات التي ستحمل قيمة value في المثال 500
-Part2: الآن بعد أن أصبح buf جاهزا لتلقي التسونامي سيتم إستدعاء الدالة strcpy
نرى فيها 2 parameters: 1-Destination: و سيكون buf
2-Source : و سيكون str(Message)l
بعد أن يتم إستدعاء دالة strcpy فإنها ستنسخ المتغير بدون عمل تحقق من الحجم مما سيتسبب في كتابة عنوان العودة المحفوظ في المكدس و عند عمل ret يتغير eip بقيمة من قيم str أظن أن بعد إكتشافنا للثغرة و بعد هذا التحليل البسيط نكون قد أنهينا العملية المصـــدر Y;jaht , jpgdg hgeyvhj : tpw hgs,vs hgik]sm hgu;sdm>
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ![]() |
![]() | رقم المشاركة : 5 (permalink) | ||
![]() بارك الله بك
| |||
| ![]() |
![]() | رقم المشاركة : 6 (permalink) | ||
![]() [align=center]مشكور ياغالي ... واصل ابداعك ... تحياتي[/align]
| |||
| ![]() |
![]() |
مواقع النشر (المفضلة) |
|
|
![]() | ||||
الموضوع | كاتب الموضوع | المنتدى | مشاركات | آخر مشاركة |
ما هي الهندسة العكسية وفيما تستخدم | BoM_C4 | قســم إختــراق الأجهــزة | 16 | 04-13-2010 09:58 PM |
أشهر مواقع الهندسة العكسية | marciminihacker | قســم إختــراق الأجهــزة | 1 | 10-08-2009 07:18 PM |