در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

Stack based buffer overflow

سلام به دوستان عزيز ITPro اي و علاقه‌مندان به مباحث امنيت شبكه. امروز با شروع يكي از مفاهيم پركاربرد در بحث تست نفوذ با شما همراه هستيم. Buffer overflow Exploitation يكي از تكنيك هاي پركاربرد در نفوذ به سيستم ها ميباشد كه اجراي صحيح آن نيازمند داشتن دركي كامل از مفهوم Buffer overflow است.

Stack يا پشته چيست؟


يك Stack بلوك هاي بهم پيوسته از مموري است كه توسط توابع مورد استفاده قرار ميگيرند. در قرارگيري و يا حذف ديتا از Stack، از دو ساختار استفاده ميشود: "PUSH" كه ديتا را روي Stack قرار ميدهد و "POP" كه ديتا را از روي Stack بر ميدارد. Stack بر اساس Last in First out “LIFO” كار ميكند. به اين معني كه آخرين ديتايي كه وارد Stack ميشود، اولين ديتايي است كه از Stack خارج ميشود.

در معماري x-86 اينتل، حداكثر سايز ديتاي وارد شده به Stack، WORD ناميده ميشود. فقط 4 بايت (32بيت) براي هر عمل PUSH يا POP مجاز است.

اشاره‌گر ESP به بالاي Stack اشاره ميكند. Stackها بشدت از لحاظ كاري با توابع رابطه نزديكي دارند. از Stack براي نگهداري آرگومان هاي توابع و همچنين تخصيص خودكار فضا به متغيرهاي محلي استفاده ميشود.

Stack شامل فريم هايي است كه در مواقع فراخواني يك تابع عمل Push و در هنگام اتمام توابع عمل pop را انجام ميدهند. توابع با كمك محلي كه ESP به آن اشاره ميكند، به متغيرهاي محلي خود دسترسي پيدا ميكنند؛ هنگامي كه WORD ها از Stack وارد و يا خارج ميشوند، پيشنهاد ميشود كه در اين فرايند از چيزي به نام Frame Pointer(FP) استفاده كنيد.

اما Frame Pointer چه كاري انجام ميدهد؟

FP آدرس فعلي از Stack را در رجيستر EBP نگه ميدارد. بنابراين تابع ميتواند با استفاده از جايي كه EBP نشان ميدهد، متغيرهاي محلي خود را مرجع قرار دهد.

Stack Based Buffer overflow


Stack based Buffer overflow يكي از آسيب پذيري هاي متداول است. اين اسيب پذيري بر هر تابعي كه ورودي خود را بدون چك كردن باند ها بر روي مموري كپي ميكند، اثر ميگذارد. مانند :

Strcpy(), memcpy(), gets() و ...

اما Buffer overflow چه موقعي اتفاق مي افتد؟ يك Buffer overflow زماني رخ ميدهد كه يك تابع داده خود را بدون انجام فرآيند چك كردن باندها به يك بافر كپي كند. در اين صورت اگر سايز داده هاي ورودي بيشتر از سايز بافر مقصد باشد، اين ديتا از سمت آدرس بالاي مموري سرريز خواهد كرد و احتمالا روي داده هاي قبلي موجود در Stack قرار خواهد گرفت (Overwrite).

Stack Based Buffer overflow Exploitation


با تفاسير، چگونه ميتوان از اين آسيب پذيري سوء استفاده كرد؟ سوء استفاده ( Exploitation) از يك Stack بر مبناي Buffer overflow، در حالت كلي به فرآيند Overwrite كردن آدرسي از كد شل خودمان بر روي آدرس برگشت تابع اطلاق ميشود.

مثال زير را در نظر بگيريد:

قبل از رخداد Buffer overflow

Stack based buffer overflow

پس از رخداد buffer overflow

Stack based buffer overflow

سربلند و مانا باشید.

نویسنده: احسان امجدی

منبع: انجمن تخصصی فناوری اطلاعات ایران

هرگونه نشر و کپی برداری بدون ذکر منبع و نام نویسنده دارای اشکال اخلاقی می باشد.

#آموزش_لینوکس_کالی #آموزش_امنیت_اطلاعات #stack_چیست؟ #آموزش_امنیت_ارتباطات #لینوکس_کالی_چیست؟ #پشته_چيست؟ #حملات_buffer_overflow #buffer_overflow_چیست؟
1 نظر
مهرناز معروف

مثالی که زدین آخر متن رو میشه توضیح بدین لطفا؟

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره پاییزه می تونی امروز ارزونتر از فردا خرید کنی ....