سلام رفقا، آرمان هستم و قراره در این مقاله به چندتا آسیبپذیری روی بخش خرید محصولات بپردازیم. به صورت کلی لاجیک هر سایت روی بخش خرید بسته به نوع محصولشون متفاوت هست. توی این مقاله چند مدل از رایج ترین آسیبپذیری هارو بررسی کردیم.
خرید رایگان دوره های پولی سبزلرن – بررسی تمام اندپوینت های خرید
توی سایتهای آموزشی به طوری معمول دو مدل دوره وجود داره، یا به صورت رایگان در دسترس عموم قرار داره یا برای دسترسی به محتوای دوره باید هزینه ای رو پرداخت کنید. توی برخی سایتها ویدیو های دورههای رایگان از اول ثبت نام در دسترس هست ولی توی برخی دیگ باید دوره رو به سبد خرید اضافه کنید، وارد مرحله پرداخت بشید و اونجا هزینه دوره رایگان خورده و تایید رو که میزنید، به اصطلاح شاگرد دوره میشید. سایت سبزلرن از فلو دوم برای دسترسی به دورههای رایگاناش استفاده میکرد. بزارید یک دید کلی از روند ریکوئستهای سایت بهتون بدم:
این درخواستها در حالتی بود که دوره ما پولی بود و باید به درگاه ریدایرکت میشدیم تا هزینهای رو پرداخت کنیم، اما اگر دوره ما رایگان بود بعد از گرفتن ریسپانس اول از سبزلرن مقادیر رو توی درخواست checkout/order-pay جایگزین میکرد و به ما دسترسی مستقیم به دوره رو میداد. منطقا تا به الان باید آسیبپذیری رو پیدا کرده باشین، اکسپلویت هکر به صورت زیره:
زمان کلیک روی ثبت سفارش یک درخواست POST به سبزلرن زده میشه تا توکن درگاه پرداخت و ایدی سفارش رو بگیره، در این مرحله کاربر به درگاه پرداخت ریدایرکت میشه. هکر در ریزالت درخواست اول توکن درگاه و ایدی سفارش را به دست میاره، در مرحله بعد در درخواست زیر جایگزین میکنه:
GET /checkout/order-received/[order_id]/?key=[Pay_Token] HTTP/2
Host: sabzlearn.ir
Cookie:xxxx
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:103.0) Gecko/20100101 Firefox/103.0
زمانی که این درخواست ارسال شه، سایت فرض رو بر این میگیره که پرداخت به درستی انجام شده و دسترسی دوره رو به کاربر میده.
انصراف از درگاه پرداخت ولی با خریدی موفقیتآمیز
زمانی که یک خریدی رو انجام میدیم، یک درخواست از سایت برای گرفتن استعلام زده میشه و به ما میگه که خرید موفقیت بود یا نه!؟ حالا گاهی این درخواست آسیبپذیر میشه و به ما این اجازه رو میده که اون استعلام رو جعل کنیم و خرید ناموفق رو موفق کنیم. معمولا انجام یک خرید موفقیت امیز و بررسی اون با درخواست یک خرید ناموفق ما رو به چیزای جالبی میرسونه، متاسفانه امکان پابلیک کردن کامل Exploit و PoC نیست چون سایت آسیب پذیر براش مهم نبود که پچ بشه 🙂
اما میشه روی فلو سبزلرن بهتون نشون بدم که کدوم پارامتر چجوری آسیبپذیر بود، توی ویدیو هم بهش اشاره کردم.
زمانی که وارد درگاه پرداخت میشدیم، انصراف رو میزدیم و پرداختمون Failed میشد. یک درخواست GET زده میشد، به صورت زیر:
GET /shop/finish?transaction_id=167179834875&_token=DlCQZdNfZB1Bnnntxmzy7KetsHaXbseA9v9cXB4J&Authority=A00000000000000000000000000397187594&Status=NOK HTTP/1.1
Host: domain.tld
Cookie:xxxx
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:103.0) Gecko/20100101 Firefox/103.0
برای اینکه جعل کنید وضعیت پرداخت رو فقط کافی بود پارامتر Status رو مقدارش رو به OK تغییر بدین و به راحتی تایم مد نظر براتون رزرو میشد.
خرید یک دهم جنس از روژا شاپ – Parameter Tampering
آسیبپذیری Parameter Tampering یکی از اون دسته باگ های فروشگاهی رایج هستش که به هکر اجازه میده ی محصول رو زیر قیمت بازار بخره:) این آسیبپذیری توی بخش اضافه کردن محصول به سبد خرید یا اپدیت کردن مقدار محصول در سبد خرید اتفاق می افته، برای اکسپلویت این آسیبپذیری فقط کافیه روی درخواست هایی که تعداد محصول توش هست بیایید و مقدارش رو اعشاری کنید مثل 0.1؛ توی این حالت قیمت محصول که فرضا هزار تومن هست در تعدادش که 0.1 هست ضرب میشه و هزینه کل میشه صد تومن خداوکیلی. روژا شاپ این آسیبپذیری رو داشت و بعد گزارش سریع پچ شد اما سفارش من هنوز توی حسابم هست😂
آسیبپذیری Race Condition توی کد تخفیف
توی مموریلیکس یک رایت اپ خوب و جامع راجب این آسیبپذیری هست، و من فقط میخوام بهش به عنوان یکی دیگ از راه های دور زدن پرداخت اشاره کنم. که توی کد های تخفیف ممکنه این آسیبپذیری وجود داشته باشه و یک کد چندبار روی محصول بشینه و قیمت محصول رو کاهش بده.
خیلی ممنون منو تا اینجا همراهی کردین، امیدوارم که این مقاله براتون مفید بوده باشه، همیشه راههای دیگهای هم هست برای دور زدن پرداخت، من اینجا به چهارتا از رایجترینهاش اشاره کردم. اگر دوست داشتین خوشحال میشم شما رو همراه خودم توی سوشالهای دیگ داشته باشم 3>
عالی بود
این آسیب پذیری Business Logic محسوب میشه؟
خیلی ممنون 🔥
اره به نوعی میشه جز این دسته بندی هم قرارش بدیم.
دمت گرم آرمان جان
واقعا رایتاپ جالب و مفیدی بود🔥
ممنون از لطفت ❤️
خوشحالم که مفید بود🔥
دمت گرم
عالی بود
سلام وقت بخیر
رایت آپ بسیار غنی ای بود
یه داستانی که واسه درگاه پرداخت هست نتیجه پرداخت باید از سرور درگاه پرداخت به سایت فروشنده ارسال بشه که کاربر نتونه توی ریسپانس دست بیره
کلا تو اموزشت هم که توسایت سبزلرن هست اینو توضیح دادی ولی سایتایی که این مشکل داشته باشن کم پیدا میشه
عالی بود.
roja شاپ بد اکسپلویت کردی واست نفرستادن یه سال پیش من زدمش خیلی تمیز تر زدم =)
ممنون آرمان جان
این نوع باگ های مربوط به پرداخت، همیشه بحرانی دسته بندی میشه ؟
و باید بیشترین بانتی درج شده در برنامه به هانتر داده بشه ؟
در ضمن، لطفا کامنت های توییتر رو اگه وقت داشتی چک کن
استاد یک اسیب پذیری دیگم هست اونم اینه یک پرداختو چنبار ثبت کنیم مثل پستی که اقا یاشار ب ا سامانه مای تهران گزاشتن اونم توی دسته بندی این اسیب چذیری ها قرار میگیره?
عالی بود
flow رو خیلی سایت های دیگه استفاده میکنن که کمی قابل تامل هست، زیبا و مفید 👏🏻👏🏻👏🏻
سلام واقعا خوشم اومد ممنون