كيف يتم استخدام تجاوزات المخزن المؤقت لاستغلال أجهزة الكمبيوتر؟

StackOverflow https://stackoverflow.com/questions/460519

سؤال

كيف تجاوزات المخزن المؤقت تستخدم لاستغلال أجهزة الكمبيوتر؟

كيف يمكن للمرء تنفيذ تعليمات برمجية عشوائية ببساطة عن طريق التسبب في كومة أو كومة يفيض؟

أدرك أنه تتم الكتابة فوق أجزاء من ذاكرة البرنامج ليس من المفترض أن يتم ذلك، لكنني لا أرى كيف يؤدي ذلك إلى قيام شخص ما بتنفيذ التعليمات البرمجية الخاصة به.وأيضًا، هل يجب كتابة التعليمات البرمجية الضارة الخاصة بالطرف الثالث بلغة تجميع المعالجات المستهدفة؟

هل كانت مفيدة؟

المحلول

وهذه هي الوثيقة الأكثر شهرة على نطاق واسع حول هذا الموضوع: تحطيم المكدس من أجل المتعة والربح

ولكن، 'تجاوزات' كومة لها علاقة مع عازلة الفيضانات شيء. تجاوزات المكدس ليست سوى حالة خطأ في التعليمات البرمجية السيئة التي لا يمكن استغلالها في أي شيء خارج وقوع حادث (دوس). عموما

وتحرير: أنت سألت أيضا عن تجاوزات الكومة. هذا هو وثيقة جيدة حول هذا الموضوع: http://www.w00w00.org/files/ المواد / heaptut.txt

نصائح أخرى

ومكدس يحتوي على كل البيانات وعنوان المرسل عند القفز إلى روتين. إذا كنت تدير لوضع عنوان محدد على المكدس حيث عنوان المرسل هو، يمكنك فرض وحدة المعالجة المركزية للانتقال إلى موقع ذاكرة معين، واحد حيث ذ أوو وضع التعليمات البرمجية الخاصة بك. وهذا أمر عازلة الفيضانات. تجاوزات كومة يختلف قليلا وأكثر صعوبة لاستغلالها.

وتجاوزات المكدس هي مؤشر العادل الذي كنت قد نفد من مساحة المكدس (والذي هو عادة أكثر محدودية، لا سيما في النواة).

تخيل منزلين في الشارع.الأول هو منزل صديقك والآخر هو منزل جاره الشرير المصاب بجنون العظمة على بعد ثلاثة أبواب.الجار الشرير المصاب بجنون العظمة لا يدخل أو يغادر أبدًا، ومكانه مغلق بإحكام.

الآن، أصبح صديقك صديقًا جيدًا يثق به، وسيسمح لك بتخزين أي شيء في مكانه، ووضع الصناديق واحدًا تلو الآخر، بدءًا من جدار واحد.في الواقع، إنه صديق جيد لدرجة أنه سيستمر في وضع الصناديق واحدًا تلو الآخر، دون التحقق لمعرفة ما إذا كان قد اصطدم بالحائط، حتى يستمروا في الطيران في الجو ويمرون أخيرًا عبر منزلين آخرين في الشارع وإلى داخل منزل الجيران الشرير المذعور.لكن صديقك يثق أنك لن تفعل ذلك لأنه معجب بك (وهو ساذج بعض الشيء).

لذلك لديك الفرصة لوضع شيء ما في منزل جارك الشرير المصاب بجنون العظمة من خلال استغلال صديقك الموثوق به.


استبدل المصطلحات التالية وسترى القياس على هجوم تجاوز سعة المخزن المؤقت:

  • "منزل صديقك" --> "جزء من البرنامج لا يتحقق من تجاوز سعة المخزن المؤقت"
  • "منزل جاره الشرير المصاب بجنون العظمة" --> "جزء آخر من برنامج من المفترض أن يكون آمنًا"
  • "المربعات" --> "الوسائط/المعلمات الخاصة بالبرنامج التي لا تتحقق من تجاوز سعة المخزن المؤقت"

يكون هذا ناجحًا فقط إذا اكتشف شخص ما مكان المنطقة الآمنة من الذاكرة، وما الذي يجب تمريره كوسيطة إلى البرنامج المعني، والذي سينتهي به الأمر في المنطقة الآمنة، للحصول على التأثير المطلوب.(سواء كانت بيانات أو تعليمات برمجية تتسبب في تنفيذ تعليمات برمجية للمستغل)

تقريبًا جميع المعالجات الحديثة عند استدعاء روتين فرعي، تدفع عنوان الإرجاع إلى نفس المنطقة مثل البيانات المحلية (المكدس).بالنسبة للإجراءات التي لا تتحقق من الحد الأعلى للمتغير (خاصة الدالة strcpy)، يمكن أن تحدث إعادة توجيه عنوان التعليمات (تجاوز سعة المخزن المؤقت).

void make(char *me)
{
    char sandwich[4]; // local data, this is in stack.  the buffer for data is too small
    strcpy(sandwich, me);
    puts(sandwich);

    // implicit "return;" the return instruction(RET on Intel) instructs the processor to implicitly pop an address from stack then resume execution on that address
}

void main()
{
    // calling a subroutine (CALL on Intel) implicitly instructs the processor to push the next instruction's address(getchar line) on stack before jumping to make.
    make("Love Not War"); 
    getchar();

    puts("This will not execute.  The address to next instruction(getchar) gets overwritten with Not War");

}

"أيضًا، هل يجب كتابة التعليمات البرمجية الضارة الخاصة بالطرف الثالث بلغة تجميع المعالجات المستهدفة؟" نعم

يمكن أن يحدث تجاوز سعة المكدس من برنامج يعمل بشكل طبيعي، على سبيل المثال إجراءات متكررة (وظيفة تستدعي نفسها) مع حالة إنهاء تم التغاضي عنها.سيتم ملء منطقة المكدس بالعديد من المتغيرات المحلية الموجودة على المكدس بالإضافة إلى العناوين المرتجعة.

والنهج العادي هو أن لديك في مكان ما في ذاكرة الشيفرات الخبيثة. ثم قمت بإنشاء تجاوز سعة المخزن المؤقت: السحر هنا ليس لجعله مجرد تجاوز، ولكن كما ذكرت سابقا، أن أجزاء معينة من الذاكرة برنامج الحصول على الكتابة. كما يحتوي على كومة ليس فقط المتغيرات، ولكن أيضا عندما يتم استدعاء وظيفة على عنوان المرسل، واحد يحاول الكتابة هذا واحد مع عنوان واحد منكم الشيفرات الخبيثة. عندما ترجع الدالة مع تجاوز سعة المخزن المؤقت إلى المتصل به، وظيفة لا يرجع إلى المتصل الأصلي ولكن بدلا من ذلك إلى روتين الخبيثة. كما رمز تنفيذها الآن لديها أوسلي امتيازات رمز الدعوة، واحد يحاول العثور على / إنشاء هذا تجاوزات في التعليمات البرمجية التي لديها إذن أعلى من رمز الشر (آخر يمكنك أن تفعل ذلك عن طريق الاتصال مباشرة الروتين الشر).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top