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

دسته بندی: آموزش, امنیت
امن سازی با اپن کارت

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

 

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

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

 

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

 

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

 

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

حتما بخوانید:  تروجان چیست و چطور انواع تروجان را از بین ببریم؟

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

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

 

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

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

 

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

 

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

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

 

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

 

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

 

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

 

$user_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "user 
#WHERE user_id = '" . (int)$this->session->data['user_id'] . "' 
AND status = '1'");

 

 

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

حتما بخوانید:  ابر هیبریدی یا ترکیبی چیست؟ چه فرقی با ابر چندگانه دارد؟

 

$user_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "user 
#WHERE username = '" . $this->db->escape($username) . "' AND (password = 
SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1('" .  
$this->db->escape($password) . "'))))) OR password = '" . 
$this->db->escape(md5($password)) . "') AND status = '1'");

 

 

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

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

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

SELECT * FROM cms_user

 

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

 

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

 

Username: fakeuser’ OR 1#

Password: pass

 

حتما بخوانید:  با استفاده از اتوماسیون ابری در زمان صرفه‌جویی کنید!

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

SELECT * FROM users WHERE username = 'fakeuser' OR 1#' AND password = 'pass'

 

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

SELECT * FROM users WHERE username = 'fakeuser' OR 1

 

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

 

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

 

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

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

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

 

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

امتیاز شما

مایلید هر دو هفته یک ایمیل مفید دریافت کنید؟

ما را در شبکه‌های اجتماعی دنبال کنید

همچنین شاید دوست داشته باشید!

نظرات کاربران

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد.

این فیلد را پر کنید
این فیلد را پر کنید
لطفاً یک نشانی ایمیل معتبر بنویسید.
شما برای ادامه باید با شرایط موافقت کنید

فهرست