نگاره‌هایی پیرامون امنیت، شبکه و رمزنگاری

14 آگوست 2023

سلام بچه‌ها, توی این رایتاپ میخوام به نحوه رسیدنم به RCE و اکسپلویت کردنش بپردازم.

قبل از خوندن پیشنهاد میکنم حتما زمانی که این رایتاپ رو میخونید پر انرژی و مغزتون استراحت کرده باشه و هر بخش رو کامل تحلیل کنید چون یکمی این رایتاپ اقلا برای خود من سنگین هست.

اسکوپ‌های برنامه اینجوری بود:

در اولین مرحله شروع کردم به خوندن پالیسی و توضیحات برنامه تا با Out of Scope برنامه و آسیب‌پذیری‌های غیر قابل قبول آشنا بشم. پس از خوندن شروع به واید ریکان فاز بود پس شروع کردم به ساب دامین اینامریشن از تک تک دامین‌ها و اطلاعات هر کدوم از دامنه هارو داخل پوشه‌های مختلف ریختم تا مدیریتشون آسون تر باشه.
برای پیدا کردن ساب دامین من در فاز اول از ابزارهای معروف و یدونه بش اسکریپت که همرو باهم ترکیب کرده استفاده میکنم. Amass, subfinder, assetfinder, …
بعدش هم شروع به استاتیک بروت فورس و داینامیک بروت فورس کردم.
از طرفی گیت‌هاب و شودن و … روهم چک کردم تا لیست کاملی از ساب دامنه‌ها داشته باشم.
حالا طبق دسته بندی که انجام دادم:

سراغ یکی از دامنه‌ها رفتم و روی خروجی ساب‌هاش dnsx و httpx انداختم از سوییچ -td برای تکنولوژی دیتکشن استفاده کردم تا ببینم اوضاع از چه قراره.
همزمان که رویه سرورم Origin IP هایی که پیدا کردم رو هم پورت اسکن گذاشتم و دونه دونه ساب دامنه‌ها رو باز کردم و داخلشون میچرخیدم تا داخل برپ سویتم مپ بشن.
پس از سه روز سرویس دیسکاوری و تست کردن سطحی بیشتر ساب دامنه‌ها چیزی پیدا نکردم و گفتم باید بیشتر دیپ بشم پس دونه دونه ساب‌ها رو بر میداشتم و با تموم فانکشن‌هاش کار میکردم مثل یک یوزر عادی!

رسید به فاز نرو ریکان که من عاشقشم D:
به مپ ساب دامنه‌ها داخل برپ سویت حسابی نگاه کردم و تمام اندپوینت‌های پابلیک رو به ذهنم سپردم
حالا نوبت اندپونت دیسکاوری با فاز کردن بود.
یکی از ساب دامینارو من قبلا پابلیک فانکشن‌ها شو چک کرده بودم و مطمعن بودم سیف هستن اما فاز کردن همچیزو برعکس کرد…

پس از فاز کردنش به اندپوینت xmlrpc رسیدم که سریع وردپرس اومد به ذهنم اما چرا .php نداره؟
این اپلیکشن که جاوایی هست اصلا این چرا اینجاست؟ بعد فکر کردم یه ریورز پراکسی هست که این مسیرو ریدایرکت کرده.
ریسپانسش میگفت باید درخواست POST باشه و بصورت XML ارسال کنی.
من پیلودای وردپرس رو زدم اما جوابش یکمی فرق داشت.
اینجا کامل مطمعن شدم وردپرس نیست اما چرا؟ این چیه؟ چرا باید اینجا باشه؟ اینا سوالات ذهنم بود.

خب آره دقیقا زمان تست XXE بود و من شروع کردم و دیدم متغیرایی که تعریف میکنم رو برام تو ریسپانس چاپ میکنه.
لبخند مرموزی زدمو از SYSTEM داخل پیلود استفاده کردم اما متاسفانه همچیز 403 میشد.
کلا هرکاری کردم تا با کلمه SYSTEM کاری کنم نشد که نشد.
یکمی ناراحت شدم ولی سوال های بالا همچنان تو ذهنم بود.
با دقت بیشتر ریسپانس رو نگاه کردم و متوجه یک هدر عجیب داخل ریسپانس شدم سریع یاد Voorivex Hunt Event افتادم که با سرچ زدن یک هدر خاص تو ریسپانس به یسری چیزا میشد رسید.

هدرو همه جا سرچ زدم و متوجه معماری بک اند شدم عالی شد حالا کامل میدونستم چخبره اون پشت.
بک اند زبان جاوا بود.
با سرچ های پی در پی به یدونه XML payload رسیدم که یک تگ داشت به اسم serialize 😀

