Nebula 01 - Walkthrough

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

اللهم صل وسلم على سيدنا محمد وعلى آله وصحبه اجمعين

اللهم علمنا ماينفعنا وانفعنا بما علمتنا انك انت العليم الحكيم

نستكمل المرحلة الثانية من سلسلة تحديات 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 ونتعرف عليه 
 
NAME
       env - run a program in a modified environment
 
وظيفته تشغيل الامر في بيئة معدلة يعني الكود ينفذ الامر echo المسؤول عن المخرجات

 في لينكس عند تنفيذ اي امر اول شي يسويه الكمبيوتر يبحث في المتغير 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 ان شاء الله يكون الدرس مفهوم 


اراكم في دروس اخرى باذن الله 

 

تعليقات

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

CRLF injection [\r\n Carriage Return]

Study in Nosql-Injection-Mongodb