Nebula 01 - Walkthrough
بسم الله الرحمن الرحيم
اللهم صل وسلم على سيدنا محمد وعلى آله وصحبه اجمعين
اللهم علمنا ماينفعنا وانفعنا بما علمتنا انك انت العليم الحكيم
نستكمل المرحلة الثانية من سلسلة تحديات Nebula
ناخذ فكرة عن التحدي ونشوف وش مكتوب في الموقع
وحاط تحت كود
نشغل الكود ونشوف وش النتيجة
يعني بمجرد تشغيل البرنامج او الكود يعطينا الجملة
في لينكس عند تنفيذ اي امر اول شي يسويه الكمبيوتر يبحث في المتغير PATH$ وبعدها اذا لقى الامر يتم تنفيذه واذا لم يجده في المتغير السابق يعطينا خطا
نتعرف اكثر على المتغير PATH$
في المثال السابق استعرضنا قيمة المتغير PATH$ وهو موجود بجميع توزيعات لينكس وهو المسؤول عن مسارات البرامج
بمعنى جميع البرامج المنصبة واللي تتنفذ من خلال سطر الاوامر لابد ان تكون باحدى المسارات السابقة
الان في الكود السابق
راح يبحث عن الامر echo في المسارات المعروضة
ولكن لو اضفنا مسار جديد وغيرنا محتوى echo وش راح تكون التيجة ؟
نشوف
الان اضفت مسار tmp/ على المسارات الاساسية بحيث لو انفذ اي امر اول مجلد راح يبحث فيه هو tmp وبعدها المجلدات المعروضة بالصورة
الان كل اللي علينا نسوي كود بسيط يفعل لنا الشل
نكتب الامر التالي عشان نحرر ملف جديد
فعلا اشتغل الكود وتغير اليوزر من level01 الى flag01 الان نشغل getflag
اللهم صل وسلم على سيدنا محمد وعلى آله وصحبه اجمعين
اللهم علمنا ماينفعنا وانفعنا بما علمتنا انك انت العليم الحكيم
نستكمل المرحلة الثانية من سلسلة تحديات Nebula
ناخذ فكرة عن التحدي ونشوف وش مكتوب في الموقع
There is a vulnerability in the below program that allows arbitrary programs to be executed, can you find it?To do this level, log in as the level01 account with the password level01. Files for this level can be found in /home/flag01.
وحاط تحت كود
والتحدي استخراج الثغرة الموجودة في الكود#include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <stdio.h> int main(int argc, char **argv, char **envp) { gid_t gid; uid_t uid; gid = getegid(); uid = geteuid(); setresgid(gid, gid, gid); setresuid(uid, uid, uid); system("/usr/bin/env echo
and now what
?"); }
نشغل الكود ونشوف وش النتيجة
يعني بمجرد تشغيل البرنامج او الكود يعطينا الجملة
and now what
لو نرجع للكود نشوف انه يستخدم الدالة system لتنفيذ الامر env في لينكس
نفتح man للـ env ونتعرف عليه
وظيفته تشغيل الامر في بيئة معدلة يعني الكود ينفذ الامر echo المسؤول عن المخرجاتNAME env - run a program in a modified environment
في لينكس عند تنفيذ اي امر اول شي يسويه الكمبيوتر يبحث في المتغير PATH$ وبعدها اذا لقى الامر يتم تنفيذه واذا لم يجده في المتغير السابق يعطينا خطا
نتعرف اكثر على المتغير PATH$
في المثال السابق استعرضنا قيمة المتغير PATH$ وهو موجود بجميع توزيعات لينكس وهو المسؤول عن مسارات البرامج
بمعنى جميع البرامج المنصبة واللي تتنفذ من خلال سطر الاوامر لابد ان تكون باحدى المسارات السابقة
الان في الكود السابق
راح يبحث عن الامر echo في المسارات المعروضة
ولكن لو اضفنا مسار جديد وغيرنا محتوى echo وش راح تكون التيجة ؟
نشوف
الان اضفت مسار tmp/ على المسارات الاساسية بحيث لو انفذ اي امر اول مجلد راح يبحث فيه هو tmp وبعدها المجلدات المعروضة بالصورة
الان كل اللي علينا نسوي كود بسيط يفعل لنا الشل
نكتب الامر التالي عشان نحرر ملف جديد
nano /tmp/echo.c
ونضع المحتوى التالي فيه
ونعمل له ترجمة بالامر التالي#include <stdlib.h> #include <stdio.h>void main(){ system("/bin/bash"); }
gcc /tmp/echo.c -o /tmp/echo
ونرجع نشغل الكود الاساسي بالامر
./flag01
ونشف النتيجة
فعلا اشتغل الكود وتغير اليوزر من level01 الى flag01 الان نشغل getflag
الحمدلله خلصنا المرحلة وكانت عن المتغيرات في env ان شاء الله يكون الدرس مفهوم
اراكم في دروس اخرى باذن الله
تعليقات
إرسال تعليق