به خیال اینکه اینم مثل PHP هست کاملا خندان رفتم پیلود درست کنم از ChatGPT گرفتم اما خیلی چیز عجیب غریبی بود -_-
هرجا سرچ میزدم پیلود آماده هیچی نبود که درست متوجه بشم
منم کلا جاوا کار نکرده بودم اصلا نمیدونستم اینا چیه؟؟
واقعا مغزم داشت ارور میداد یکی از همونارو فرسادم
ریسپانس حاوی جمله  failed to deserialize شد.
کاملا نا امید بودم چون اصلا نمیدونستم اینا چی هستن و چجوری ساخته میشن چون یه base64 بود که decode میکردی  فرم باینری حالت میشد.
اما کامل مطمعن شده بودم اونجا یه RCE  خوابیده اما خب RCE ما دقیقا مثل آقا رضاااا خوابیده بود و براحتی بیدار نمیشد.
بعد از حدود 9 ساعت سرچ و جستجو متوجه شدم جاوا چجوری دیسریالایز میکنه و وقتی پیلود رو گذاشتم اجرا شد.

این تا اینجا شد پیدا کردن آسیب‌پذیری و برای کسایی که میخوان نتیجه ریسرچ و نوع دیسریالایز جاوا رو بدونن پاراگراف پایین به اون میپردازیم.

به قلب رایتاپ رسیدیم و خوشحالم که تا اینجا همراهی کردید.
مهمترین نکته: جاوا چندین لایبرری داره بیش از ۲۰ عدد که برای دیسریالایز کردن حداقل باید یکی از اونها رو اون بک‌اند نصب شده باشه. حالا جالبه بدونید اگر هرکدوم ازین لایبرریا بخوان دیسریالایز انجام بدن اون پیلود باید با خود اون لایبرری ساخته بشه.
اسم های مختلفی دارند که تویه این لینک همشون هستند، یعنی چی؟
داخل تارگت ما برای مثال لایبرری JRMPClient نصب بود و اگر قرار بود پیلودی اجرا بشه پیلود باید با همین JRMPClient درست بشه.
همچنین برای ساختن پیلود جاوا به یک فایل به نام ysoseria.jar نیاز داره تا بتونه لایبرری هارو اجرا کنه برای مثال

java -jar ysoserial.jar JRMPClient whoami

این دستور پیلودی میسازه که دستور whoami رو اجرا میکنه اما بشرطی که لایبرری JRMPClient روی بک اند نصب باشه!

رویه تارگت ما فقط یدونه لایبرری نصب بود و دقیقا همین منو گمراه کرده بود چون من با لایبرری های دیگه پیلود میساختم و ارسال میکردم و بکند نمیتونست ترجمش کنه.
پس از اینکه متوجه این قضیه شدم پیلودهای مختلف رو با nslookup libname.myserver.test ساختم و به جای libname اسم لایبرری هارو گذاشتم تا درخواست اومد بدونم کدوما نصبه رویه سرور.
یه لیست از پیلود های بیس 64 جاوایی درست شد همرو دادم به اینترودر و بومممم درخواست ات آف بند به من رسید :))))


داخل هم لایبرری استفاده شده برگشت داده شد و متوجه شدم فقط همون رو سرور ساپورت میکنه.
برپ سویت هم یه افزونه داره برای اینکار به نام Java deserialize و همرو خودش اتوماتیک تست میکنه و میگه کدوم لایبرری وجود داره و آسیب پذیره :))
همه پیلود ها با این ساخته میشن و کافیه رانش کنی و اسم لایبرری رو جلوش بزاری به همراه دستور تا داخل خروجی برات پیلود ساخته شدرو برگردونه آموزش کاملش داخل لینک هست این توضیحات صرفا برای این بود یه ذهنیتی داخل مغزتون ازش شکل بگیره.
ممنون از تایمی که گذاشتید. بدرود 🙂

  • به اشتراک بگذارید:
برچسب‌ها: ، ،
  1. Amirmlkm گفت:

    عالی بود🔥

  2. wellerman گفت:

    جالب بود . ایول .

  3. Chasem_Goraz گفت:

    سلام وقتی dnsx زدی ای پی های که پست cdns بودن رو هم فیلتر کردی یا نه ؟!

  4. msoodb گفت:

    سلام، عالی
    برنامه باگ بانتی دیوار تو چه سایتی منتشر شده؟

  5. reza گفت:

    دمت گرم منتظر رایتاپ دیگتم هستیم در مورد تصاحب حسابهای کاربران دیوار.

  6. افراتک گفت:

    سلام
    خیلی جالب بود .

  7. عباس گفت:

    سلام عالی بود این لینک باگ باتتی دیوار رو میزاری هر چقدر سرچ میکنم نمیاد ممنون