OS Internals
3.49K subscribers
6 photos
29 videos
12 files
85 links
مقاله و فیلم آموزش مدیریت و برنامه‌نویسی سیستم‌های عامل، شبکه و امنیت اطلاعات.

مقالات من در ویرگول:
https://virgool.io/@akazemi

ویدئوهای کانال در آپارات:
https://www.aparat.com/oxaa55

ارتباط با مدیر کانال از طریق:
@akazemi67
Download Telegram
اجرای تابع به کمک اندیس منفی در آرایه‌های زبان سی در لینوکس

بازه‌ی معتبر اندیس‌ آرایه‌ها در اکثر زبان‌های برنامه‌نویسی چک شده و با ارسال اندیس نامتعبر استثنایی تولید شده و از تغییر حافظه جلوگیری می‌شود. (مثلArrayIndexOutOfBoundException در جاوا یا IndexError‌ در پایتون)

این موضوع در زبان‌های C/Cpp صادق نبوده و دست برنامه‌نویس برای اینکه گلوله‌ای در پای خودش شلیک کند بازبوده و برای آرایه‌ها می‌توان اندیس‌های منفی یا مثبت بیشتر از مرز آرایه ارسال کرده و به بخش‌های دیگر حافظه دسترسی پیدا کرد. (از این موضوع می‌توان به کمک AddressSanitizer و با تحمل کمی افت Performance جلوگیری کرد)

اهمیت این موضوع این است که اگر آرایه بر روی Heap تعریف شده باشد امکان دستکاری Heap-Metadata (و یا داده‌ی مربوط به شی دیگر) وجود داشته و اگر آرایه بر روی Stack تعریف شده باشد به دلیل ذخیره‌ی ReturnAdress بر روی Stack امکان دستکاری آن و اجرای کد وجود دارد.

در این ویدئو که بخشی از یکی از کلاس‌هایم است این موارد توضیح داده شده و در یک مثال ساده PoCای از تغییر آدرس بازگشت تابع با ارسال اندیس منفی برای آرایه و اجرای تابعی دلخواه و سپس تاثیر فعال کردن AddressSanitizer نمایش داده می‌شود.

لینک ویدئو در یوتیوب:
https://youtu.be/4LBiyGrcO3E
لینک ویدئو در آپارات:
https://aparat.com/v/jR38x

#ShortLinuxInternals #linux #internals #gdb #x86 #exploitation #gcc #AddressSanitizer
15👍8