وضعیت سرورها

وبــلاگ

وضعیت سرورها
  • امن سازی و امنیت در اپن کارت (open cart)

    شریفی پویا دوشنبه ۳۰ مرداد ۱۳۹۶ آموزش , امنیت

    Backdoor های نا محدود در فرآیند ورود به اپن کارت

     

    از دیدگاه هکر ها، ایجاد کردن راه هایی برای حفظ دسترسی به وب سایت های در معرض خطر، بسیار مطلوب است. ما این راه ها را  Backdoor می نامیم.

    Backdoor ها می توانند به روش های مختلف، یا توسط اضافه کردن مدیران جعلی به سایت و یا افزودن قطعه کدهای مخرب جهت اجرای راه دور توسط مهاجمان ، ایجاد شوند. این کار به آنها اجازه می دهد تا در صورت نیاز به راحتی به سایت  دسترسی داشته باشند. در این مقاله مشخصات فنی یک Backdoor  را که به یک سایت OpenCart آسیب دیده اضافه شده است، و به مهاجمان بدون داشتن اعتبار مدیریتی اجازه ورود به سایت را می دهد، شرح خواهیم داد.

     

    دسترسی توسط Backdoor موجود در فرآیند ورود

     

    OpenCart از فایل system / library / user.php برای مدیریت فرآیند ورود استفاده می کنددر Open Cart هم همانند سایر روش های تأیید هویت CMS، اگر کاربری نتواند به سایت وارد شود، یا کلا وجود ندارد، یا اعتبار آن نادرست است یا مجوز دسترسی به سایت را ندارد، در این گونه موارد یک پیام خطا به روشنی بیان می کند که ورود موفقیت آمیز نبوده است.

     

    در این مورد، مهاجمان فایل را به گونه ای تغییر می دهند که هر اطلاعات ورودی  معتبر در نظر گرفته شود و اجازه ورود به آن داده می شود.

    تصویر زیر هنگامی است که ما  تلاش می کنیم با یک کاربر جعلی وارد سیستم شویم، به عنوان مثال:

    لاگین اپن کارت

     

    صرف نظر از هر نام کاربری و کلمه عبوری که ما استفاده کردیم، با نتیجه ای یکسان مواجه شدیم یعنی  یک ورود موفق:

    وقتی نگاهی سریع به پایگاه داده می اندازیم متوجه می شویم هیچ یک ازین کاربران در آن وجود ندارد! پس چگونه به آنها اجازه ورود داده شده است؟

     

    بررسی لاگ های کاربران

     

    نکته جالب در مورد فرآیند ورود به سیستم این است که صرف نظر از نام کاربری که وارد کردیم، یک کاربر یکسان در لیست نمایش داده می شود.

    ایجاد تغییر در جزئیات هیچ تاثیری در روند ورود به سیستم ندارد. با وجود هر تغییری که از سمت کاربر منعکس شود، ورود به سیستم هنوز هم دقیقا به همان شیوه عمل می کند. برای رسیدن به اهداف این تحقیق، بسیار جالب بود که بتواند تایید کند ورود های موفق بر اساس اولین کاربر در لیست بوده است و نه  بر اساس یک ترکیب خاص نام کاربری و کلمه عبور!

     

    حالا به سادگی می توانیم توجه خود را به فایل مسئول، یعنی logins – system / library / user.php متمرکز کنیم تا مطمئن شویم هیچ دست کاری در آن صورت نگرفته است.

     

    شرح روش تایید اعتبار

     

    پس از چک کردن فایل، بلافاصله چیز عجیبی را  در دو مورد از کوئری های SQL یافتیم:

     

     

     

    و در خطوط بعد این کد ها را مشاهده کردیم:

     

     

     

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

    علامت # یک نماد جدا کننده  (کامنت) معروف در syntax mysql است. مهاجمین به طور مستقیم با ویرایش فایل هسته Open Cart از این علامت برای نامعتبر کردن اغلب روش های اعتبار سنجی استفاده می کنند.

    با استفاده از این علامت بسیار کوچک، تمام چک های احراز هویت (نام کاربری / رمز عبور) حذف می شوند، چون این بخش از کد به کامنت تبدیل می شود، هنگام اجرا از آن صرفه نظر می گردد. بنابراین بقیه کوئری باقی می ماند و با موفقیت هم اجرا می شود. در قسمت باقی مانده کد، تمام کاربران موجود در جدول cms_user بارگذاری می شوند و اولین رکورد موجود برای ورود را انتخاب می شود:

     

    در حمله های SQLi استفاده از چنین روش های محدود کردن با کامنت گذاری بسیار شایع است، در این روش مهاجمان تلاش می کنند با قرار دادن # در فرم های ورودی، بقیه کد های اعتبارسنجی را دور بزنند. با این کار  بقیه کوئری به کامنت تبدیل می گردد و به همین جهت توسط وب سرور نادیده گرفته می شود.

     

    در زیر مثال خوبی از این نوع حمله با افزودن کامنت در فرم ساده ورود به سیستم  می بینید:

     

     

    ترجمه ساده این  کد به یک کوئری MySQL چنین  خواهد بود:

     

    از آنجا که # بدون پاکسازی ارسال شده است، کوئری واقعی به سرور فرستاده شده است:

     

    وب سرور با این کد مثل یک کوئری معتبر رفتار می کند و به سادگی لیست همه کاربران را در یک جدول باز می گرداند و اجازه می دهد تا هکر به سیستم وارد شود.

     

    پاکسازی، اعتبارسنجی و یکپارچگی

     

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

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

    به عنوان یک اقدام امنیتی بسیار خوب، ما همیشه توصیه می کنیم که برای محافظت از سایت خود حتما فایروال وب سایت داشته باشید. همچنین مهم است که روش های کنترل دسترسی کمکی مانند فیلتر ۲FA یا IP را نیز در نظر بگیرید.

     

    برگرفته از [sucuri.net]

    1+

    برچسب ها :

با عضویت در خبرنامه شما را از آخرین تجربیات مان و مطالب تخصصی آگاه خواهیم کرد.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *