رایتاپ Business Logic دسترسی به حساب مدیر
سلام.من بهروز منصوری هستم و قراره در رایتاپ Business Logic دسترسی به حساب مدیر به شما نمایش بدم که چطور با یک ترفند ساده به حساب مدیر دسترسی میگیریم.
من معمولاً در برنامههایی که شامل احراز هویت میشوند، به طور گسترده همه عملکردهای مرتبط را آزمایش میکنم.
وقتی به ویژگی «فراموشی رمز عبور» رسیدم، میخواستم ببینم این کار چطور انجام می شود.
احتمالا میلیون ها بار این فرایند را دیده اید:
روی “رمز عبور را فراموش کرده اید” کلیک کنید => ایمیل را وارد کنید => ارسال کنید => ایمیل خود را بررسی کنید.
در این مورد، من بلافاصله یک ایمیل با لینک بازگردانی رمز عبور دریافت کردم که چیزی شبیه به این بود:
https://email.mail.redactedexample.com/c/verylongENCRYPTEDstring
بعد از کلیک روی لینک به آدرس زیر هدایت شدم:
https://redactedexample.com/someendpoint/confirm.php?u=551234911&t=<132bitUnknownHashType>&x=2913117
Your email is <myemail>
Create new password:
********************
Confirm password:
********************
<Submit button>
اولین کاری که انجام دادم این بود که پارامتر “x” را حذف کردم و صفحه را رفرش کردم تا ببینم آیا تفاوتی دارد یا خیر. نشد!
عالی! بعد مقدار “u” (+1) را افزایش دهم چون شبیه یک شناسه عددی است.
درست کار کردو صفه به این شکل در آمد:
Your email is <anotheruser’semail>
Create new password:
********************
Confirm password:
********************
<Submit button>
حتی در این مرحله، من هنوز مطمئن نبودم که کار کند یا خیر، بنابراین یک حساب کاربری دیگر (myaccount2) در مرورگر دیگری ایجاد کردم.
شناسه در قسمت تنظیمات حساب نمایش داده شد.
من شناسه افشا شده را کپی کردم و در URL قرار دادم:
https://redactedexample.com/someendpoint/confirm.php?u=myaccount2ID&t=<132bitUnknownHashType>
یک رمز عبور جدید ایجاد و تأیید کردم، گزینه Submit را فشار دادم و بلافاصله وارد حساب کاربری myaccount2 شدم.
ایده بعدی
موارد مشابه را زیاد دیده ام، بنابراین این یک مورد غیرعادی یا غیر معمول نیست.
این فقط یک مثال دیگه از اشتباه بودن فرایند بازگردانی رمز عبور است.
لینک ریست پسورد دریافت شده در ایمیل:
https://email.mail.redactedexample.com/c/verylongENCRYPTEDstring
آنها (توسعه دهندگان) احتمالاً فکر می کردند که لینک امن است.
رشته encode نشده بود، بلکه encrypt شده بود.
اما اگر در مرحله بعد کنترل پارامترهای URL را به کاربر نهایی بسپارید، رمزگذاری چه فایده ای دارد؟!
برای اینکه دسترسی بالاتر داشته باشم، سعی کردم مقدار شناسه عددی را کم کنم.
اگر حساب من 551234911 بود، حساب مدیر عامل 1 یا 000000001 نبود، بلکه جایی در محدوده 551003010 بود.
همچنین، متوجه شدم که کار پارامتر “x” این است که پس از مدتی لینک ریست را باطل کند.
حذف (“x”) همچنین کل منطق را از بین برد، بنابراین به من اجازه داد تا چند روز بعد هم از URL استفاده کنم.
قبلاً هم رایتاپی مثل “رایتاپ Business Logic دسترسی به حساب مدیر” داشتیم که می تونید اینجا ببینید.