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

16 اکتبر 2024

سلام امیدوارم حالتون خوب باشه. من مهدی هستم، ۲۴ سالمه و تقریبا یک ساله که مشغول هانتم و تو این رایتاپ قراره دوتا بخش فنی و غیرفنی داشته باشیم. بخش فنی مربوط به آسیب‌پذیری‌هایی که پیدا کردم و بخش غیرفنی خلاصه‌ای از تجربیات و نکاتی که بیشتر به درد هانترهای تازه‌کار مثل خودم می‌خوره.

بخش فنی:

تارگتی که انتخاب کرده بودم، یک تارگت پرایوت از هکروان بود. اسکوپ تارگت به صورت سینگل دومین بود و تنها می‌شد از نرو ریکان کمک گرفت. توئیتی زیبا در وصف نرو ریکان:

جذاب‌ترین بخش نروریکان برای خود من، کار کردن با وب‌اپلیکیشن و تست کردن تمامی فیچرهاش در نقش یک کاربر عادیه. این روش باعث می‌شه به شناخت خوبی از منطق وب‌اپلیکیشن برسیم که تقریبا یک هفته برای من زمان برد. یکی از کلیدی‌ترین فیچرهای تارگت این بود که می‌تونستی یک سری از پروایدرهای گیمینگ خودتو مثل اپیک گیمز، استیم و… به سایت وصل کنی و از خدمات و جایزه‌هایی که می‌ده تو بازی‌های خودت استفاده کنی. قسمت دیگه‌ای از تارگت مربوط به معرفی بازی‌ها می‌شد که یکی از بازی‌ها نظرم رو به خودش جلب کرد. بازی به این صورت بود که اگه اکانت استیم خودتو به تارگت وصل می‌کردی، یک کد تخفیف ۱۰۰ درصدی می‌داد و می‌تونستی بازی رو به صورت رایگان به اکانت استیم خودت اضافه کنی. ولی محدودیتی وجود داشت که باعث می‌شد هر کاربر فقط یک کد تخفیف به ازای یک اکانت استیم داشته باشه! سناریویی که به ذهنم رسید این بود که بتونم به ازای هر اکانت، تعداد زیادی از کدهای تخفیف‌ ۱۰۰ درصدی رو به دست بیارم. با کمی تحقیق متوجه شدم آسیب‌پذیری Race Condition می‌تونه منو به خواسته‌ام برسونه.

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

فلوی آسیب‌پذیری:
در مرحله اول و بعد از وصل کردن اکانت استیم، مانند کاربر عادی یک درخواست برای ایجاد کد تخفیف فرستادم که با این ریسپانس مواجه شدم که به معنی تولید کد بود:

بلافاصله درخواست دیگری فرستاده می‌شد تا آخرین وضعیت پروفایلم رو نشون بده که شامل کد تخفیف توی ریسپانس بود:

خب الان ایده اینه که چندین درخواست تولید کد تخفیف رو به صورت همزمان بفرستم تا کدهای زیادی برام تولید شه. از اکستنشن Turbo Intruder استفاده کردم تا بتونم با استفاده از اسکریپت‌هایی که داره، چندین درخواست همزمان بفرستم. این اکستنشن رو می‌تونین از اپ‌استور خود Burp Suite نصب کنین. اسکریپتی که ازش استفاده کردم این بود:

درخواست رو به Turbo Intruder فرستادم و بعد از انتخاب اسکریپت بالا، حمله رو انجام دادم و نتیجه مثبت بود! تمامی ریسپانس‌ها رو بررسی کردم و چندین ریسپانس با 204 Status Code دیدم که به معنی تولید شدن کد تخفیف بود.

اما اینجا یه مشکلی وجود داره! کدها کجاست؟!😐

وقتی صفحه‌ پروفایلمو رفرش می‌کردم، فقط یک کد نشون داده می‌شد و این به درد گزارش دادن نمی‌خورد. چون POC مناسبی نداشتم تا نشون بدم به کدهای تولید شده دسترسی دارم.

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

دوباره دست به کار شدم و تحقیق کردم. رسیدم به این اسکریپت که می‌تونی همزمان دو درخواست رو بذاری و ارسال کنی:

فقط کافی بود درخواست تولید کد رو توی req1 و درخواست آپدیت پروفایلم رو توی req2 بذارم و ارسال کنم.
حمله رو انجام دادم و نتیجه دقیقا چیزی بود که انتظار داشتم:

