Github: @EhsanShahbazii - Telegram: @ehsandevv
یافتن باگ امنیتی در ربات های پیام ناشناس!
بعد چند روز رفتم تلگرام چند تا پیام ناشناس اومده بود. بنا به دلایلی خواستم ببینم کی فرستاده منتهی خب چون بنده سازنده ربات نیستم، پس به سورس کدش هم دسترسی ندارم!
خب روش خاصی به نظرم نمیومد چون واقعا سخته دسترسی داشتن به دیتابیس، مخصوصا از قضیه هک شدنش که بعدا یه آپدیت هم زدن و الان پیام هارو هم به گفته خودشون، بعد نمایش پاک میکنن.
قسمت یک: چی شد چگونه شد؟
خب چند مدتی بود که دوباره به ساخت ربات تلگرام مشغول بودم و بعضی جاها برای دیباگ کردن از تلگرام دسکتاپ استفاده میکردم. اونجا معمولا به جای لاگ گرفتن توی سرور، از اینجا export میکردم و دیباگ میکردم. گفتم چی میشه همین روش رو به این ربات هم پیاده کنم؟
این ربات میانگین ماهی 365 هزار کاربر فعال داره و این رقم خیلی زیادیه! هیچوقت به این ربات ها اعتماد نکنید و یه وقت نکرده چیزایی رد و بدل نکنید که آره خودتون میفهمین چی میگم. اونقدر ها هم ناشناس نیست.
احتمالا خیلی هاتون از این ربات ها استفاده کردین یا دیدین. خب مرحله اول میریم پی وی این ربات که پیام هارو export بگیریم. اصلا این آپشن رو چرا تلگرام گذاشته؟ خب میتونیم در مواقع ضروری از پیام ها و هر اطلاعات دیگه به صورت html یا json بک آپ بگیریم.
خب پیام هارو باز میکنیم و بعد میریم که بک آپ بگیریم ازشون
الان میریم مرحله بعدی و سری به فایل میزنیم ببینیم چیه و چطوریه!
قسمت دوم: خب الان چیکار کنیم؟
اینجا توی قسمت inline_bot_buttons همون دکمه شیشه ای زیر پیام هاست. اینجا برای پیدا کردن پیام طرف مد نظر میان آیدی تلگرامی کاربر رو استفاده میکنن. خب اومدن برای امنیت تبدیل به هش base64 کردن که خب شکوندنش آسونه.
خب چون گاها تاریخچه طولانی میشه نیاز دارم که کدی بنویسم که این هش هارو بگیره بعد انکود کنه و برگردونه بهم. خب دست به کار میشیم:
الان توی فایل user_ids.txt آیدی عددی کاربر هارو تونستیم بگیریم. الان کافیه از ربات usinfobot استفاده کنیم و با آیدی بتونیم اطلاعات کاربر مورد نظر رو پیدا کنیم. این دیتابیس رفته رفته آپدیت میشه ولی خب احتمالا شکست وجود داره.
خب با وارد کردن این آیدی ها توی ربات به شکل زیر:
به این صورت میفهمیم که کی ناشناس پیام داده. این باگ عجیب و خیلی بدیه! چون عملا دیگه ربات ناشناس به ربات شناس تبدیل میشه.
قسمت سوم: سورس کد
طبق معمول سورس کد رو توی github و gist میزارم میتونید استفاده کنید :)
عجیب غریبه من از پریروز درگیر این بودم چرا اینی که نوشتم کامنت نمیشه! از یه اکانت دیگه امتحان کردم اوکی شد ولی با این اکانتم نه. داستان برمیگرده به کامنتی به دوستی داشتم میفرستادم توش اینو نوشته بودم. هی ارسال نمیشد آخرش فهمیدم به خاطر اینه. و اینو فارسی نوشتم اوکی شد.
پ.ن1: به لطف ویرگول توی کامنت ها میخوام انگلیسی بنویسم تازگیا کامنت فرستاده نمیشه. مجبور شدم اینجا بنویسم.
سوال توی کامنت:
همیشه برام سوال بود چرا کدای base64 چندتا مساوی آخرشون دارن :)
جواب:
سلام دوست عزیزم. خوشحالم پست نظرت رو جلب کرده.
اگه بخوایم ساده بگیم: تو این الگوریتم بلاک هامون 3 کاراکتری هستن یعنی سه تا سه تا تقسیم میشن. یعنی مثلا ZXCVBNM --> [ZXC][VBN][M]
میشه ولی چون ما تو بلاک سوم فقط یه کاراکتر داریم، ناچاریم گپ رو پر کنیم و میایم با = پرش میکنیم یعنی میشه:
ZXCVBNM --> [ZXC][VBN][M==]
پس اگه طول رشته ما مضرب 3 باشه، تو هش ما = نداریم. اگه باقی مونده اش به 3 بشه 1، اونوقت یدونه = داریم و اگه 2 بشه اونوقت دو تا = داریم.
پیام بازرگانی📱: اعتماد کردن سخت میشه، مخصوصا طرف مقابل ساکت باشه ...
مطلبی دیگر از این انتشارات
مثل شافتالو کتابای فیدیبو رو به pdf تبدیل کن!
مطلبی دیگر از این انتشارات
دوستت زیر کدوم پست ها کامنت گذاشته؟ مچشو بگیر!
مطلبی دیگر از این انتشارات
یادآور پست ویرگول! آخ یادش به خیر!