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

16 فوریه 2021

چند وقتی هست که از کشف یک آسیب‌پذیری RCE در لاراول می‌گذره (جزئیات بیشتر). مهاجم با استفاده از این آسیب‌پذیری می‌تونه روی وسایت کدهای مخرب خودش رو اجرا کنه و در نهایت به اجرای دستور سیستم‌عاملی یا Command Injection برسه. تو این بلاگ به‌صورت کامل می‌تونید تحلیل و نحوه اکسپلویت این آسیب‌پذیری رو مطالعه کنید. امروز در این پست قراره با همین ببینیم چطوری می‌تونیم توی باگ‌بانتی از این آسیب‌پذیری استفاده کنیم.

وقتی یه آسیب‌پذیری به این درجه اهمیت عمومی میشه، خیلی از سایت‌ها و به‌خصوص برنامه‌های بانتی شروع می‌کنن به امن کردن سیستم‌های خودشون. پس چطور میشه از این آسیب‌پذیری‌ها توی برنامه‌های بانتی کشف کرد و به پول رسید؟ اینجاست که متدولوژی یا روش انجام کار مهم میشه. چرا که به روش سنتی یا «هر چی بار خورد» احتمال کمتری داره چنین باگ‌های پابلیکی رو زدتر از بقیه کشف کنیم. این یعنی چی؟ یعنی مثلا من میرم روی برنامه Yahoo کار می‌کنم، بعد اگه یه موقع به سایتی برسم که از لاراول استفاده می‌کنه، بیام بررسی کنم که آیا آسیب‌پذیر هست یا نه. مشکل این روش اینه که خیلیا رودتر ما این رو پیدا می‌کنن و گزارش میدن، پس نیاز به روشی دیگه داریم.

روشی که من استفاده می‌کنم، تشکیل یه مخزن از تمام برنامه‌هایی هست که روشون کار می‌کنم. این مخزن هر هفته تمام دارایی‌های جدید برنامه‌هارو با روش‌های مختلف کشف و به‌روز رسانی می‌کنه. تو این پست قصد ندارم وارد این مبحث بشم، چرا که جای کار بسیار داره و اصلا در یک پست هم نمی‌گنجه، اگه عمری بود در پست‌های آتی با تکنیک‌های Recon در خدمتتون هستم. خب برگردیم به بحث، پس با رجوع به مخزن:

همون‌طور که مشخه، مخزن من الان حدود ۵۲۰ هزارتا دارایی Live داره که روی هر کدوم آسیب‌پذیری پیدا بشه تبدیل به $ میشه. منظور از دارایی یک URL معتبر هست که توی اسکن آخری که انجام دادم، روی پورت مشخص جواب HTTP معتبر داده. اگه شما چنین مخزنی ندارید یا باید برای خودتون بسازید، یا از مخزن‌های آنلاین مثل Project Discovery استفاده کنید. حالا من باید کل لاراول‌های این مخزن رو پیدا کنم. ابزاری که برای این بخش پیشنهاد میدم، ابزار نوشته شده با زبان Go بنام MEG هست که توسط tomnomnom بزرگ نوشته شده (اگه شما باگ هانترید قطعا این بچه رو میشناسید).

کار این بازار اینه که درخواست‌های HTTP به به تعداد زیادی از سایت‌ها می‌فرسته و جواب رو توی مسیرهای مشخص ذخیره می‌کنه. بعدش میتونید توی جواب‌ها دنبال امضاهای خاصی بگردین و دانه هدفتون رو کوچک‌تر کنید. برای مثلا فکر کنید من میخوام از کل مخزن، تمام سایت‌هایی که با PHP نوشته شدن رو با یه تقریب خوبی پیدا کنم. کافیه روی کل مخزن MEG رو اجرا کنم، بعد توی فایل‌های خروجی PHPSESSID رو Grep کنم. البته همین آقا ابزار کوچیک دیگه‌ای داره سرچ رو براتون سریع‌تر میکنه. میتونید برای خودتون Signatureهای مختلف رو بسازید و ذخیره کنید، بعد روی کل جواب‌ها دنبال سرنخ‌هایی باشید که باشون باگ پیدا کنید، این تیکه دیگه به خلاقیت شما بستگی داره.