همونطور که تو عکس می‌بینین، ریسپانس درخواست اول (204) که به معنی تولید شدن کد تخفیفه، با موفقیت انجام شده و بعد از اون ریسپانس درخواست دوم (200) که شامل کد تخفیفه، دریافت شده. تمامی ریسپانس‌هایی که شامل کد بود رو چک کردم و ۶ تا کد تخفیف متفاوت به دست آوردم. حالا با استفاده از این آسیب‌پذیری می‌تونیم بیشتر از یک کد تخفیف ۱۰۰ درصدی به دست بیاریم و بازی که قیمتش ۵ یورو بود رو چندین بار به صورت رایگان به اکانت‌های استیم مختلف خودمون اضافه کنیم.🙂 گزارش رو ارسال کردم و Medium در نظر گرفتن که بابتش 600 دلار بانتی دادن.

 یک آسیب‌پذیری دیگه‌ای هم از همین تارگت وجود داشت که مربوط به وصل کردن پروایدر استیم به اکانت خودمون بود.
خلاصه‌ی آسیب‌پذیری دوم به این صورته که کل فرایند با یک توکن انجام می‌شد و بعد از دیسکانکت کردن استیم از تارگت، دوباره با فرستادن توکن قبلی می‌تونستم اکانت استیم رو بدون نیاز به اجازه‌ی دسترسی از طرف استیم، به تارگت وصل کنم. بابت این آسیب‌پذیری هم ۲۰۰ دلار بانتی در نظر گرفتند که درمجموع مقدار بانتی‌هام از ۱۰۰۰ دلار عبور کرد.

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

بخش غیرفنی:

تو بخش غیرفنی در مورد چالش‌ها و تجربه‌های خودم تو این مسیر می‌گم که مخاطبم اکثرا هانترهای تازه‌ کار مثل خودمه. من هانتم رو با ثبت‌نام تو کلاس یاشار شروع کردم و اون موقع با دانش صفر وارد کلاس شدم. تمام تمرکز و هدف من تو کلاس، یادگیری و درک مطالب بود. اما به دلیل حجم بالای مطالب، یاد گرفتنشون تو مدت زمان ۶ ماه کار سختی برای من بود و همین باعث شد که در طول کلاس حتی یک باگ VDP هم نتونم پیدا کنم و خب طبیعتا این مورد باعث ناامیدی می‌شه. ☹️

بعد از تموم شدن دوره هانت، حدود ۳ ماه زمان برد تا خودم از اول تمامی مطالب رو با روش درست، مطالعه و نکته برداری کنم و این بار مطالب یک نظم خوب و منطقی تو مغزم به خودش گرفته بود و حالا اعتماد به نفس هانت کردن رو پیدا کرده بودم.
یک تارگت واید VDP از هکروان انتخاب کردم و یک ماه روش زمان گذاشتم و نتیجه شد ۴ تا باگ که دوتاش تریاژ شد. وقتی سطح دانش خودم رو با وضعیتی که تو کلاس داشتم مقایسه می‌کردم، اعتماد به نفسم بالاتر می‌رفت و تصمیم گرفتم رو اولین تارگت RDP کار کنم.
یک تارگت از هکروان انتخاب کردم و واقعا هنوزم نمی‌دونم با چه تفکری اون موقع همچین تارگت غولی رو برای هانت کردن انتخاب کرده بودم! ولی به قول یاشار، تو زمان مناسب و جای درست بودم که باعث شد بعد از گوگل دورکی که انجام دادم، به یک ساب‌دومینی برسم که یکی از پارامترهاش Open Redirect می‌خورد. همین پارامتر رو روی ساب‌های دیگه‌ای از تارگت هم تست کردم و یه جای دیگه هم می‌خورد که باعث شد در مجموع ۳۰۰ دلار بانتی بدن. 🙂
اشتباه من از همین نقطه شروع می‌شه! بعد از گرفتن امتیاز خوب و بانتی از هکروان، پروگرم‌های زیادی اینوایت فرستادند و من متاسفانه تارگتی رو انتخاب کردم که خیلی بالاتر از سطح دانش فنی خودم بود. همین اشتباه باعث شد زمان زیادی رو (تقریبا ۲ ماه) بدون نتیجه سپری کنم و باز هم ناامیدی به سراغم بیاد.

بعد از یک ماه استراحت و سردرگمی، تصمیم گرفتم دوباره هانت کنم ولی این‌بار حساب شده و منطقی. چالشی که برای خودم گذاشتم این بود که 3 ماه تابستون رو مشغول هانت بشم.

