لا نِعْمَةَ اَهْنَاءُ مِنَ الاَْمْنِ
هيچ نعمتى گواراتر از امنيت نيست
امام علی (ع)
تیم امنیتی درسا
@dorsateam
چند وقتی بود با سایت ویرگول آشنا شده بودم دوست داشتم یه بررسی امنیتی روش انجام بدم متوجه شدم با فریمورک امن و قوی Laravel درست شده در نظر اول فکر نمیکردم آسیب پذیری داشته باشد اما بعد از کلی کند و کاو توانستم آسیب پذیری XSS Stored از سایت ویرگول virgool.io کشف کنم که خیلی هم خوشحال شدم به تیم ویرگول ایمیل زدم در پاسخ تشکر کردن و با کسب اجازه تیم ویرگول این مطلب رو انتشار دادم. با خواندن این مقاله میتوانید یه روش دیگر برای کشف آسیب پذیری پیدا کنید . راستی یه کانال تلگرام هم دارم که یکسری مطلب آموزشی داخلش میزارم دوست داشتید عضو شوید.
کانال من @dorsateam
سناریوی پیدا کردن باگ :
اگر داخل سایت ویرگول ثبت نام کنید میتوانید نوشته های خودتان را انتشار بدید من رفتم یک نوشته بنویسم گفتم اگر بتونم در این قسمت کد JavaScript تزریق کنم چون تو دیتابیس ذخیره میشه اگر کاربر وارد صفحه مقاله بشه کد js اجرا میشه بعد خوب تمام اما به همین راحتی نبود با ویرایشگری که قرار داده بودند نتونستم چیزی تزریق کنم اما یه قسمتی داشت که می توانستید آدرس یک مدیا را از سایت دیگری تو صفحه درج کنید.
من آدرس خود سایت ویرگول رو درج کردم دیدم توی صفحه یک قسمتی اضافه شد. خوب به تصاویر پایین دقت کنید.
من سوالی که برایم پیش آمد : این متن های که در صفحه اضافه شد از کجا آمده! رفتم داخل سایت یه view page source از سایت ویرگول گرفتم . meta تگ های که در صفحه بود نظرم رو جلب کرد دیدم یکسری تگ که برای The Open Graph protocol و برای شبکه های اجتماعی فیسبوک و غیره کاربرد دارد. که محتوای داخل این تگ ها را در صفحه اضافه میکند.
اگر به تصویر بالا نگاه کنید متوجه میشوید. خوب فکری به ذهنم خورد گفتم اگر داخل این تگ ها من کد HTML یا JavaScript بنویسم چه اتفاقی رخ میده . خوب برای پیاده سازی این ایده رفتم یک سایت که فضای رایگان html میدهد رو تو گوگل پیدا کردم و یک حساب کاربری ایجاد کردم و شروع به ساختن یک صفحه html کردم و کدهای مد نظر رو به شکل زیر تو صفحه html ذخیره کردم .
من در تگ های متا گفتم هرکدام یک تگ h1 را با محتوای قرار دادم که ببینیم کدام تگ و محتوا کجای صفحه ویرگول تزریق میشه.
همانطور که در تصاویر بالا دیدید تگ های h1 و h4 از نظر محتوا تو صفحه تزریق شدند .
بریم تو صفحه ی پیش نمایش دنبال کد تزریق شده بگردیم ببینیم چه خبر هست !
من روی صفحه پیش نویس یک F12 میزنم تا صفحه developer tools باز بشود بعد تگ h1 را انتخاب میکنم و بعد گزینه Edit as HTML رو میزنم ببنیم تو خروجی چه چیزی هست .
همانطور که در تصویر بالا می بینید تگ های h1 من بدون هیچ گونه فیلتری توی صفحه درج شد خوب اگر من تو صفحه html خودم تگ a با کد جاوا اسکریپت تزریق کنم چه اتفاقی می افتد بیاید با هم تست کنیم .
خوب در تصویر بالا اگر نگاه کنید من یک صفحه دوم ساختم بخاطر اینکه ویرگول سیستم Caching داشت و زمانی که شما یک لینک رو قبلا اضافه میکنید دفعه بعد از سیستم Caching خودش لود میکنه پس تغییرات در صفحه اول اعمال نمی شود من تو کد payload خودم یک تگ a ایجاد کردم که کاربر با کلیک کردن روی لینک کد جاوا اسکریپت من اجرا میشود .
همانطور که در تصویر زیر مشاهده میکنید با کلیک کردن روی لینک کد alert ما اجرا شد .
البته کد های دیگری هم میتوانستیم تزریق کنیم که کارهای دیگری انجام بده اما هدف تشریح آسیب پذیری بود .
امیدوارم از این آموزش لذت برده باشید .
موفق باشید.