writeup گرفتن دسترسی root از ماشین DevOops

writeup گرفتن دسترسی root از ماشین DevOops

بدون ديدگاه

سلام خدمت تمامی کاربران تیم امنیت بیت، در این آموزش میخوایم writeup گرفتن دسترسی root از ماشین DevOops رو با هم بررسی کنیم

DevOops یک ماشین تست نفوذ با سطح Medium هست که در داخل لابراتور تست نفوذ Hack The Box قرار داده شده

امروز میخوایم writeup ای که باعث گرفتن دسترسی root میشه رو با هم بررسی کنیم

و ببینیم که چجوری میتونیم آسیب پذیری های این ماشین رو پیدا کنیم و به کمک اون ها دسترسی یوزر root بگیریم

پیدا کردن پورت های باز

خب اول از همه به کمک Nmap پورت های باز ماشین موردنظر رو بررسی میکنیم تا ببینیم که به چه چیزهایی میرسیم

writeup گرفتن دسترسی root از ماشین DevOops

همانطور که میبینید HTTP Server روی پورت ۵۰۰۰ و SSH Server روی پورت پیش فرض خودش (۲۲) فعال هست

چون HTTP Server باز هست

پس وبسایت موردنظر رو باز میکنیم تا ببینیم که چه چیز هایی داره و چه آسیب پذیری هایی میتونیم پیدا کنیم

بررسی Web Application

writeup گرفتن دسترسی root از ماشین DevOops

با باز کردن وبسایت میشه به این نتیجه رسید که این وبسایت هنوز در حال ساخت هست و تکمیل نشده

و به نظر میرسه که این Web Application داره از Blog Feed استفاده میکنه و همانطور هم که معلومه، از نام feed.py میشه متوجه شد که به زبان Python نوشته شده

پس یذره عمیق تر آسیب پذیری های وبسایت رو بررسی میکنیم

اسکن کردن دایرکتوری های وبسایت

و ما ابزار GoBuster دایرکتوری هاش رو اسکن میکنیم تا ببینیم به چیز جالبی میرسیم یا نه

برای اسکن هم از وردلیستی که در مسیر پیش فرض کالی لینوکس موجود هست استفاده میکنیم (مسیر /urs/share/dirbuster/wordlists/)

writeup گرفتن دسترسی root از ماشین DevOops

خب، ابزار GoBuster برامون ۲ تا دایرکتوری پیدا کرد; اولی /upload و دومی /feed

که به نظر میرسه /upload مسیر خوبی برای شروع تست کردن هست

پیدا کردن آسیب پذیری Web Application

آدرس مربوط به /upload رو باز میکنیم و با صفحه ای به شکل زیر رو به رو میشیم

writeup گرفتن دسترسی root از ماشین DevOops

در این صفحه ما میتونیم فایل XML رو آپلود کنیم و بهمون یک الگو هم از فایلی که باید آپلود کنیم نشون میده

writeup گرفتن دسترسی root از ماشین DevOops

فایل XML ما باید شامل فیلد های Author, Subject و Content باشه

پس یک فایل با همین فرمت میسازیم و آپلود میکنیم تا ببینیم چه خروجی ای دریافت میکنیم

بعد از اینکه فایل رو save کردیم و آپلود کردیم با خروجی زیر رو به رو میشیم

همانطور که میبینید به ما فیلد هایی که در فایل XML وارد کردیم رو نمایش میده و همچنین به ما نام یک user رو هم نمایش میده: roosa

XML External Entities

XXE یکی از آسیب پذیری هایی هست که در ۱۰ تا آسیب پذیری برتر OWASP-2017 هم قرار داره

XML چیه؟

XML یک زبان Markup  هست که بهمون اجازه میده داده هارو توصیف کنیم و یک جورایی میشه گفت الگویی هست که اجازه میده دو تا سیستم با هم دیگه ارتباط برقرار کنن

یعنی به طور مثال در فایلی که ما در بالا آپلود کردیم، فیلد های Author, Subject و Content رو توصیف کردیم و محتوا های اون هارو داخلش قرار دادیم

اما، چیزی که باعث آسیب پذیری XXE میشه اینه که ما میتونیم چیزی مثل متغیر تعریف کنیم