ماه اول قرار بود به صورت تمرینی روی تارگت VDP کار کنم و همین باعث شد بتونم متودولوژی خودم رو پیدا کنم و مایندست منظمی داشته باشم. نتیجه شد ۸ تا گزارش که ۴ تاش تریاژ شد. این بار با دید منطقی ۳ تا از پروگرم‌هایی که اینوایت فرستاده بودن رو انتخاب کردم و ۲ ماه آخر رو مشغول هانت شدم.
متودولوژی که داشتم این بود که در ابتدا دقیقا مانند یک کاربر عادی با وب‌اپلیکیشن کار کنم تا به درکی از منطق پشتش برسم و هرجا که پتانسیل کار کردن رو داشت انتخاب کنم تا بعدا روش زمان بذارم.
تصمیم گرفتم کلی ریپورت از هکروان بخونم تا بتونم تست‌کیس‌های زیادی برای هانت داشته باشم. این کار خیلی دید بهتر و بازتری به من داد و باعث شد به مرور زمان متودولوژی خودم رو آپدیت کنم.
تو این 2 ماه، 11 تا باگ گزارش دادم ولی متاسفانه همشون Duplicate و Informative شدن. یکی از دلایلش این بود که گزارش‌هام توضیحات مناسب و کافی از Impact باگ مورد نظر نداشت. ریپورت خوب و حرفه‌ای دادن رو جدی بگیرید.
بیخیال نشدم و همچنان زمان گذاشتم تا اینکه بالاخره موفق شدم دوتا آسیب‌پذیری پیدا کنم که در مجموع ۸۰۰ دلار بانتی دادن (تو بخش فنی می‌تونین بخونین) و مقدار بانتی‌هام از ۱۰۰۰ دلار عبور کرد.

خلاصه ای از نکات رو این زیر بهش اشاره می کنم:

  • اگه دقت کرده باشین، مسیر پر از فراز و نشیبه و هیچ خط صعودی صافی برای پیشرفت وجود نداره. اینو تو تجربیات هانترهای زیادی دیده بودم و دقیقا برای خود من هم اتفاق افتاد.
  • اگه تازه شروع به کار کردین، ابتدا از تارگت VDP شروع کنین که باعث میشه قدم به قدم هم دانشتون و هم سطح فنی ریپورت‌هاتون بالاتر بره.
  • تا جایی که می‌تونین ریپورت هانترهای مختلف رو بخونین. خیلی دید بهتری بهتون می‌ده.
  • تارگت مناسب با سطح دانش خودتون انتخاب کنین.
  • به دنبال پیدا کردن یک مدل آسیب‌پذیری خاص نباشین و مثل یک کاربر عادی با سایت رفتار کنین. بعد از فهمیدن منطق تارگت، باگ‌ها خودشون رو نشون می‌دن.
  • یک زمانی رو هم برای افزایش سطح دانش خودتون در نظر بگیرید. مثل خوندن رایتاپ‌ها و توئیت‌های هانترهای دیگه یا خوندن کتاب و دیدن یک سری محتوای آموزشی از یوتوب.
  • خودتون رو فقط با خودتون مقایسه کنین. در مورد خودم اگه بخوام مثال بزنم، در مقایسه با هانترای دیگه واقعا جایگاهی ندارم و هنوز کلی راه تا موفقیت مونده… ولی اگه فقط یک قدم از روز قبل خودتون جلوتر باشین، به مرور نتیجه مثبت رو می‌بینین.🙂
  • تمرکز اصلی‌تون روی افزایش مهارت هانت و آپدیت کردن متودولوژی‌تون باشه ، نه صرفا رسیدن به بانتی! اگه هدف فقط بانتی باشه شاید تو کوتاه مدت نتیجه بگیرید ولی بعد یه مدت همه چی خسته‌کننده به نظر می‌رسه.
  • در آخر اینکه، از دست دادن امید و انرژی یک اتفاق اجتناب ناپذیره. مدیریتش کنین تا بهتون آسیب نزنه.

ممنون از اینکه این رایتاپ رو خوندین و امیدوارم ایده‌ی خوبی از نکات و تجربیاتی که گفتم بگیرید. موفق باشید.❤️

1 پست نوشته شده
در حال یادگیری...
  • به اشتراک بگذارید:
  1. Rawchi گفت:

    مرسی این تجربه‌هات بهم خیلی کمک می‌کنه

  2. سیاوش گفت:

    عالی بود، دمت گرم و اینکه امیدوارم موفقیتت تداوم داشته باشه… مهم تر از بخش فنی که گفتی بهش غیر فنی بود و اینکه چه مدلی عمل کردی که بلاخره راهت رو پیدا کردی، برای منی که اول راهم عالی بود مرسی

  3. حسین گفت:

    مهدی جان بخش غیر فنی رو‌ که نوشته بودی خیلی دوست داشتم عالی بود.
    انشاله تو‌مسیر پیش و رو حسابی بدرخشی