
استغلال الثنائيات والهندسة العكسية (من التجميع إلى لغة سي)
استكشف التفكيك (disassembly) واستغلال الثنائيات (binary exploitation) والهندسة العكسية (reverse-engineering) عبر 10 تحديات صغيرة.
في مجلد كل مستوى ستجد:
flag - كلمة مرور المستوى التالي
README.md - كيفية العثور على كلمة المرور
source.c - الثنائي المعاد هندسته
dissasembly_notes.md - ملاحظات عن لغة التجميع (asm)
راجع الموضوع لمزيد من التفاصيل.
لمزيد من المتعة مع gdb والاستغلال، اطّلع على المشروع السابق RainFall.
حمّل أولاً من 42 OverRide.iso.
على نظام Mac OSX، ثبّت VirtualBox.
في VirtualBox أنشئ آلة افتراضية جديدة (اضغط New).
استمر عبر جميع الخطوات التالية بالإعدادات الافتراضية:
بعد ذلك اضغط Settings > Network > Adapter 1 > Attached to: Bridged Adapter.
لا تزال في الإعدادات، اضغط Storage > على يمين "Controller: IDE"، يوجد أيقونة قرص مضغوط مع علامة + (إضافة محرك أقراص ضوئي). اضغط Add Disk Image، واختر OverRide.iso.
اضغط Start لبدء الآلة الافتراضية، وبمجرد تشغيلها يجب أن تظهر عنوان IP للآلة الافتراضية وتطلب تسجيل الدخول.
سجّل الدخول من شل منفصل كمستخدم level00 بكلمة مرور level00.
ssh level00@{VM_IP} -p 4242
كمستخدم level00 الهدف هو قراءة كلمة مرور المستخدم level01، والموجودة في /home/users/level01/.pass. لكن المستخدم level00 لا يمتلك صلاحيات قراءة هذا الملف.
في المجلد الرئيسي للمستخدم level00 يوجد ثنائي (binary) باسم level00 مع تعيين SUID ومالكه level01.
هذا يعني أنه عند تنفيذ الثنائي level00، ننفذه بصلاحيات المستخدم level01.
يجب أن نجد ثغرة في الثنائي level00 باستخدام gdb. ثم نستغل الثغرة لتنفيذ system("/bin/sh")، مما يفتح شل كمستخدم level01 حيث لدينا صلاحيات قراءة كلمة المرور.
cat /home/users/level01/.pass
ثم سجّل الدخول كمستخدم level01.
su level01
كرّر ذلك لكل مستوى.
لكل مستوى، قمنا بهندسة عكسية للـ source.c الأصلي من خلال فحص تفكيك gdb للثنائي.
0 - كلمة مرور مشفرة بشكل ثابت (Hardcoded password)
1 - هجوم Ret2Libc
2 - هجوم سلسلة تنسيق printf()
3 - تخمين كلمة المرور بالقوة العمياء (Brute force)
4 - تجاوز سعة المكدس (stack overflow) عبر gets() + هجوم Return-to-libc
5 - شيل كود (Shellcode) في متغير بيئة + هجوم سلسلة تنسيق printf()
6 - قيمة تجزئة (hash) يمكن اكتشافها باستخدام gdb
7 - هجوم Ret2Libc على جدول بيانات غير محمي
8 - الثنائي يقوم بنسخ احتياطي لكلمة المرور عبر رابط رمزي (symlink)
9 - خطأ Off-by-one
كتبت هذا المشروع في فريق مع الموهوب جداً @dfinnis.