تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
شرح ثغرة Stack overflow
#1
[للامانة  تم اقتباس بعض الاشياء من موضوع للاخ JASS وواحد نسيت اسمه من منتدى arabteam2000 + مدونة علي عبدالغني + مصادر اجنبية]

اعتقد ان الاغلب قد سمع بهذه الثغرة و التي قد تم اختراق الكثير من السيرفرات عبرها  
فهذه لا تتطلب مطلقا اي تغيير في كود البرنامج او تحميله في المنقح لاننا سناثر على عمله عبر استغلاننا "ثغرة" تسمح لنا بكتابة shell code عبره
اول ظهور لها كان عام 1988
كانت تدعى the Morris Internet worm او ربما دودة الانترنت او ماشابه
ومثل هذه الهجمات يمكن استخدامها local اي  محلي تؤثر على عمل برنامج او على خادمات المواقع وتعرف باسم "هجمات الحرمان من الخدمات" أو يمكن استعمالها في اختراق الخادم بشكل كامل ومع صلاحيات قد تصل
إلى root أحيانا وهذا النوع من الثغرات يعد الأخطر على الإطلاق وحتى الآن لا يوجد لها حل فعال بل فقط يتم الانتباه من الوقوع فيها من قبل المبرمجين.
يحدث عندما تتجاوز سعة المكدس ويطلب المزيد من الذاكرة
ولمن لا يعرف جيدا Stack او المكدس
ال stack : عبارة عن مكان في الذاكرة RAM يستخدمه المبرمج للتخزين
المؤقت او عند استدعاء دالة معينة يمكن تمرير البارمترات للدالة عن طريق
المكدس. كما ان البرنامج نفسه يستخدمه مثلا عندما يصل المعالج
 الى امر قطع interrupt المعالج يقوم بتخزين الرايات flags ومؤشر الاوامر IP عنوان الرجوع وايضا قبل استدعاء
 دالة معينة يجب تخزين عنوان الرجوع في المكدس حتى يستطيع المعالج الرجوع الى الامر التالي
فمثلا عند كتابتك اي دالة ك puts() , gets() , printf()  وتمرر لها بارامترات يتم تخزين البارامترات في المكدس  
و
يعتمد حجم المكدس على امور عدة منها
-نظام التشغيل
– ذاكرة الكمبيوتر
– لغة البرمجة المستخدمة في كتابة البرنامج
– طراز المعالج
________________________
نعود للموضوع
ويحدث التاثير عند الكتابة فوق الذاكرة "يتم الكتابة فوق الذاكرة بتلك البيانات التي طلب المكدس لها مكان في الذاكرة "
(لا تقلق ستفهم مع المثال التطبيقي)
طبعاؤ هناك انواع مختلفة ل buffer overflow
 stack, heap, format, integer, and 0-day
 بهذا الموضوع سنتكلم عن stack overflow


1- Infinite recursion
وهي استدعاء الدالة لنفسها الي ما لا نهاية
مما يؤدي الي استهلاك حجم المكدس

هذا مثال بلغة سي لهذه المشكلة

int foo()
{
return foo();
}

هذه الدالة تقوم باستدعاء نفسها و الدوال التي يتم استدعاءها تقوم ب استدعاء نفسها ايضاً من ما يؤدي الي فيض في المكدس

2- Very deep recursion

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

void function (argument)
{
if (condition)
function (argument);
}

يفضل استخدام الحلقة بدلً من ذلك الكود

لكي لا تحدث مشاكل

و من اسباب حدوث علة stack overflow هو تعريف متغيرات كبيرة الحجم خارج قابلية المكدس( تعريف مصفوفة بحجم كبير)
لهذا ينصح الكثير من المبرمجين بستخدام الذاكرة الديناميكية
مثال لمتغير كبير الحجم بلغة سي

int foo()
{
double x[1000000];
}
مثال بسيط جدا
هذا ربما من ابسط الطرق لعمل overflow
كود بسيط جدا في السي 

#include <stdio.h>
#include <stdlib.h>


int main(int argc, char *argv[]) {
char var[10];
 strcpy( var, "AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHJJJJJJJLLLLLMMMMNNNOOOPPPQQQRRRSSSTTTUUUVVVWWWXXXYYYZZZ\n" );
printf( var );

    return 0;
}


كما ترى فها قمنا بتعريف مصفوفة var[10] وقد خزنا فيها النص الذي  يحتاج لمصفوفة اكبر
مما ادى الى فيضان المكدس
حمل الملف في olly
and braeakpoint 401543
و اعمل run ليتوقف
وستلاخظ عنوان الرجوع في المكدس
 [صورة مرفقة: YXM17Os.png]




