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

نرم افزار جهانی برای سالن های اپتیکال، کلینیک های چشم پزشکی، اتاق های اصلاح تماس. نرم افزار جهانی برای سالن های اپتیکال، کلینیک های چشم پزشکی، اتاق های اصلاح تماس ادامه در دسترس t

نرم افزار جهانی که به طور خاص برای سالن های اپتیکال، کلینیک های چشم پزشکی، مطب های QC و چشم پزشکان طراحی شده است.
سطح کیفی جدیدی از کار برای سالن های اپتیکال و چشم پزشکان.

برنامه کامپیوتری "ARMO plus"

(حسابداری و تجارت پزشکی)

  • فایل یکپارچه مشتری در تمامی محل کار و شعب.
  • سیستم انعطاف پذیر تخفیف، کار با کارت های تخفیف.
  • نگهداری و حسابداری فروش عمده و خرده، خدمات تولید و تعمیر عینک، خدمات پزشکی.
  • به سرعت اطلاعات را بر اساس نام، با استفاده از کدها، از طریق اسکنر بارکد وارد کرده و جستجو کنید.
  • بهینه سازی درخواست های تامین کالا با استفاده از قالب ها. به حداقل رساندن موجودی
  • ورود خودکار داده های معاینه پزشکی و تولید یادداشت های پزشکی.
  • صدور نسخه و خودکارسازی سفارشات عینک. حسابداری خدمات پزشک و استادکار.
  • تحویل هدفمند اطلاعات عملیاتی با استفاده از پیامک برای دعوت از مشتریان به یک قرار ملاقات مشاوره یا تعویض لنز برنامه ریزی شده؛ اطلاع رسانی در مورد سهام شرکت
  • گزارش های خلاصه و دقیق در مورد جابجایی وجه نقد و کالا، جریان مشتری، کار پرسنل، نتایج مالی.
  • امکان دانلود داده ها برای استفاده بعدی در 1C: حسابداری، فروشگاه آنلاین و سایر برنامه ها.
  • نظارت بر فعالیت فردی کارکنان (فروش، ارجاع برای معاینه، ارائه تخفیف به مشتریان و غیره).
  • پیکربندی دسترسی کاربر به توابع برنامه
  • تبادل خودکار داده بین ایستگاه های کاری راه دور (شاخه ها).
  • درجه بالایی از محافظت در برابر دسترسی غیرمجاز و کپی کردن اطلاعات. آرشیو خودکار پایگاه داده

"ARMO plus" سیستمی است که از فناوری های پایگاه داده توزیع شده استفاده می کند

طراحی شده برای اتوماسیون:

انجام فروش عمده و خرده؛

برنامه های کاربردی برای عرضه کالا، کنترل جابجایی کالا و کالاهای باقی مانده در محل کار؛

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

تشکیل و چاپ داده های معاینه پزشکی؛

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

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

دایرکتوری ها و اسناد

برای ذخیره و سیستماتیک کردن داده ها، پر کردن سریع اسناد، گزارش ها، پرونده های بیمار و غیره. ارائه شده است کتاب های مرجع. دایرکتوری ها دارای یک رابط کاربر پسند هستند و کار با آنها بصری است با کمک اسناداطلاعات مربوط به معاملات تجاری و مالی وارد می شود، درخواست کالاها انجام می شود، موجودی ها وارد می شوند دسترسی به فهرست ها و اسناد توسط مدیر برنامه تعیین می شود،اختصاص "حقوق" خاص به کاربران

امکان اجرای همزمان عملیات های مختلف

فایل مشتری

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


گزارش های اساسی در ARMO Plus

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

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

پایگاه داده توزیع شده و تبادل داده

فناوری پایگاه داده توزیع‌شده به چشم‌پزشکان، دفاتر چشم‌پزشکی و شعبه‌های جغرافیایی از راه دور اجازه می‌دهد. اطلاعات از طریق بسته های تبادل الکترونیکی به یکدیگر منتقل می شود. به همین دلیل، همگام سازی داده ها در ایستگاه های کاری راه دور انجام می شود. اینگونه شکل می گیرد پرونده یکپارچه بیمارو پایگاهی از اطلاعات مرجع و مستند شرکت هایی که با ARMO Plus کار می کنند می توانند داده ها را به صورت الکترونیکی با یکدیگر مبادله کنند.


