التحكم في EIP
الكتابة فوق عنوان العودة
التحكم في EIP درس مجاني في Ethical Hacking Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Ethical Hacking Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Ethical Hacking Academy 4 دروس في المجموع.
الهدف
لديكم الإزاحة، ولذلك يمكنكم وضع أي أربع بايتات في EIP. والسؤال الآن: ما العنوان الذي ينبغي وضعه هناك؟
تريدون أن يشير EIP إلى shellcode الخاصة بكم. لكن لا يمكنكم تثبيت عنوان المكدس ببساطة؛ بل تحتاجون إلى قفزة موثوقة.
لماذا لا نثبت عنوان المكدس؟
قد يتغير عنوان المكدس الذي توجد فيه shellcode بين عمليات التشغيل والأنظمة المختلفة. وحتى التغييرات الصغيرة في البيئة قد تنقله.
بدلًا من ذلك، تستخدمون تعليمة مستقرة موجودة مسبقًا في الذاكرة تعيد توجيه التنفيذ إلى الموضع الذي يشير إليه ESP حاليًا.
خدعة JMP ESP
إذا كان ESP يشير إلى shellcode وقت الانهيار، فيمكنك ضبط EIP على عنوان تعليمة JMP ESP. وعندما يحمّل EIP ذلك العنوان، تنفذ وحدة المعالجة المركزية jmp esp وتقفز إلى shellcode.
يجعل هذا التوجيه غير المباشر عملية الاستغلال موثوقة بغض النظر عن عنوان المكدس الدقيق.
jmp esp ; opcode FF E4العثور على JMP ESP
تبحث في الوحدات المحمّلة، ويفضل أن تكون من دون ASLR، عن بايتات opcode FF E4. ويبقى العنوان الأساسي للوحدة ثابتًا، مما يجعل هذه الأداة موثوقة.
تعثر أدوات مثل mona.py على التعليمات المناسبة تلقائيًا.
!mona jmp -r esp -cpb "\x00"تجنب المحارف غير الصالحة
تؤدي بعض قيم البايتات إلى إفساد الإدخال قبل وصوله إلى المخزن المؤقت سليمًا. وأشهرها البايت الصفري 0x00، الذي ينهي سلاسل C. وتشمل القيم الأخرى 0x0a، أي سطرًا جديدًا، و0x0d، أي إرجاع العربة.
يجب ألا يحتوي عنوان JMP ESP على أي من هذه المحارف غير الصالحة.
تحديد المحارف غير الصالحة
لمعرفة البايتات غير الصالحة، أرسل جميع قيم البايتات من 0x00 إلى 0xff في المخزن المؤقت، وافحص الذاكرة في مصحح الأخطاء. وتُعد البايتات التي تتغير أو تختفي محارف غير صالحة.
ستستبعد هذه البايتات من كل من عنوان العودة وshellcode.
!mona bytearray -cpb "\x00"بناء الكتابة فوق EIP
جمّع الإدخال الآن: حشو حتى الإزاحة، ثم عنوان JMP ESP بترتيب little-endian.
إذا كانت JMP ESP موجودة في العنوان 0x625011AF، فستُكتب البايتات بترتيب عكسي.
buf = "A"*offset + "\xaf\x11\x50\x62" # 0x625011AF, little-endianالتحقق من القفزة
ضع نقطة توقف على عنوان JMP ESP في مصحح الأخطاء، ثم شغّل عملية الاستغلال. عندما يصل EIP إليه وينتقل إلى ESP، تكون قد أكدت إعادة التوجيه الموثوقة.
عند هذه النقطة، يشير EIP إلى الموضع الذي ستضع فيه shellcode.
إتاحة مساحة لـ shellcode
بعد عنوان العودة، يحتوي المخزن المؤقت المتبقي، الذي يشير إليه ESP، على shellcode الخاصة بك. وإذا كانت المساحة محدودة، فقد تحتاج إلى قفزة قصيرة أو إلى نقلها.
تضيف زلاقة NOP، وهي سلسلة من بايتات عدم التشغيل 0x90، قبل shellcode هامشًا يسمح للقفزة بالهبوط في أي موضع ضمن الزلاقة.
buf = "A"*offset + ret + "\x90"*16 + shellcodeتجميع العناصر
أصبح هيكل الاستغلال الكامل واضحًا الآن:
- حشو حتى الإزاحة.
- عنوان JMP ESP، من دون محارف غير صالحة وبترتيب little-endian.
- زلاقة NOP.
- shellcode.
لم يتبقَ سوى خطوة واحدة للوصول إلى shell.
بدائل JMP ESP
تُعد JMP ESP إعادة التوجيه التقليدية، لكنها ليست الخيار الوحيد. فإذا كان سجل مختلف يشير إلى المخزن المؤقت، فيمكنك استخدام jmp eax أو call esp أو أداة push esp; ret.
المبدأ واحد: اعثر على تعليمة مستقرة تنقل التحكم إلى الموضع الذي توجد فيه shellcode.
تحقق سريع
تذكّر سبب تفضيل JMP ESP على عنوان مكدس ثابت.
مراجعة
أصبحت الآن تتحكم في مسار التنفيذ:
- اكتب فوق EIP بعنوان أداة JMP ESP بدلًا من استخدام عنوان مكدس غير موثوق.
- اعثر على الأداة في وحدة لا تستخدم ASLR، وتجنب المحارف غير الصالحة مثل
0x00. - اكتب العنوان بترتيب little-endian، وأضف زلاقة NOP قبل shellcode.
ستنشئ في الخطوة التالية shellcode وتفتح shell.
الأسئلة الشائعة
هل درس «التحكم في EIP» مجاني؟
نعم — نص درس «التحكم في EIP» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Ethical Hacking Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Ethical Hacking Academy 4 دروس في المجموع.
ماذا ستتعلم في «التحكم في EIP»؟
الكتابة فوق عنوان العودة تتمرن على Ethical Hacking Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Ethical Hacking Academy؟
لا تُشترط خبرة سابقة. Ethical Hacking Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «التحكم في EIP»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Ethical Hacking Academy هذا؟
نعم. كل درس في Ethical Hacking Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.