basics Hunting for 0day
بسم الله الرحمن الرحيم
hunting for 0day
تتمثل الفكرة وراء حماية المكدس هو وضع قيمة 4 بايت إلى المكدس بعد الــبفر وقبل عنوان العودة وغالبا ما تسمي هذه القيمة في انظمة اللينكس :
Canary
ويختلف المسمي في انظمة ويندوز وتسمي
Security Cookies
وتتمثل الفكرة كالاتي اذا كانت قيمة الكناري هي ليست نفسها عند اكتمال وظيفية معينه يقوم البروسيس بعمل انهاء للوظيفية حيث يصعب علي المخترق تحديد اذا كان هناك خطأ ام لا وتستخدم اللينكس العديد من انواع الحمايات مثل
Stack-Smashing Protector (SSP) , ASLR , ect
عندنا الان ثغرة تقوم بعمل تصعيد لصلاحية يوزر الى روت
Privileges Escalation
حدث الخطا عبر ارسال عدد كبيرة من بيانات خاطئة الي البرنامج وتوقف الهدف عند
A * 600
كما تمثل الصورة ادناه حدوث الخطأ بتوقف السيرفر عن الاستجابة
تمثل الصورة اعلاه ان طبيعه الطلب تحدث كالاتي
طبعا ملاحظة الطلب تم تتبعه والبرنامج مغلق السورس وما نقدر ننقحه بالطرق التقليدية
JUNK — JUNK + SIZE — DATA
حيث سنقوم باستخدام الطلب في عملية كتابة السكربت
الشئ الا نحتاجه الان .. تحديد حجم البفر الذي بالامكان ارساله الي الهدف وتتم عبر تتبع عنوان
Canary
بطلب توضيح لحاله
ESP
نقوم اولا بعمل ارفاق البروسيس الي المنقح باستخدام وكما الصورة اعلاه
Break Point (*)
عند اول فرصه لحدوث البفر
حيث لن يتم تنفيذها فعليا داخل المنقح مما سيسمح لنا بتتبع وقت حدوث البفر
x = examine Stat
x/50x $esp + (size of data) , actually i send 1000 X A
عند نهاية التتبع تتضح لنا المشكلة
حتي نقوم بعملية استغلال صحيح سنقوم بادخال عنوان Canary
الي ثغرتنا وكما هو بالصورة هناك
16 bytes
بين عنوان الــ Canary وعنوان الــ RETURN POINTER
حتي نقوم باستغلال ناجح تصبح الثغرة كالاتي
..( مع ملاحظة النقطة في عملية Reverse Address )
little endian order
بحيث يكون عنوان Canary
\xff\x0a\x00\x00
ليصبح العنوان كما التالي :
\x00\x00\x0a\xff
Buffer Size + Canary Address + 16 bytes x B + Controlling EIP
نعود الان الي عملية التحقق من ان هذا الكلام بالامكان تنفيذه علي ارض الواقع
نشاهد ان هناك العديد من A = 41 لغاية عنوان الــ Canary متبوعا بــ 42 = B وصولا الي عنوان RETURN POINTER حيث تم التحكم به بعنوان صحيح لعملية تخطي الــ ASLR بعملية JMP ESP
FF E4
تم تخطي ASLR باستخدام التقنية التالية
List Dynamic Dependencies
Linux-gate تستخدم بعملية Virtual SYSTEM CALL وتعتبر بمثابة Gateway بين الــ USERMODE والــ KERNEL MODE
نقوم بعمل التعديلات اللازمة للــ Exploit بحيث تصبح نهايتنا كالتالي :
Buffer Size + Canary Address + 16 bytes x A + Controlling EIP + Shellcode
اللهم لا علم لنا الا ما علمتنا
رمضان كريم وكل عام وانتم بخير