حمید رضا محسنیان
حمید رضا محسنیان
خواندن ۳ دقیقه·۲ سال پیش

آسیب پذیری در آپارات ( مجبور کردن دیگران به انجام عملیات با لینک )

⁹aparat image
⁹aparat image

مقدمه

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

نکته

قبل از خوندن ادامه این مشکل توی این ویدیو تصویری نشون دادم.


چی شد که اینجوری شد

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

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

https://www.aparat.com/api/fa/v1/user/follow/follow/userid/1495181/type/true/tty/1239294930/hash/c8225cf05dd05acb1d953edbb9512aaabea63256

این درخواستی هست که ما برای فالو کردن داریم و توی موارد دیگه مثل ( لایک،فالو،آنفالو،کامنت و ...) این ساختار یکی هستش اما یکم بررسیش کنیم

  • userid ( شناسه کسی که قراره فالو بشه )
  • tty ( تاریخ فعلی به صورت تایم استمپ)
  • hash ( هش رندوم ایجاد شده)

اول اومدم یه درخواست ایجاد کردم و مقدار user_id رو تغییر دادم ببینم که میشه یه یوزر دیگه رو فالو کرد یا این درخواست مخصوص این user_id هست و متوجه شدم هر تغییر که توی این URL صورت بگیره ( 403 ) میده.

403 aparat
403 aparat

پس در نتیجه این روش جواب نداد ولی خب اگر درخواست که به صورت GET هست رو اجرا کنی به ما نتیجه درخواست رو میده

و اومدم چندین بار اجراش کردم دیدم با اینکه tty از زمانش گذشته هنوز داره کار میکنه و گفتم خب حتما با یه درخواست جدید این Expire میشه پس اومدم یه درخواست فالوی جدید زدم دیدم هر کدوم مجزا دارن کار میکنن و Expire و ابطالی صورت نمیگیره گفتم عجب ! ( البته بعد از یه زمان رندومی مثل 30 دقیقه باطل میشد)

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


بگذریم حالا مشکل کجاست ؟

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

پس یعنی من چنل x رو فالو میکنم و لینک درخواست رو میدم به دوستم و زمانی که بازش کنه کانالی که من خواستم فالو میشه (:

پس کد PHP برای پنل شد این با لاگینی که قبلا نوشتم یوزرا لاگین میشدن و کوکیشون رو ذخیره میکردم و درخواست ماهم که چک نمیشد

$cookieJar = CookieJar::fromArray([
'AuthV1' => $user['cookie']
], 'aparat.com');
$client->request('GET', &quothttps://www.aparat.com/api/fa/v1/user/follow/follow/userid/1495181/type/true/tty/1239294930/hash/c8225cf05dd05acb1d953edbb9512aaabea63256&quot, ['cookies' => $cookieJar]);

و نتیجه نزدیک 1000 فالو توی کمتر از 1 دقیقه

و پنل ما آماده شده برای خدمات دهی با سرعت عالی این روی local بود اما گفتم خب آسیب پذیری که مشخصه حالا نوبت POC میرسه برای بهره برداری و ما محدودیت ارسال درخواست و همچنین مکانیزم های مختلف داریم پس ریدایرکت کردن بهترین راهه و بازکردن پاپ آپ ( پاپ اپ در اکثر موارد نیاز به اجاره دادن داره پس بازم مناسب نیست) ونتیجه بدک نبود ولی بیشتر بدرد موبایل میخورد


امیدوارم بدردتون خورده باشه و لذت برده باشید زمانی که این پست منتشر شده گزارش و رفع شده ):

https://www.aparat.com/api/fa/v1/user/follow/follow/sender_id/9258062/userid/13280/type/true/tty/1659539861/hash/751e0c5b18838c728568b06ba503e519f9bc1123f

Instagram
Github

آپاراتهکبرنامه نویسیجاوا اسکریپتباگ
علاقه مند به یادگیری و یاد دادن
شاید از این پست‌ها خوشتان بیاید