اجرای تابع به کمک اندیس منفی در آرایههای زبان سی در لینوکس
بازهی معتبر اندیس آرایهها در اکثر زبانهای برنامهنویسی چک شده و با ارسال اندیس نامتعبر استثنایی تولید شده و از تغییر حافظه جلوگیری میشود. (مثل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
بازهی معتبر اندیس آرایهها در اکثر زبانهای برنامهنویسی چک شده و با ارسال اندیس نامتعبر استثنایی تولید شده و از تغییر حافظه جلوگیری میشود. (مثل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
YouTube
Exploiting Array-Out-of-Bounds Accesses on Linux [PER]
بازهی معتبر اندیس آرایهها در اکثر زبانهای برنامهنویسی چک شده و با ارسال اندیس نامتعبر استثنایی تولید شده و از تغییر حافظه جلوگیری میشود. (مثلArrayIndexOutOfBoundException در جاوا یا IndexError در پایتون)
این موضوع در زبانهای C/Cpp صادق نبوده و…
این موضوع در زبانهای C/Cpp صادق نبوده و…
❤15👍8