و ما الذي سيحدث بعدها !
حسنا تابع وتخطى تعليمةRET

كما  عنوان الرجوع (وهو العنوان التعليمة الذي بعد CALL لهذه الدالة) قد تم  الكتابة عليه
بعدها انظر لمسجل التعليمات  EIP = 4C4C4C4C
=ASCI LLLL
[صورة مرفقة: zwhXXo6.png]


حسنا ماذا لو استبدلنا ال LLLL بعنوان تعليمة ما ثم بعدها وضعنا ال ٍshellcode
بالتاكيد ممكن


وهذا سيكون على   myexpo الذي ستجده في المرفقات
يجب ان تنشئ info.txt لانه فقط يقرا الملف الذي اسمه هكذا
بعدها اكتب الاحرف من A to Z لكي تعرف من اين يبدا بكتابة العنوان
ستجد انه يبدأ من اخر اربع حروف قبل ال Q كما ادخلت انا ABCDEFGHIJKLMNOPQRSTUVWXYZ
حسنا الان افتح HEX editor انا استعمل HxD.exe
فرضا اننا نريد ان ننقله الى العنوان
004014ِ8E
غير كما يلي من خلال قسم الهكس وليس الاسكي
[صورة مرفقة: fOMis1n.png]


فمثلا البي يقابلها 50 غير كما يلي
الذي يقابل P   ب 00
الذي يقابل  O  ب 40
الذي يقابل   N ب 14
الذي يقابل    Mب 8E

و ثم حمل القارء ب ollydbg
then
ضع نقطة توقف كما في الصورة
حيث دالة ReadFile )RFile(
[صورة مرفقة: yotTnOc.png]


ثم سترى المسجل التعليمات اشار الى التعليمة التي نريدها اي ذلك العنوان

[صورة مرفقة: vDvgWjo.png]








كما تلاحظ بالصورة فقد انتقل مسجل التعليمات ليشير الى تلك التعليمة و اظنك ستلاحظ ان المؤشر ESP شير الى ما بعد P و هناك بامكاننا نضع ال shellcode
هذا مثال
"\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";

طبعا كما ترى بدايته 90 والتي تعني nop
طبعا يجب ان اردت كتابته يجب ان تكتبه بدون "x\ ويجب تحويله لاسكي
كما وضحت كل هذا بملف txt بالمرفقات

 المرفقات مهمة جدا
بها امثلة عملية
كما وصعت كتاب يشرح ذلك به مثال
طبعا عند التطفل لجهاز عبر هذه الثغرة يكتب سكريبت ارسال/استقبال بالبايثون كما تم توضيح هذا في الكتاب و تستطيع استعمال اداة Metasploit المشهورة
رابط المرفقات :
https://1drv.ms/u/s!AgqexnHLomZ0b97sCCHA...o?e=5Iflgj

كتاب مفيد يشرح Buffer Overflow و كتابة shellcode for windows من بعد الصفحة 317 لمن يعرف الأساسيات
http://index-of.es/Varios/Securite/BoF_Attacks.pdf
أعضاء أعجبوا بهذه المشاركة : mohamad , farfes , the9am3 , ExCodeMaker , Cyros , الباحث , rce3033


الردود في هذا الموضوع
شرح ثغرة Stack overflow - بواسطة SeGNMeNT - 17-08-2020, 12:45 PM
RE: شرح ثغرة Stack overflow - بواسطة Cyros - 17-08-2020, 02:32 PM
RE: شرح ثغرة Stack overflow - بواسطة SeGNMeNT - 17-08-2020, 02:59 PM
RE: شرح ثغرة Stack overflow - بواسطة الباحث - 17-08-2020, 04:02 PM
RE: شرح ثغرة Stack overflow - بواسطة SeGNMeNT - 17-08-2020, 05:29 PM
RE: شرح ثغرة Stack overflow - بواسطة ExCodeMaker - 18-08-2020, 01:30 AM
RE: شرح ثغرة Stack overflow - بواسطة الباحث - 18-08-2020, 05:51 PM
RE: شرح ثغرة Stack overflow - بواسطة SeGNMeNT - 18-08-2020, 07:25 PM
RE: شرح ثغرة Stack overflow - بواسطة الباحث - 19-08-2020, 12:09 AM
RE: شرح ثغرة Stack overflow - بواسطة SeGNMeNT - 19-08-2020, 06:15 AM
RE: شرح ثغرة Stack overflow - بواسطة Cyros - 19-08-2020, 08:19 AM
RE: شرح ثغرة Stack overflow - بواسطة الباحث - 19-08-2020, 09:36 AM
RE: شرح ثغرة Stack overflow - بواسطة SeGNMeNT - 19-08-2020, 01:05 PM

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 7 ) ضيف كريم