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

12 سپتامبر 2022

سلام دوستان. امیدوارم که حالتون عالی باشه. یوسف هستم بیست سالمه و تقریبا شش ماهی هست که هانتینگ رو شروع کردم. امروز میخوام یک اسیب پذیری OTP Bypass که در یک وب‌سایت ایرانی خوب پیدا کردم و خودم خیلی از کشف این باگ لذت بردم با شما هم به اشتراک بزارم.

به دلیل اینکه از تیم فنی اجازه نگرفتم اسم برنامه رو test.com در نظر میگیرم.

شدت این آسیب‌پذیری خطرناک اعلام شده

امیدوارم که از این رایتاپ خوشتون بیاد.

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

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

برای اینکه ببینم وب سایتمون چطوری کار میکنه رفتم سراغ بخش ثبت نام روند ثبت‌نام در این وب‌سایت به این صورت بود که اول شماره تلفن از ما میخواست و بعد از اون هم کد OTP ارسال شده.

در صورتی که از قبل با این شماره ثبت نام کرده باشید شما رو به پروفایلتون ریدایرکت میکنه و درصورتی که هنوز داخل این وبسایت لاگین نکرده باشین صفحه ای رو میاره که بعد از اینکه نام و نام کاربری خودتون رو داخلش وارد کنین به پروفایلتون هدایت میکنه. و خب این یعنی فقط کافیه بتونیم که کد OTP این وبسایت رو دور بزنیم و وارد بشیم

چیزی که من در اکثر وبسایت ها برای Bypass کردن OTP دیده بودم یا هکر میتونست کد OTP رو وارد کنه و پاسخی که از سمت سرور برای وبسایت ارسال میشه رو دستکاری کنه و وارد بشه (درصورتی که احراز هویت بر اساس کوکی یا … باشه این روش جواب نمیده و باید بریم سراغ روش دوم)

یا هکر میتونست از طریق برپ‌سوئیت صفحه ای که OTP رو داخلش وارد میکنیم توی Intruder بندازه و انجام عملیات بروت‌فورس بکنه که در صورتی که وبسایتمون فایروال نداشته باشه کد درست رو برامون برمیگردونه و ما میتونیم از کد استفاده بکنیم (در صورت وجود فایروال به ما ارور ۴۲۹ که به منظور درخواست زیاد هست میده و اجازه ادامه نمیده)

ولی در این رایتاپ به روش دیگه ای OTP  رو دور میزنیم خب دیگه خیلی صحبت کردم بریم سراغ آسیب‌پذیری

برای تست OTP وبسایت من اول ثبت‌نام کردم فقط نکته‌ای که وجود داشت این بود که من دو تا اکانت ساختم

  • یکی با مرورگر کرومم که اکانت قربانی داخلش بود
  • یکی با مرورگر فایرفاکسم که اکانت هکر داخلش بود

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

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

در قسمت ورود شماره تلفن خودم (قربانی) رو وارد کردم -> https://www.test.com/account/Login، این ادرس urlای بود که من شماره تلفنم رو داخلش وارد کردم

بعد از اینکه شماره تلفنم رو وارد کردم یو ار ال من تغییر کرد:

https://www.test.com/account/LoginWithMobileCode?back=&mobileNo=09012345678&request_id=02017329

دیدم بله در ادامه شماره تلفن من که در URL دیده میشه یه پارامتر request_id هم دیده میشه چیزی که این وسط خیلی حواس من رو پرت کرد و وقت زیادی از من گرفت شماره تلفن خودم بود!!!!

بعد از اینکه شماره تلفنم رو وارد کردم دیدم که شماره تلفنم در دو جا داخل وب‌سایتم داره دیده میشه

به خاطر همین شماره تنها چیزی که به ذهنم خطور کرد این بود که برم و XSS رو تست کنم. کلی زمان از من گرفت ولی نتیجه نداد. رفتم ادامه کار گفتم خب بزار برم و پارامتر request_id رو دست کاریش کنم. هر چیزی که به ذهنم رسید رو تست کردم ولی نشد خیلی خسته شده بودم میخواستم برم سراغ جای دیگه غیر از این قسمت.

مقدار request_id رو پاک کردم و کد OTP صحیحم رو زدم در کمال ناباوری دیدم که گفت کد اشتباه است