خدمات مدیریت پایگاه داده

قابلیت اطمینان عملیات با استفاده از حفاظتپایگاه داده داده های ذخیره شده همیشه می تواند باشد بازگرداندن. برای فشرده سازی پایگاه داده، تخلیه و تمیز کردن داده ها ارائه شده است. قوطی ARMO plus داده ها را در برنامه 1C: Enterprise، Excel، فروشگاه آنلاین آپلود کنید.

در جوملا، پس از ثبت نام موفقیت آمیز، کاربران به طور پیش فرض به a هدایت می شوند صفحه ورود(در صورت عدم نیاز به فعال سازی حساب). از آنجا (پس از ورود به سیستم) کاربران به یک آدرس هدایت می شوند. مشخصات کاربرصفحه این اتفاق می افتد حتی اگر تغییر مسیر ورود به سیستم را روی چیز دیگری تنظیم کرده باشید ماژول فرم ورود.

برای تغییر این رفتار می توانید کاربران را پس از ثبت نام به هر صفحه دیگری در وب سایت خود هدایت کنید.
برای این کار باید یک فایل اصلی جوملا را ویرایش کنید. توجه داشته باشید که تغییرات شما ممکن است توسط یک به روز رسانی جوملا بازنویسی شود. همیشه تغییراتی را که در فایل‌های جوملا ایجاد می‌کنید مستند کنید تا در صورت نیاز بتوانید به سرعت آنها را دوباره انجام دهید.

باز کردن فایل:
components/com_users/controllers/registration.php

به پایین تا پایین بروید. از خط شروع 162 یا بیشتر کد جاری خواهید داشت:

if ($return === "adminactivate" ) ($this -> setMessage (JText:: _() ) ؛ $this -> setRedirect (JRoute:: _(, false ) ) ; ) در غیر این صورت اگر ($return == = "useractivate" ) ($this -> setMessage (JText::_() ) ؛ $this -> setRedirect (JRoute::_( "index.php?option=com_users&view=registration&layout=complete", نادرست ) ) ; ) else ($this -> setMessage (JText::_() )؛ $this -> setRedirect (JRoute::_( "index.php?option=com_users&view=login", نادرست ) ) ; )

در این بخش شما 3 لینک دارید که index.php را شروع می کنند؟

  • اولین مورد () پس از ثبت نام کاربر اجرا می شود اگر حساب باید توسط یک مدیر فعال شود
  • دومین ( index.php?option=com_users&view=registration&layout=complete)، اگر حساب کاربری باید توسط کاربر فعال شود
  • سوم ( index.php?option=com_users&view=login)، در صورتی که فعال سازی حساب مورد نیاز نباشد.

پیوندها را بسته به نوع ثبت نامی که استفاده می کنید با URL کامل صفحه تغییر مسیر خود جایگزین کنید و کارتان تمام شد.
به عنوان مثال، اگر فعال سازی کاربر در وب سایت من الزامی نیست و من می خواهم کاربران را پس از ثبت نام به آن هدایت کنم http://www.mywebsite.com/welcome-regکد به روز شده به صورت زیر خواهد بود:

// به صفحه نمایه تغییر مسیر دهید. if ($return === "adminactivate" ) ($this -> setMessage (JText::_( "COM_USERS_REGISTRATION_COMPLETE_VERIFY")) ؛ $this -> setRedirect(JRoute::_( "index.php?option=com_users&view=registration&layout=complete", نادرست ) ) ; ) else if ($return === "useractivate" ) ($this -> setMessage (JText::_( "COM_USERS_REGISTRATION_COMPLETE_ACTIVATE")) ؛ $this -> setRedirect(JRoute::_( "index.php?option=com_users&view=registration&layout=complete", نادرست ) ) ; ) else ($this -> setMessage (JText::_( "COM_USERS_REGISTRATION_SAVE_SUCCESS")) ؛ $this -> setRedirect(JRoute::_( "http://www.mywebsite.com/welcome-reg" , نادرست ) ) ; )

صرف نظر از اینکه به کدام صفحه در وب سایت خود هدایت می کنید، پیام سیستم " ممنون از اینکه ثبت نام کردید..." همچنان نمایش داده می شود. اگر این پیام را نمی خواهید، خط کامل بالای URL تغییر مسیر خود را بردارید. به عنوان مثال، $this->setMessage(JText::_("COM_USERS_REGISTRATION_SAVE_SUCCESS"));

اگر نیازی به فعال سازی حساب ندارید (فعال سازی حساب کاربری جدید روی هیچ یک) این تنها چیزی است که برای جلوگیری از صفحه نمایه کاربر نیاز دارید. با این حال، اگر کاربر باید حساب را از طریق ایمیل فعال کند (Account Activation روی خود) ممکن است این کافی نباشد. بلافاصله پس از ثبت نام کاربر به صفحه وبی هدایت می شود که در کدی که انتظار می رود در آن ارائه شده است. اما زمانی که کاربر روی لینکی در ایمیل فعال‌سازی کلیک می‌کند، به فرم ورود ذکر شده قبلی هدایت می‌شود و در صورت استفاده از آن برای ورود به صفحه پروفایل کاربری وارد می‌شود. برای جلوگیری از این امر می توانید صفحه نمایه کاربر را به طور کامل غیرفعال کنید و در عوض کاربران را به هر صفحه ای که دوست دارید هدایت کنید. این مقاله را بخوانید تا بدانید چگونه.

جوملا 1.6
جوملا 1.7
جوملا 2.5

امروز ما به بهره برداری از یک آسیب پذیری حیاتی 1 روزه در CMS محبوب جوملا می پردازیم که در پایان اکتبر در اینترنت منفجر شد. در مورد آسیب پذیری ها با اعداد صحبت خواهیم کرد CVE-2016-8869, CVE-2016-8870و CVE-2016-9081. هر سه از یک تکه کد می آیند که برای پنج سال طولانی در اعماق فریم ورک به سر می بردند و در بال ها منتظر بودند، اما پس از آن آزاد شدند و هرج و مرج، سایت های هک شده و اشک های کاربران بی گناه این جوملا را با خود به ارمغان آوردند. فقط شجاع ترین و شجاع ترین توسعه دهندگان که چشمانشان از نور مانیتور قرمز شده است و صفحه کلیدهایشان پر از خرده نان است، توانستند ارواح شیطانی خشمگین را به چالش بکشند و سر خود را بر قربانگاه اصلاحات بگذارند.

هشدار

تمام اطلاعات فقط برای مقاصد اطلاعاتی ارائه شده است. نه سردبیران و نه نویسنده مسئولیتی در قبال آسیب احتمالی ناشی از مطالب این مقاله ندارند.

از جایی که همه چیز شروع شد

در 6 اکتبر 2016، دمیس پالما موضوعی را در Stack Exchange ایجاد کرد که در آن پرسید: در واقع، چرا در جوملا نسخه 3.6 دو روش برای ثبت نام کاربران با همان نام register() وجود دارد؟ اولین مورد در کنترلر UsersControllerRegistration و دومین مورد در کنترلر UsersControllerUser قرار دارد. Damis می خواست بداند که آیا متد UsersControllerUser::register در جایی استفاده شده است یا اینکه فقط یک نابهنگاری تکاملی باقی مانده از منطق قدیمی است. نگرانی او این بود که حتی اگر این روش توسط هیچ دیدگاهی مورد استفاده قرار نگیرد، می توان آن را با یک پرس و جو ساختگی فراخوانی کرد. که من پاسخی از یک توسعه دهنده با نام مستعار itoctopus دریافت کردم که تأیید کرد: مشکل واقعا وجود دارد. و گزارشی را برای توسعه دهندگان جوملا ارسال کرد.

سپس رویدادها با بیشترین سرعت توسعه یافتند. در 18 اکتبر، توسعه دهندگان جوملا گزارش Damis را پذیرفتند، که در آن زمان یک PoC تهیه کرده بود که امکان ثبت نام کاربر را فراهم می کرد. او یادداشتی را در وب سایت خود منتشر کرد که در آن به طور کلی در مورد مشکلی که پیدا کرد و افکار خود در این مورد صحبت کرد. در همان روز نسخه جدید جوملا 3.6.3 منتشر شد که همچنان حاوی کدهای آسیب پذیر است.

پس از این، دیوید تامپلینی باگ را تا حدی می چرخاند که نه یک کاربر ساده، بلکه یک مدیر را ثبت می کند. و در 21 اکتبر، یک مورد جدید به تیم امنیتی جوملا می رسد. قبلاً در مورد افزایش امتیازات صحبت می کند. در همان روز، اطلاعیه ای در وب سایت جوملا ظاهر می شود که در روز سه شنبه، 25 اکتبر، نسخه بعدی با شماره سریال 3.6.3 منتشر می شود که یک آسیب پذیری بحرانی در هسته سیستم را اصلاح می کند.

25 اکتبر Joomla Security Strike Team آخرین مشکل ایجاد شده توسط قطعه کد کشف شده توسط Damis را پیدا می کند. سپس یک commit به تاریخ 21 اکتبر با نام نامشخص Prepare 3.6.4 Stable Release به شعبه اصلی مخزن رسمی جوملا فرستاده می شود که این اشکال تاسف بار را برطرف می کند.

پس از انتشار این خبر، افراد زیادی علاقه مند به جامعه توسعه دهندگان می پیوندند - آنها شروع به ترویج آسیب پذیری و آماده سازی اکسپلویت می کنند.

در 27 اکتبر، محقق هری رابرتز یک اکسپلویت آماده را در مخزن Xiphos Research آپلود می کند که می تواند یک فایل PHP را روی سروری با CMS آسیب پذیر آپلود کند.

جزئیات

خوب، پس زمینه به پایان رسیده است، بیایید به جالب ترین بخش - تجزیه و تحلیل آسیب پذیری ها برویم. من جوملا 3.6.3 را به عنوان نسخه آزمایشی نصب کردم، بنابراین تمام شماره خطوط مربوط به این نسخه خواهد بود. و تمام مسیرهای فایل هایی که در زیر مشاهده خواهید کرد، نسبت به ریشه CMS نصب شده نشان داده می شوند.

به لطف کشف دامیس پالما، می دانیم که دو روش وجود دارد که ثبت نام کاربر را در سیستم انجام می دهد. اولین مورد توسط CMS استفاده می شود و در فایل /components/com_users/controllers/registration.php:108 قرار دارد. دومی (کسی که باید تماس بگیریم) در /components/com_users/controllers/user.php:293 زندگی می کند. بیایید نگاهی دقیق تر به آن بیندازیم.

