Abdulrahman
3 min readApr 28, 2021

--

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

اللهم لا علم لنا الا ما علمتنا

رمضان كريم وكل عام وانتم بخير

--

--