تجاوزات مخزن المكدس
افهم تخطيط المكدس، وتجاوز EIP/RIP، واكتب استغلالًا عمليًا لبرنامج C معرض للخطر.
تجاوزات مخزن المكدس درس مجاني في Cyber Security Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Cyber Security Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Cyber Security Academy 4 دروس في المجموع.
ما المقصود بتجاوز سعة المخزن المؤقت؟
يحدث تجاوز سعة المخزن المؤقت عند كتابة بيانات تزيد عن سعة المخزن المؤقت. فتكتب البيانات الزائدة فوق الذاكرة المجاورة، مما قد يؤدي إلى إفساد هياكل التحكم وإعادة توجيه تنفيذ البرنامج.
تخطيط ذاكرة المكدس
يحتوي مكدس الاستدعاءات على: المتغيرات المحلية (المخازن المؤقتة)، ومؤشر الإطار المحفوظ (SFP)، وعنوان الإرجاع (RIP/EIP) — وهو الموضع الذي يستمر منه التنفيذ بعد عودة الدالة. ويمكن أن يؤدي تجاوز سعة مخزن مؤقت محلي إلى الكتابة فوق عنوان الإرجاع.
الكتابة فوق المكدس بالطريقة التقليدية
إذا استدعى البرنامج gets() أو strcpy() من دون التحقق من الطول، فيمكن للمهاجم إدخال عدد كافٍ من وحدات البايت لملء المخزن المؤقت والكتابة فوق عنوان الإرجاع بعنوان shellcode أو gadget مفيد.
// Vulnerable C code:
void vuln() {
char buf[64];
gets(buf); // No bounds checking!
}تحديد الإزاحة
حدّد عدد وحدات البايت اللازمة للوصول إلى عنوان الإرجاع باستخدام توليد الأنماط:
# Generate a cyclic pattern:
python3 -c "from pwn import *; print(cyclic(200))" | ./vuln
# After crash, find offset:
python3 -c "from pwn import *; print(cyclic_find(0x61616166))"وسائل الحماية: حواجز المكدس
يُعد حاجز المكدس قيمة عشوائية توضع بين المتغيرات المحلية وعنوان الإرجاع المحفوظ. وقبل الإرجاع، يجري التحقق من الحاجز — فإذا تمت الكتابة فوقه، ينهي البرنامج تنفيذه. ويجب تجاوز هذا الحاجز لاستغلال تجاوز السعة التقليدي.
آليات الحماية: ASLR
عشوائية تخطيط مساحة العناوين (ASLR) تجعل العنوان الأساسي للمكدس والكومة والمكتبات عشوائيًا عند كل عملية تنفيذ. ومن دون تسريب عنوان حالي، يصبح تخمين موضع القفز غير ممكن عمليًا على الأنظمة ذات 64 بت.
آليات الحماية: NX/DEP
NX (منع التنفيذ) / DEP (منع تنفيذ البيانات) يضع علامة على المكدس باعتباره غير قابل للتنفيذ. ولا يمكن تنفيذ shellcode المحقون في المخزن المؤقت مباشرةً. وهذا يجبر المهاجمين على استخدام البرمجة الموجهة بالعودة (ROP).
تسريب العناوين
للتغلب على ASLR، يحتاج المهاجمون إلى تسريب معلومات، مثل ثغرات سلاسل التنسيق، أو تجاوز القراءة في الكومة (مثل Heartbleed)، أو مؤشر قابل للقراءة في الدالة المستغلة. يكشف تسريب عنوان واحد الإزاحة ويسمح بحساب العناوين الأخرى.
كتابة استغلال أساسي
تجاوز سعة أساسي لمكدس 32 بت من دون آليات حماية:
# Python exploit skeleton (pwntools):
from pwn import *
p = process("./vuln")
offset = 76
shellcode = asm(shellcraft.sh())
payload = shellcode + b"A" * (offset - len(shellcode)) + p32(stack_addr)
p.sendline(payload)
p.interactive()تقنية ret2libc
ret2libc تتجاوز NX من خلال العودة إلى دوال libc (مثل system()) بدلًا من استخدام shellcode. يستبدل المهاجم عنوان العودة بعنوان system ويمرر "/bin/sh" وسيطًا.
أدوات تطوير الاستغلال
الأدوات الأساسية:
- pwntools — مكتبة Python لتطوير الاستغلالات
- GDB + pwndbg/peda — مصحح أخطاء مزود بمساعدات لتطوير الاستغلالات
- checksec — يعرض آليات حماية الملف الثنائي
- ROPgadget / ropper — للعثور على سلاسل ROP
checksec --file=./vulnتحقق سريع: تجاوز سعة المكدس
ما آلية التخفيف التي تضع قيمة عشوائية بين المتغيرات المحلية وعنوان العودة المحفوظ، وتنهي البرنامج إذا جرى استبدالها؟
مراجعة الدرس
تستبدل تجاوزات سعة مخازن المكدس عنوان العودة من خلال ملء المخزن المؤقت بما يتجاوز حدوده. وتشمل آليات الحماية canary المكدس (لاكتشاف الاستبدالات)، وASLR (لجعل العناوين عشوائية)، وNX/DEP (لجعل المكدس غير قابل للتنفيذ). تتجاوز ret2libc آلية NX. وتُفشل تسريبات المعلومات آلية ASLR. وتسهّل pwntools تطوير الاستغلالات.
الأسئلة الشائعة
هل درس «تجاوزات مخزن المكدس» مجاني؟
نعم — نص درس «تجاوزات مخزن المكدس» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Cyber Security Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Cyber Security Academy 4 دروس في المجموع.
ماذا ستتعلم في «تجاوزات مخزن المكدس»؟
افهم تخطيط المكدس، وتجاوز EIP/RIP، واكتب استغلالًا عمليًا لبرنامج C معرض للخطر. تتمرن على Cyber Security Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Cyber Security Academy؟
لا تُشترط خبرة سابقة. Cyber Security Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.
كم من الوقت يستغرق درس «تجاوزات مخزن المكدس»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Cyber Security Academy هذا؟
نعم. كل درس في Cyber Security Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- تجاوزات مخزن المكدس
- البرمجة الموجهة نحو الإرجاع (ROP)
- ثغرات سلاسل التنسيق
- استغلال الكومة: Use-After-Free وHeap Spraying