286: /** 287: * روش ثبت نام کاربر. 288: * 289: * @return boolean 290: * 291: * @since 1.6 292: */ 293: public function register() 294: ( 295: JSession::checkToken("post") یا jexit(JText::_ ("JINVALID_TOKEN"))؛ ... 300: // داده های فرم را دریافت کنید. 301: $data = $this->input->post->get("user", array(), "array"); . .. 315: $return = $model->validate($form, $data)؛ 316: 317: // خطاها را بررسی کنید. 318: if ($return === false) 319: ( ... 345: / / ثبت نام را تمام کنید 346: $return = $model->register($data);

در اینجا من فقط خطوط جالب را گذاشتم. نسخه کامل متد آسیب پذیر را می توان در مخزن جوملا مشاهده کرد.

بیایید بفهمیم که در هنگام ثبت نام کاربر عادی چه اتفاقی می افتد: چه داده هایی ارسال می شوند و چگونه پردازش می شوند. اگر ثبت نام کاربر در تنظیمات فعال باشد، فرم را می توانید در http://joomla.local/index.php/component/users/?view=registration پیدا کنید.


درخواست ثبت نام کاربر قانونی مانند تصویر زیر است.


کامپوننت com_users مسئول کار با کاربران است. به پارامتر وظیفه در درخواست توجه کنید. فرمت $controller.$method را دارد. بیایید به ساختار فایل نگاه کنیم.

نام اسکریپت ها در پوشه کنترل کننده هابا نام کنترل کننده های فراخوانی شده مطابقت دارد. از آنجایی که درخواست ما اکنون شامل $controller = "registration" است، فایل فراخوانی می شود register.phpو متد register() آن.

توجه، سوال: چگونه پردازش ثبت نام را به یک مکان آسیب پذیر در کد منتقل کنیم؟ احتمالاً قبلاً آن را حدس زده اید. نام متدهای آسیب پذیر و واقعی یکسان است (رجیستر)، بنابراین فقط باید نام کنترلر فراخوانی شده را تغییر دهیم. کنترل کننده آسیب پذیر ما در کجا قرار دارد؟ درست است، در پرونده user.php. معلوم می شود $controller = "user" . با کنار هم گذاشتن همه چیز، task = user.register دریافت می کنیم. اکنون درخواست ثبت نام با روشی که ما نیاز داریم پردازش می شود.


دومین کاری که باید انجام دهیم این است که داده ها را با فرمت صحیح ارسال کنیم. اینجا همه چیز ساده است. ثبت نام قانونی () از ما آرایه ای به نام jform انتظار دارد که در آن داده های ثبت نام - نام، ورود به سیستم، رمز عبور، ایمیل را ارسال می کنیم (به اسکرین شات با درخواست مراجعه کنید).

  • /components/com_users/controllers/registration.php: 124: // داده های کاربر را دریافت کنید. 125: $requestData = $this->input->post->get("jform", array(), "array");

مشتری ما این داده ها را از آرایه ای به نام کاربر دریافت می کند.

  • /components/com_users/controllers/user.php: 301: // داده های فرم را دریافت کنید. 302: $data = $this->input->post->get("user", array(), "array");

بنابراین، نام تمام پارامترهای موجود در درخواست را از jfrom به user تغییر می دهیم.

قدم سوم ما یافتن یک نشانه معتبر CSRF است، زیرا بدون آن هیچ ثبت نامی وجود نخواهد داشت.

  • /components/com_users/controllers/user.php: 296: JSession::checkToken("post") یا jexit(JText::_("JINVALID_TOKEN"));

به نظر می رسد یک هش MD5 است و می توانید آن را برای مثال از فرم مجوز در سایت /index.php/component/users/?view=login بگیرید.


اکنون می توانید با استفاده از روش دلخواه کاربر ایجاد کنید. اگر همه چیز درست شد، به شما تبریک می گویم - شما فقط از یک آسیب پذیری سوء استفاده کردید CVE-2016-8870"بررسی مجوز از دست رفته برای ثبت نام کاربران جدید."

این چیزی است که در متد register() "کاری" از کنترلر UsersControllerRegistration به نظر می رسد:

  • /components/com_users/controllers/registration.php: 113: // اگر ثبت نام غیرفعال است - به صفحه ورود هدایت شوید. 114: if (JComponentHelper::getParams("com_users")->get("allowUserRegistration") == 0) 115: ( 116: $this->setRedirect(JRoute::_("index.php?option=com_users&view= ورود، نادرست))؛ 117: 118: بازگشت نادرست؛ 119: )

و به این ترتیب در آسیب پذیری:

  • /components/com_users/controllers/user.php:

بله، به هیچ وجه.

برای درک دومین مشکل بسیار جدی تر، اجازه دهید درخواستی را که ایجاد کرده ایم ارسال کنیم و ببینیم که چگونه در قسمت های مختلف کد اجرا می شود. در اینجا قطعه ای است که مسئول اعتبارسنجی داده های ارسالی کاربر در متد worker است:

ادامه فقط برای اعضا در دسترس است

گزینه 1. برای خواندن تمام مطالب موجود در سایت به انجمن "سایت" بپیوندید

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



جدید در سایت

>

محبوبترین