یافتن باگ امنیتی در ربات های پیام ناشناس!

telegram anonymous messager bot. make it modern and dark theme
telegram anonymous messager bot. make it modern and dark theme

بعد چند روز رفتم تلگرام چند تا پیام ناشناس اومده بود. بنا به دلایلی خواستم ببینم کی فرستاده منتهی خب چون بنده سازنده ربات نیستم، پس به سورس کدش هم دسترسی ندارم!

خب روش خاصی به نظرم نمیومد چون واقعا سخته دسترسی داشتن به دیتابیس، مخصوصا از قضیه هک شدنش که بعدا یه آپدیت هم زدن و الان پیام هارو هم به گفته خودشون، بعد نمایش پاک میکنن.

قسمت یک: چی شد چگونه شد؟

خب چند مدتی بود که دوباره به ساخت ربات تلگرام مشغول بودم و بعضی جاها برای دیباگ کردن از تلگرام دسکتاپ استفاده میکردم. اونجا معمولا به جای لاگ گرفتن توی سرور، از اینجا export میکردم و دیباگ میکردم. گفتم چی میشه همین روش رو به این ربات هم پیاده کنم؟

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

احتمالا خیلی هاتون از این ربات ها استفاده کردین یا دیدین. خب مرحله اول میریم پی وی این ربات که پیام هارو export بگیریم. اصلا این آپشن رو چرا تلگرام گذاشته؟ خب میتونیم در مواقع ضروری از پیام ها و هر اطلاعات دیگه به صورت html یا json بک آپ بگیریم.

پیام های دوستان توی برنامه ناشناس
پیام های دوستان توی برنامه ناشناس

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

دکمه export chat history
دکمه export chat history
نوع خروجی رو json انتخاب میکنیم
نوع خروجی رو 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 بشه اونوقت دو تا = داریم.
پیام بازرگانی📱: اعتماد کردن سخت میشه، مخصوصا طرف مقابل ساکت باشه ...