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

19 مارس 2020

خب این پست رو خیلی وقت بود تصمیم گرفته بودم بگذارم،‌ دیگه موکول شد به شب عید. چند وقت پیش با همکاری یکی از دوستان گرامی، یک آسیب‌پذیری روی سامانه https://my.tehran.ir کشف شد که با استفاده از اون میشد یک حساب دلخواه رو بینهایت شارژ کرد. نکته جالب قضیه این هست که این الگو روی چندین شرکت بنام هم تست شد و متاسفانه آسیب‌پذیر بودن.

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

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

  1. مرحله اول جایی هست که کاربر بعد از اینکه کالا مورد نظرش رو توی فروشگاه آنلاین انتخاب کرد، روی دکمه پرداخت کلیک می‌کنه
  2. اینجا فروشگاه و PSP در یک کانال مخفی از دید کاربر، اطلاعاتی رو رد و بدل می‌کنند، نتیجه اخذ یک Reservation number یا ResNum هست. توی این قسمت، بعضی PSPها پیاده‌سازی متفاوتی رو ارائه می‌دن، برای مثال کل فرایند رو Tokenized می‌کنند
  3. توی این قسمت، کاربر اطلاعات رو که شامل مبلغ پرداخت، ResNum و آدرس بازگشتی و موارد اینچنینی هست رو دریافت می‌کنه. معمولا یک فرم HTML با روش POST در این قسمت وجود داره که کاربر رو به سمت درگاه پرداخت هدایت می‌کنه
  4. کاربر با اطلاعات کسب شده در مرحله سوم، به سمت درگاه پرداخت میره
  5. در جواب، در صورت عدم وجود خطا، نشست کاربر به‌روز می‌شه و یه قطعه کد جاوااسکریپت یا HTML کاربر رو مجبور به ارسال یک درخواست GET میکنه
  6. کاربر درخواست GET رو می‌فرسته، توجه کنیم که نمی‌تونست از اول GET بفرسته و باید مرحله قبلی طی میشد و نشست به‌روز میشده
  7. در صورتی که مشکلی نباشه، صفحه پرداخت ظاهر میشه
  8. کاربر اطلاعات کارت رو وارد می‌کنه و دکمه پرداخت رو می‌زنه
  9. در صورت درست بودن اطلاعات، یک Reference Number یا RefNum تولید میشه که فارسیش میشه «رسید دیجیتال» که به منزله پرداخت موفق است. توی این مرحله باز کاربر توسط یک تکه کد جاوااسکریپت یا HTML به سمت آدرس بازگشتی میشه. این آدرس توی مرحله ۳ توسط خود کاربر ارسال شده. از مواردی که کاربر با خودش به فروشگاه می‌برده، ResNum و RefNum و موارد دیگر مشابه هست
  10. توی این قسمت کاربر روی دکمه «تکمیل فرآیند خرید» کلیک می‌گنه و اطلاعات رو به فروشگاه می‌فرسته (این قسمت به‌صورت خودکار انجام میشه)
  11. فروشگاه توی این مرحله صحت RefNum و ResNum رو با PSP بررسی می‌کنه (البته قبل از بررسی با PSP، خود فروشگاه بررسی‌های اولیه رو توی این قسمت انجام میده)
  12. در صورت موفقیت، پایگاه‌داده فروشگاه به‌روزرسانی می‌شده و پیغام خرید موفق به کاربر نشون داده میشه

البته این جریان کاری، با کمی تغییر در PSPهای مختلف داره کار می‌کنه، توی درخواست‌های ۱، ۴ و ۱۰ کاربر می‌تونه توی جریان کاری دخالت کنه. آسیب‌پذیری کشف شده هم دقیقا توی مرحله 11 اتفاق می‌یفته. خب هر سوالی داشتید توی کامنت‌ها و یا توی توئیتر در خدمت هستم، اینم از فیلم:

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

    آقا یاشار شما خیلی خوبی

  2. رهگذر گفت:

    خیلی عالی بود واقعا ممنون از محبتی که کردید و به اشتراک گذاشتید

  3. Rework گفت:

    خایمالی لو میدی؟! یا دنبال چس مثقال بانتی که بهت میدن تازه اگ بدن!

  4. ارتین گفت:

    تشکر از آموزشتون
    میشه همه تست کیس های بحث پرداخت رو هم معرفی کنید

  5. عالی بود
    خیلی استفاده کردم.

  6. LOTAOK گفت:

    بانتتو ک گرفتی چرا آموزششو گذاشتی همینجوری برداشتی آموزششو گذاشتی برای هر جا مشکل بیش بیاد شما مقصری این باگ مربوط به شا\رک و درگاه سامانه ک resnum تولید میکنه اینجا هم فقط دولوبرا نیستن سو استفاده گر ها هم هستن بس این بست آموزشی مخرب رو حذف کن عوض این ها راه حل اینم میذاشتی چرا مثلا درگاه آب و ملت ندارن این باگو

    • یاشار شاهین‌زاده گفت:

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

    • یه سو استفاده گر گفت:

      ما سواستفاده گرا خودمون حدود ۱۰ تا متودولوژی داریم برا سو استفاده منتظر رایت آپ بقیه ننشسیم عزیزم
      این روش هم یکی از اون ۱۰ تا روشی بود که برا بایپس استفاده میکنیم

  7. […] کاری بسیار خلاصه شده، نسخه کامل‌تر اون رو می‌تونید در این پست (شارژ نامحدود حساب mytehran.ir) مطالعه […]

  8. mkok گفت:

    یسریا چقدر بی‌شعورانه برخورد کردن تو کامنتا! عجیبه.. خسته نباشی واقعا آقا یاشار و انصافا که دستمریزاد به این میزان مهارت و صبوریت!

  9. محمد امین غفوری گفت:

    سلام اقا یاشار خسته نباشی
    من از طریق کانال وب آموز باهاتون اشنا شدم
    و این مقاله رو خوندم و خوشم اومد فقط دو جا غلط املایی دیدم گفتم که بهتون بگم
    این دو تا رو من دیدم
    «تکمیل فرآیند خرید» کلیک می‌نه ===> کلیک می کنه
    مختثر======> مختصر
    شاد و موفق باشید

  10. بهنام گفت:

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

  11. مهری گفت:

    سلام خسته نباشید عالی بود / الان باگ از شهرداری یا از طرف درگاه / ممنون میشم جواب بدین

  12. 3Pehr گفت:

    سلام. خیلی ممنون که دانشتون رو به اشتراک قرار میدیدن. و یه سوالی داشتم این که چقدر براش بانتی دادن. من همین آسیب پذیری رو توی یه سایت دیگه پیداکردم چقدر باید بابت بانتی درخواست کنم؟ (میدونم بستگی به سایتش و رتبه ش داره؛ ولی میخوام قیمت حدودیش رو بدونم که بعد گزارش حسرتشو نخورم که ای کاش بیشتر میگفتم:| )

  13. احمد گفت:

    سلام
    ببخشید الان سامانه شاپرک یا درگاه اسیب پذیره یا اینکه مشکل از طرف سایته؟ یعنی msiconfig هست؟