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

28 مارس 2021

خب بزارین از اینجا شروع کنم که حتما یادتونه درباره اطلاعات افشا شده 42 میلیون کاربر ایرانی تلگرام و با اون ماجراهاش که تو همین مموری‌لیکس هم دربارش بحث شده بود. از اونجا که دیتابیس این اطلاعات تا حدودی اوپن شده و یه سری افراد برای استفاده از این دیتابیس اومدن ربات شماره یاب نوشتن مثل همون سامانه شکار و…. خب بعد از برسی هایی که انجام دادم حدود 90 درصد این ربات های شماره یاب نسبت به باگ SQL Injection آسیب‌پذیر هستند.

کمی در مورد ربات‌های تلگرام

ربات تلگرام، یک شخصیتِ ـ نه‌چندان ـ حقیقی در تلگرام است که به جای آدمیزاد، یک نرم‌افزار پشت آن نشسته و بر مبنای پیام‌هایی که به او ارسال می‌کنید، پاسخ‌هایی می‌دهد. ربات‌های جدید تلگرام، یک پسوند bot پشت اسم اکانتشان دارند. ربات‌های تلگرام، ربات‌هایی هستند که برخی خدمات را به صورت خودکار برای مخاطب به ازای ارسال درخواست فراهم می‌کنند. ربات تلگرام مانند یک حساب کاربری می تواند رابطه ۲ طرفه با مخاطب داشته باشد و به پیام‌ها و دستورات مختلف کاربر در هر ساعت و روزی دریافت کرده و به آنها پاسخ دهد. شما می توانید در ربات خود دستورات مختلفی مشخص کنید و برای هر کدام جواب مناسب را تعیین نمایید. هزینه ساخت یک ربات نسبت به سایت کمتر است و چون روی تلگرام قرار دارد دسترسی به آن برای کاربران ساده تر می‌شود.

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

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

نحوه تعامل کاربر و ربات تلگرام

ربات های تلگرامی حساب‌های کاربری ویژه ای هستند که برای انجام کار نیاز به شماره تلفن ندارند بلکه کدهایی هستند که از طریق یک واسط کاربری و بر روی یک سرور اجرا می شوند. تلگرام این کدها را بر روی پروتکل رمزنگاری شده MTProto مدیریت می کند. نحوه کار به این شکل است که سرور واسطه تمام کدهای رمزنگاری شده را از طریق Interface یا همان واسط کاربری مبتنی بر HTTPS کنترل می‌کند. به زبان ساده‌تر ربات های تلگرام کدهایی هستند که از طریق یک پروتکل امن (HTTPS) که به یک سرور واسطه متصل است عمل می کنند.

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

نکته شکلاتی: با هر زبان سرورسایدی میشه ربات ساخت چون در اصل ما در حال تبادل اطلاعات با API ها هستیم و کاملا دست شما بازه

اینم یه شماتیک:

اینم یه نمونه ربات ساده با زبان PHP:

شرح آسیب‌پذیری

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

خب ایده ای که به ذهنم رسید این بود که این ربات ها حتما یه دیتابیسی دارند و متصلند خب حالا از اونجا که بیشتر ربات های تلگرام با زبان PHP نوشته می‌شوند حدث زدم که دیتابیس MySql  است خب حدث و گمان رو ول کنید رفتم روی تست ربات از طریق صحبت کردن باهاش که خیلی  جذابه

اولین کار جذابی که میکردیم توی وب هکینگ برای چک کردن آسیب‌پذیر بودن همون تک کوتینش بود ولی اینجا به صورت پیام بین ربات رد و بدل میشد و حدث زدنش مشکل خب مستقیم اومدم از دستور order by

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

نمونه کد اسیب پذیر در سورس ربات: (حدث)

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

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

امیدوارم براتون مفید بوده باشه

4 پست نوشته شده
علاقه‌مند به برنامه‌نویسی، وب هکینگ و رمزنگاری
دانشجوی رشته گیاه پزشکی دانشگاه ایلام و رشتم در تضاد با علاقم
دسته‌ها: امنیت وب، دانش پایه
  • به اشتراک بگذارید:
  1. کاربر گرامی گفت:

    سلام
    خیلی خوب بود
    جسارت نباشه ولی فکر کنم که درستش ‘حدس’ باشه

  2. Sina گفت:

    سلام خسته نباشید
    علت اینکه توی پیلود یه +۱ زدید چیه؟

    +۱=۱’union……..

    • امیرحسین گفت:

      یکی از روش های پیلود نوسی با اسیب پذیری SQLI جدید تر از این هم اومده اسیپ پذیر های جدی چک کنید حداقل تو صفحه اول یک اسیب پذیری SQLI پیدا می کنی

      • hExToR گفت:

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

  3. sobhan گفت:

    سلام
    بسیار عالی
    ممنون از شما?

  4. ملا لغتی گفت:

    آفرین!
    البته حدث درست نیست و حدس درسته.
    برسی هم درست نیست و بررسی درسته.
    اون جایی هم که از «سروسر» استفاده کردید فکر کنم منظور «سر و کار» بوده. قاعدتا معنی این دو تا تفاوت داره.
    کوتینش هم همون کوتیشنه دیگه.
    «گزاشتم» هم که دیگه خیلی غلطه و «گذاشتم» باید باشه.

  5. منم گفت:

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