به نام خدا. سلام حسین گلزاری هستم و این اولین آسیبپذیریی هست که تصمیم به انتشار رایتاپش رو دارم.
بدون مقدمه بریم سراغ اصل مطلب. رفتم روی یک برنامه داخلی و شروع کردم به تست کردن. معمولا اوایلش بخش لاگین و رجیستر رو تست میکنم تا ببینم سایت چقدر به امنیتش اهمیت داده. تست هایی مثل بایپس OTP و تست های مربوط به JWT و… بعد از اون میرم سراغ بخش پیمنت سایت و از بخش افزایش موجودی و سناریوهایی که برای تستش وجود داره شروع کردم. سناریو هایی مثل Race Condition و Double Spending و چند تا IDOR که تو ذهنم بود رو پیاده سازی کردم. توی قسمت افزایش موجودی در ابتدا باگ Race Condition رو تست کردم و آسیبپذیر نبود. طریقه تست کردنش هم با افزونه ی Turbo Intruder بعد از یک پرداخت موفق هست که با اسکریپت Race انجام میشه. بعد از این رفتم سراغ باگ دابل اسپندینگ و شروع کردم به تست کردنش.
تستی که برای دابل اسپندینگ انجام دادم این بود:
1000 تومن حسابم رو شارژ کردم و Callback بعد از پرداخت که به سمت برنامه ایرانی میرفت رو فرستادم توی Repeater که آسیبپذیری Double Spending رو تست کنم. در ادامه رفتم تو سایت و یه شارژ حساب جدید با مبلغ 1000 تومن ایجاد کردم و رفتم توی درگاه پرداخت و کنسل رو زدم و ResCode و مقدار Amount که 1000 بود رو برداشتم و گذاشتم تو Callback شارژ قبلیم که پرداخت موفق بود اما با ارور 500 مواجه شدم!
بعد از این تست چند تست مربوط به IDOR رو هم انجام دادم که هیچ کدوم موفقیت آمیز نبود. رفتم تو قسمت برداشت موجودی و شروع کردم به تست کردن باگ Race Condition و دیدم که بله باگ وجود داره اما معمولا سایت ها برداشت وجه رو بصورت دستی تایید میکنند و عملا زمانی که تراز حسابشون رو چک کنند میبینند که همچین مبلغی وجود نداره و برداشت وجه رو رد میکنن پس میشه گفت باگ درست و حسابیی نبود.
بخاطره زمان زیادی که صرف این برنامه کرده بودم دلم نمیخواست دست خالی ازش بیرون بیام، پس ناامید نشدم و دوباره رفتم بخش افزایش موجودی سایت رو بالا و پایین کردم، بوی یه باگی میومد و بخاطر همین همهی تستهایی که انجام داده بودم رو تکرار کردم اما این بار با دقت و تمرکز بیشتر.
سناریوی حمله
معمولا بین سایت هایی که با پرداخت سروکار دارند و درگاه پرداخت شاپرک، یه سایت واسط وجود داره که ارائه دهنده درگاه پرداخت هست، مثل زرینپال و زیبال و غیره. سایت ارائه دهنده درگاه پرداخت اینجا، سایت Payping.ir بود.
نحوهی پیدا کردن سایت واسط هم توی فلویی که پایین گذاشتم مشخص هست. زمانی که ما درخواست افزایش موجودی یا پرداخت انلاین رو میزنیم ابتدا درخواست ما از سایت اصلی میره به سمت سایت ارائه دهندهی درگاه پرداخت و بعد از اون میره به سمت درگاه پرداخت که معمولا شاپرک هست.
برای واضح تر شدن براتون فلوی چگونگی شارژ حساب و پرداخت رو قرار دادم:
برگردیم سراغ تست ها. حواسم رو بیشتر از قبل جمع کردم و با تمرکز، دوباره نشستم پای سایت این بار تصمیم گرفتم دابل اسپندینگ رو روی سایت واسط، یعنی سایت ارائه دهندهی درگاه پرداخت یا همون پی پینگ تست کنم دقیق تر بخوام بگم میشه تو عکس و تو مرحله ی شمارهی 5 که اطلاعات پرداخت موفق از درگاه پرداخت میره به سمت پیپینگ!
از مرحله ی اول شروع کردم و حسابم رو یک بار شارژ موفق کردم و ریکوئست حاوی اطلاعات رو که از درگاه میرفت به پیپینگ رو از هیستوری پیدا کردم و فرستادم به ریپیتر:
یه افزایش موجودی جدید ایجاد کردم و تا درگاه پرداخت رفتم و کنسل کردم اما این بار قبل از اینکه ریکوئست کنسلی از درگاه پرداخت بره به سمت پیپینگ نگهش داشتم و ResNum رو کپی کردم و به جای ResNum ریکوئست پرداخت موفق که توی ریپیتر داشتم قرار دادم و ارسالش کردم.
درخواست کنسلی:
جایگزینی ResNum با پرداخت موفق قبلی:
بعد از جایگزینی روی Follow Redirect زدم تا همهی مراحل پرداخت انجام بشه و Callback ای که باید به سمت سایت اصلی ارسال بشه. اینجا من به اشتباه عدد شارژ دومی که زده بودم ۱۰ هزارتومان و دیدم که بله حساب من تو سایت اصلی ۱۰ هزارتومان شارژ شده. نکته ی جالب این بود که در ریکوئست اولیه شارژ حساب هر مبلغی رو بزنی میتونی با این باگ اون مبلغ رو بیاری تو حسابت حتی اگر پرداخت موفقی که قبلا زده بودی هزار تومان باشه. با این حرکت من حسابم رو دو بار ۵۰ میلیون تومان شارژ کردم که این هم عکس پیامکی هست که برام ارسال شده:
هنوز مطمئن نبودم که این آسیبپذیری توی پیپینگ هست بخاطر همین رفتم توی سایت خودشون و ثبت نام کردم و خواستم که یک درگاه پرداختی بالا بیارم. یه سایت وردپرسی درست کردم و از افزونهی درگاه پرداختشون خواستم استفاده کنم که متوجه شدم نیاز به کد مالیاتی هست که من ندارم. با این حال ازشون خواستم حسابم رو به عنوان تست فعال کنند و اون ها هم اجازه دادن تا ۱۰ هزار تومن روزانه واریز کنم. دوباره مراحل رو پیاده سازی کردم اما دیدم باگ وجود نداره! برگشتم سر سایت اول و احتمال ۹۹ درصد میدادم که باگ از پیپینگ هست و شاید پیاده سازی درگاه پرداختشون برای سایت وردپرسی با سایت عادی متفاوته!
هنوز میشد گفت که دقیقا متوجه نشدم چه اتفاقی افتاده چون برای اولین بار بود که میبینم دابل اسپندینگ در این مرحله اتفاق میوفته. لپ تاپ رو خاموش کردم و رفتم برای استراحت چون اصلا دیگه نمیتونستم ادامه بدم.
پایان انتظار
فردای اون روز از سایت اصلی با من تماس گرفتن و گفتن حسابت رو ۱۰۰ میلیون شارژ کردی چه چیزی رو میخوای بخری؟ من هم اول جا خوردم و با گفتم شاید فکر میکنن بلکهت هستم و میخوام از این راه سوء استفاده بکنم و زودتر زنگ زدن تا جلوم رو بگیرن، به همین خاطر توضیح دادم که دارم سایتشون رو تست میکنم و واقعا این مبلغ رو شارژ نکردم و اونا به من گفتن که این مبلغ به حساب پنل پیپینگ اون ها واریز شده و اینجا بود که دیگه خوشحال شدم. میشد گفت صد درصد مطمئن شدم که باگ توی پیپینگ هست. با تیم پی پینگ ارتباط گرفتم و رفتم برای گزارش. تیم پیپینگ حرفهای برخورد کردند و تشکر کردن و گفتن که در حال حاضر باگ بانتی فعال ندارن اما با این حال این ریپورت رو مطابق بانتی تیبل اسنپ پرداخت میکنند. بعد از کمی مذاکره مبلغی بیشتر از مبلغ بانتی تیبل رو به من پرداخت کردند. آسیبپذیری همون روز بصورت کامل فیکس شد. من هم ازشون اجازه گرفتم تا اسم پلتفرمشون رو در این رایتاپ بیارم. همچنین اسم من رو در HOF پی پینگ قراردادن که این هفته منتشر میشه و لینکش رو توی توییترم میذارم.
این بود از اولین رایتاپ من. خوشحال میشم نظراتتون رو بخونم.
عالی بود دمتگرم
نظر لطفته❤️
عالی بود حسین جان :))
مرسی عزیز❤️
سلام بهت تبریک میگم و اینجا معلوم میشه که باید حس کاراگاهی داشته باشی تا به تست خودت ادامه بدی موفق باشی
سلام ممنونتم❤️
درود آقای گلزاری به جرعت یکی از بهترین رایتاپ هایی بود ک به شخص خوندمش مطمئنا آینده خیلی خیلی روشنی خواهی داشت…
درود. فدای شما❤️
لذت بردیم،به امید موفقیت های روز افزون🌹
ممنون همچنین🌹
حرف نداری پسر
🌹😘
خیلی خوب بود
🌹🙏🏻
ایول داری پسر. کارت خیلی درسته ادامه بده :))
چقدر صریح و زیبا
تبریک میگم. موفق باشی پسر
خیلی قشنگ باگ زدی حال کردم.
بسیار بسیار عالی بود . انشالله همیشه سربلند و موفق باشید در تمامی مراحل زندگی.
خیلی قشنگ و واضح گفتین. موفق باشید