چند بار دیگه تست کردم و به یه چیز خیلی جالب بر خوردم دیدم که کد OTP ما بر اساس پارامتر request_id صحت سنجی میشه

اینجا اگر شما باشین چه سناریویی به ذهنتون میاد؟؟؟

چیزی که زد به ذهن من.  من با خودم گفتم که اگر OTP  ما بر اساس request_id صحت سنجی میشه اگر بیایم و با یه request_id و کد OTP دیگه ورود بکنیم چه اتفاقی رخ میده؟

victim phone number (09012345678) ------>  id OTP victim  (victim id) ------> otp code victim ( victim OTP )

attacker phone number (09087654321) ------>  id OTP attacker (attacker id) ------> OTP code attacker (attacker OTP)

یعنی ما بیایم و id ،code رو جاهاشون رو عوض بکنی. به این صورت:

victim phone number (09012345678 ) ------>  id OTP victim  (attacker id) ------> OTP code victim (attacker OTP)

<p>attacker phone number (09087654321) ------>  id otp attacker (attacker id) ------> otp code attacker (attacker OTP)

خب بعد از اینکه همچین سناریویی زد به ذهنم رفتم برای تستش:

با مرورگر کرومم شماره هکر رو وارد کردم و با مرورگر فایرفاکسم شماره قربانی رو همزمان درخواست کد دادم کد ها ارسال شدند و من جای مقدار پارامتر request_id قربانی رو با مقدار پارامتر request_id هکر عوض کردم و در داخل تکست باکسم هم OTP هکر رو وارد کردم

و به این صورت تونستم وارد اکانت قربانی بشم یا   account takeover انجام بدم

میزان دسترسی یا تاثیر آسیب‌پذیری

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

از اطلاعات خود وب‌سایت هم میشه به این اشاره کرد که بعد از دسترسی به تمام فاکتور های فروش و نظرات ثبت شده توسط این کاربر میشه دسترسی داشت

مهم ترین بخش خطرناک بودن اسیب پذیری این هست که بعد از دسترسی به حساب میشه به کیف پول شخص دسترسی داشت و از اون استفاده کرد

امیدوارم که این رایت آپ و حرفا براتون مفید بوده باشه 🌹🙏

  • به اشتراک بگذارید:
  1. Mohammad Reza گفت:

    عالی بود یوسف جان
    موفق باشی:)

  2. جفر گفت:

    عالی بود
    فقط request_id قربانی رو چطور به دست میاری؟ اینجا حساب خودت بود و قابل دسترس!
    ممنون میشم این مورد رو هم مثل بالا خوب توضیح بدهید.
    با تشکر

    • yoosof_hwh گفت:

      فکر میکنم یه نکته ای رو جا انداختی

      بعد از اینکه ما شماره تلفن رو وارد میکردیم
      وب سایت به ما یه request_id میداد
      و کد OTP ارسال شده به شماره رو با اون request_id صحت سنجی میکرد

      عملا نیازی به دستکاری request_id قربانی نبود فقط تنها کاری که نیاز بود این بود که request_id خودمون رو به جاش بزنیم

      فکر میکنم اگر دوباره با دقت تر بخونی متوجه میشی
      دوباره بخون اگر سوالی بود در خدمتم ❤

  3. MR_NETWORK گفت:

    باريكلا👏

  4. MR_SINA000 گفت:

    عالی بود

  5. nima گفت:

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

    • yoosof_hwh گفت:

      ممنونم ازت ❤
      خیر جزو برنامه های بانتی نبود

      بهتر هست که برنامه های داخل پلتفرم های بانتی رو کار بکنی
      شاید درصد شکایت کم باشه ولی فایده ای نداره کار کردن روشون
      غیر از تمرین

  6. حسین گفت:

    خیلی عالی بود

  7. سید مجتبی گفت:

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

    • yoosof_hwh گفت:

      سلام ممنونم ازت نظر لطفته

      احساس میکنم متوجه نشدم منظورت رو

      چون ما اصلا نیاز نیست دست به شماره ها بزنیم فقط request_id و کد otp رو عوض میکردیم

  8. sijad گفت:

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

  9. Mr.tar گفت:

    عالی بود