pt1[linux privilege escalation techniques] intro- Setuid & Setgid & Path Variable

السلام عليكم ورحمة الله وبركاتة

نبدا الموضوع من دون مقدمات افضل،

في البداية ناخذ تعريف عن setuid وا setguid

بختصار:

هناك انواع مميزة في التصاريح المسموحه للملفات الباينري القابله للتنفيذ مثال ع ذالك setguid+setuid
 عندما تكون هاذي التصاريح موضوعه من قبل الروت في السيرفر ع ملفات باينري يصبح  اي يوزر ع السيرفر يستطيع تشغيل الملف بالصلاحيات اليوزر المصرح. في حالة  setuid اي التصريح او التشغيل يكون من اليوزر المصرح نفسه
setguid اي التصريح او التشغيل يكون من القروب المصرح ايضا نفسه



مقدمه عن Path variable

 Path هو بيئه المتغيرات في اللينكس بحيث انه يحدد المجلدات  الافتراضيه لتشغيل الباينيري في اللينكس في العاده
تكون في مجلدات bin,sbin,usr/sbin.usr/bin
التي تحتوي على ملفات الباينري مثل wget ,cat والخ،،
طيب مافائده path variable اختصار للوقت والجهد بحيث لاتطلب الباينري في مجلده الاصلي مثلا
/usr/bin/cat /home/user/file.txt
 فقط ماعليك هو كتابه الامر cat /home/user/file.txt
بحيث ان path variable تعرف على الباينيري cat عن طريق بىئه المتغيرات
:/bin
ناخذ مثال عن كيف نظهر path variable env
 الامر بسيط
echo $PATH

الان ناخذ مثال كود ظريف لطيف يقوم بتشغيل ملف file.sh  عن طريق دالة system
نقوم باترجمته





####تنويه خطأ من المفروض مسمى الملف setuid


gcc test.c -o setguid



بعد ماقمنا با ترجمة الكود نقوم الان بوضع التصاريح المطلوبه في هاذي الحالة راح يكون الامر




chomd u+s

  u+s = setuid
 g+s = setguid
u= user
s= set execuation on id مثل ماهو موضح من ارشيف chomd في الصورة
الان نقوم بتغير مالك اللباينيري الى روت
linux chown root:root / mac chown root:wheel

 من بعد ماقمنا بالتصاريح المطلوبه كما نلاحظ (x) = executable اي قابل للتنفيد



(s) suid bit مفعل 
root = owner-user
wheel = owner-group


نقوم بتشغيل الملف من صلاحيات اليوزر لنرى


نلاحظ الباينيري يقوم بمحاوله تشغيل ملف باش باسم file.sh من ثم ملف الباش يقرا ملف flag.txt الذي ليسى لدينا صلاحيات لقرائته .....



الان لو نرجع للكود في البداية
نبي نفهم الية عمل setuid+ setguid في اللينكس مع الباث في التصعيد
في الكود السابق استدخمنا دالة system
نقوم بعمل debug
باستخدام strace or ltrace في اللينكس نلاحظ ان الباينيري ينفذ امر ولكن غير مفهوم


 الثغرة او التصعيد راح يعتمد الاول ع التصريح والمالك بحيث التصريح لديناsetuid root وا الowner root والثاني على الباينيري وطريقة عمله..
الان لنفترض انه لدينا يوزر بصلاحيات محدوده باسم r3m0t3
الاستغلال راح يكون بسيط ولكن الفكرة هي كالتالي الباينري يقوم بتنفيذ امر system واستدعاء ملف file.sh وتشغيله
ولكن يكمن الخطاء في التصعيد انه لم يقم بتحديد المجلد للملف الباش او يكون سوء + اهمال ادارة من الروت ويقوم بعمل [.] في $PATH بحيث يسهل له طلب استدعاءا لباينيري من دون وضع ./binary
وهنا يسمى التصعيد PATH Variable .
بحيث انه بستطاعتنا بتالاعب في  PATH Variable
واضافه متغير جديد عن طريق export عندما يقوم بالتحقق من من مجلدات $PATH يقوم بتشغيل مجلد الذي يحتوي الباينري التابع لنا. مثال،

export PATH=/PATHfolder:$PATH


#ِِِ~Exploit
الفكرة في الاستغلال هي
  ١- انشاء binary بأسم bash
٢- تغير Path Variable

الاستغلال راح يكون بيسيط

يقوم بطباعه path variable اي المجلدات الافتراضيه للتشغيل الباينيري  echo $PATH
 نقوم بوضع path تبع الباينيري الذي سمينه [bash] export PATH=/tmp:$PATH

والناتج


بعض الاومر للبحث على setuid + setguid bit 

setuid = 
find / -perm -g=s -type f 2>/dev/null 
setgid=
find / -perm -u=s -type f 2>/dev/null
  
 ناخذ مثال اخر من موقع 

  https://attackdefense.com

نقوم في البداية بالبحث عن setuid bit & setgid bit
 
 بعد ماقمنا بتشغيل البينيري يتضح لنا انه يقوم بقراءه ملف يحتوي welcome to attack ...
وايضا من $path يتضحى لنا انه welcome باينيري مستقل بشكل ما
 اهم النقاط التي نريد ان نركز عليها هي المجلد الي احنا عليه المالك الي هو نفس اليوزر الي احنا نحاول نصعد الصلاحيات منه
وايضا ملف الباينيري + ملف اخر بصلاحيات روت قابل للتفنيذ بصلاحيات المالك الي هو root  لايمكن قرائته لسبب الصلاحيات طيب في الاول نحاول نعمل debug للباينري حتى نتاكد بأن الملف الذي يقراه/ينفذه الباينري هو greetings او لا

 كما نلاحظ بوجود greetings داخل strings تبع الباينيري وهاذا يأكد لنا انه الباينيري يقرا/ينفذ من ملف greetings
 بحكم ماذكرنا في البداية انه المجلد المالك هو نفس اليوزر الي نحاول نصعد الصلاحيات منه نقدر بحذف الملف greetings بحكم صلاحياتي ع الملجد
 كما نلاحظ قمنا بمسح الملف

الان الاستغلال بسيط ولطيف

echo "/bin/bash -c id" > greetings|chmod +x greetings|./welcome
 
في النهاية حاولت ابسط واختصر الفكرة بقدر ماستطيع حتى توصل المعلومة مبسطه، دمتم بود/



تعليقات

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

CRLF injection [\r\n Carriage Return]

Study in Nosql-Injection-Mongodb