خب MEG یه ابزار کامل و جامع نیست و یه سری نواقص داره، برای همین ما ابزار مشابهی طراحی کردیم که سرعت بیشتری داشته باشه (ولی روال کار دقیقا همونه)، پس ابزار رو روی کل URLهای مخزن اجرا می‌کنیم:

یه توضیح بدم من دنبال Status_code های ۲۰۰ و Content_type با عبارت مشخص “text/html” میگشتم چون میدونم جواب لاراول به من توی این بازه هست و اینطوری کلی توی فضا صرفه‌جویی کردم و سرعت رو بالاتر بردم. بعد از اتمام اجرای ابزار:

همون‌طور که مشخصه، جواب‌ها ذخیره شدن. حالا کافیه چند تا عبارت رو توی جواب‌ها سرچ کنم که کل لاراول‌ها بدست بیادک برای مثال (جستجو محدود به عکس زیر نیست):

حالا که من کل لاراول‌های موجود رو دارم و باید شروع کنم تست کردن همشون. تقریبا از ۵۰۰ هزار دارایی، من به عدد ۲ رقمی رسیدم که بررسی اینا خیلی آسونه و در صورت گشف آسیب‌پذیری، به پول میرسم. اولین کاری که روی کل لاراول‌های صورت گرفت، بررسی روشن بودن وضعیت Debug بود. روش‌های مختلفی برای شناسایی مد Debug وجود داره، من از ارسال درخواست‌های HTTP با روش‌های مختلف استفاده کردم (اطالعات بیشتر؟)

پس با عوض کردن POST به PUT هنگام ورود به لاراول، تونستم لاراول‌هایی که روشون debug فعال هست رو شناسایی کنم:

که منجر به افشای اطالعات میشه، این اطلاعات خیلی بدرد بخور هست طوری که باعث میشه نسخه لاراول و PHP موارد دیگه رو شناسایی کنم. لاراول‌هایی که نسخه اونا از ۶ بیشتر بود و از Ignition استفاده می‌کردن آسیب‌پذیر بودن (البته جز روش تشخصی روشن بودن دیباگ، روش‌های دیگه هم برای شناسایی استفاده شد). با انجام مراحل بالا، مشخص شد که فقط یه لاراول آسیب‌پذیر هست و با استفاده از اکسپلویت آماده تونستیم روش کد اجرا کنم:

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

علاقه‌مند به امنیت، بازی و تفریح. ۳۳ سال زندگی کردم، دوست دارم ۲۷ سال دیگه هم زندگی کنم. دو پارادوکس بزرگ زندگیم اینه که رشته تحصیلیم لیزر و اپتیک هست،‌ ربطی به کارم نداره، اسمم هم یاشار هست اما ترک نیستم.
زندگی من به سه قسمت تقسیم میشه، قسمت اول کار روزانه من هست که مثل بقیه مردم میرم سر کار. قسمت دوم سعی در براورده کردن علایق کاری خودم، مثل همین وبلاگ. قسمت سوم هم خانواده، مسافرت و تفریح. تلاش می‌کنم توی قسمت دوم، باگ‌بانتی کار کنم،‌ هم درآمد خوبی داره هم هیجان خاص خودش رو. اون قسمت‌هایی از تکنیک‌ها و کشفیات در فرایند باگ‌بانتی رو سعی می‌کنم توی این وبلاگ قرار بدم.
  • به اشتراک بگذارید:
  1. علیرضا گفت:

    خیلی مطلب خوبی بود ممنون
    ی سوال چطوری ی مخزن مثل اینی که گفتید درست کنیم که اینجوری که میگید خودش، خودش رو بروز کنه و تارگت ها رو مرتب کنه و . . .
    خیلی ممنون از مطلب و بلاگ خوبتون

  2. AmirWhiteHat گفت:

    سلام ، عالی مثل همیشه 🙂

  3. mohamad yamini گفت:

    awli bood

  4. امین گفت:

    ایول

  5. میرطالبی گفت:

    ایول!
    اگر ویدیویی بود که دیگ محشر میشد

  6. Arman گفت:

    BUZZ !!!
    khobe age ro edit kardi 😀
    ۳۲ سال زندگی کردم
    che zood pir shodim
    :((

  7. feriviper گفت:

    خیلی باحال بود ،،،، دمت گرم بابا خفن !