SmashTheStack #Level 02 wlakthrough
بسم الله الرحمن الرحيم
اللهم لاعلم لنا الا ماعلمتنا انك انت العليم الحكيم
اليوم باذن الله نكمل المرحلة الثانية من سلسلة SmashTheStack
بعد الحصول على الباسوورد من المرحلة الاولى "hgvbmkQIHavkGg5wyk" ندخل على المرحلة الثانية
ونستعرض الكود البرمجي للمرحلة
اللهم لاعلم لنا الا ماعلمتنا انك انت العليم الحكيم
اليوم باذن الله نكمل المرحلة الثانية من سلسلة SmashTheStack
بعد الحصول على الباسوورد من المرحلة الاولى "hgvbmkQIHavkGg5wyk" ندخل على المرحلة الثانية
ونستعرض الكود البرمجي للمرحلة
//a little fun brought to you by bla #include <stdio.h> #include <stdlib.h> #include <signal.h> #include <setjmp.h> void catcher(int a) { setresuid(geteuid(),geteuid(),geteuid()); printf("WIN!\n"); system("/bin/sh"); exit(0); } int main(int argc, char **argv) { puts("source code is available in level02.c\n"); if (argc != 3 || !atoi(argv[2])) return 1; signal(SIGFPE, catcher); return abs(atoi(argv[1])) / atoi(argv[2]); }
نشوف اول الكود الهيدر وبعده نشوف function اسمها catcher وتاخذ قيمة وهي عدد صحيح
وتحتوي على الهدف من التحدي هذا وهو الحصول على صلاحيات المرحلة الثالثة وهو الغاية عندنا
بعدين نجي للروتين main اول سطر فيه لايهم لانه فقط يعرض الجملة
"source code is available in level02.c"
ولكن if statement اللي بعد الكلام هو اللي يهمنا
if statement تتاكد ان فيه ثلاث مدخلات في على سطر الاوامر وان المدخل الثالث لايساوي صفر
يعني في حال احد الشرطين حصلت راح يرجع البرنامج بالقمية 1 بعدين
بعدين يجينا السطر التالي
signal(SIGFPE, catcher);
وهو ارسال اشارة SIGFPE وماخذ ايضا اسم الدالة اللي نبي نوصل لها
طيب ماهو SIGFPE
هي اشارة ترسل عند حدوث عملية حسابية خاطئة مثل القسمة على 0 مثل ماهو مبين عندنا في الويكيبيديا
ولكت بما ان المدخل الثالث في سطر الاوامر يتم التحقق منه بانه لايساوي الصفر فالاحتمال هذا بعيد كل البعد اننا نستخدمه وهو القسمة على صفر
بس نشوف وش متكوب هنا
http://linux.die.net/man/2/signal
وبالخصوص السطر
"Also
dividing the most negative integer by -1 may generate SIGFPE."
يعني المفهوم لو قسمنا اكبر عدد سالب ياخذه integer على -1 يمكن نرسل الاشارة SIGFPE اللي هم INT_MIN و INT_MAX
والسبب ان لو قسمنا -2147483648 على -1 راح يسبب لنا طفح عددي او integer overflow
level2@io:~$ /levels/level02 -2147483648 -1
source code is available in level02.c
WIN!
sh-4.1$ cat /home/level3/.pass
G2K2EP1luDpdNQ
الى هنا ينتهي الدرس
ان اعجبك فاذكر الله وادع لي في الغيب وان لم يعجبك فانتقدني لاصبح افضل
تعليقات
إرسال تعليق