یعنی جی؟ یعنی به طور مثال ما یک متغیر تعریف میکنیم که محتوای اون یک دایرکتوری در سیستمی هست که فایل داخلش اجرا میشه

حالا هرجا زمانی که نام اون متغیر رو صدا بزنیم، محتوای فایل موردنظر به ما نمایش داده میشه

<!ENTITY reference_name SYSTEM reference >

ببینید الان در مثال بالا ما یک نام مشخص میکنیم برای متغیرمون (refrence_name) و این متغیر به خود reference اشاره میکنه

و زمانی که refrence_name رو صدا کنیم، محتوای reference  نمایش داده میشه

چجوری refrence_name  رو صدا میزنیم؟ به شکل زیر:

<xpto>&reference_name</xpto>

یعنی به طور مثال ما میتونیم محتوای فایل /etc/passwd رو به شکل زیر بخونیم

<?xml version="1.0"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd" > ] >
<foo>
<content>&xxe</content>
</foo>

حالا برای اینکه Web Application موردنظر رو برای این آسیب پذیری تست کنیم، از کد زیر استفاده میکنیم

writeup گرفتن دسترسی root از ماشین DevOops

و خروجی ای به شکل زیر برامون نمایش داده میشه

writeup گرفتن دسترسی root از ماشین DevOops

که نشون میده وبسایت موردنظر آسیب پذیر هست

و حالا با توجه به اینکه میدونیم پورت مرتبط با SSH باز و فعال هست و یوزری به نام roosa داریم

در داخل فولدر .ssh در داخل directory یوزر موردنطر، به دنبال کلید های SSH میگردیم تا به کمک اون بتونیم با یوزر roosa دسترسی بگیریم

پس کد ما به شکل زیر میشه

writeup ماشین devoops

و بعد از آپلود کردن، کلید برای ما نمایش داده میشه

writeup ماشین devoops

محتوای موردنظر رو در یک فایل ذخیره میکنیم و بهش دسترسی میدیم

chmod 600 key

حالا با اطلاعاتی که داریم سعی میکنیم به کمک ssh وارد بشیم

writeup ماشین devoops

و زمانی که وارد بشیم در داخل همان دایرکتوری و فایل user.txt، مقدار flag ما وجود داره و یک flag پیدا کردیم

گرفتن دسترسی یوزر root

حالا برای اینکه دسترسی root بگیریم، دایرکتوری ها رو با دقت بیشتر با دستور زیر بررسی میکنیم

ls -lah

writeup ماشین devoops

به نظر میرسه که این user هم خودش دسترسی root داره، اینو در خاظرمون نگه میداریم تا شاید جایی کاربردی باشه

حالا برای اینکه لیست دستوراتی که یوزر جاری زده رو ببینیم از دستور زیر استفاده میکنیم

history

writeup ماشین devoops

همانطور که در خروجی میبینید، یوزر موردنظر به اشتباه در مسیر resource/integration کلید احرازهویت اشتباه رو Commit کرده

و بعد سعی کرده با ایجاد کلید SSH جدید این مورد رو برطرف کنه

پس، کلید SSH برای یوزر root چیه؟

برای اینکار فایل های .git که توسط یوزر جاری (roosa) روش کار شده رو پیدا میکنیم تا ببینیم چه محتوایی داره

writeup ماشین devoops

بعد از اینکه به مسیر work/blogfeed رفتیم، لاگ های Commit های انجام شده رو بررسی میکنیم تا دقیقا محتوای موردنظر رو پیدا کنیم

با تایپ کردن دستور زیر میتونیم به صورت timeline تمامی Commit های اتفای افتاده رو ببینیم

git log

writeup ماشین devoops

حالا که Commit موردنظرمون رو پیدا کردیم با دستور زیر محتوای اون رو restore میکنیم تا ببینیم که چه دستوری وارد شده بود

 

writeup ماشین devoops

حالا وارد مسیر resources/integration میشیم تا دسترسی صحیح به فایل authcredentials.key بدیم و با اون کلید به SSH از طریق یوزر Root لاگین کنیم تا writeup ماشین devoops رو تکمیل کنیم

writeup ماشین devoops

و همانطور که میبینید flag پایانی رو پیدا کردیم و writeup ماشین devoops رو به طور کامل بررسی کردیم

موفق باشید

نوشتن دیدگاه